diff options
| author | Drew DeVault <sir@cmpwn.com> | 2021-12-10 09:42:10 +0100 |
|---|---|---|
| committer | Drew DeVault <sir@cmpwn.com> | 2021-12-10 09:44:50 +0100 |
| commit | 9607eb0de784fab1a99833f567c0eaca72b67e4a (patch) | |
| tree | 7f79a0914a6db1d963d877bed051f6856c54cfa8 /sdl2/errors.ha | |
| parent | Makefile: drop -T+libc (diff) | |
| download | hare-chip8-9607eb0de784fab1a99833f567c0eaca72b67e4a.tar.gz | |
all: rig up Hare-native error handling
Diffstat (limited to 'sdl2/errors.ha')
| -rw-r--r-- | sdl2/errors.ha | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/sdl2/errors.ha b/sdl2/errors.ha new file mode 100644 index 0000000..bc02505 --- /dev/null +++ b/sdl2/errors.ha @@ -0,0 +1,31 @@ +use strings; + +// Returned when an error occurs in an SDL function. +export type error = !str; + +// Converts an SDL error into a human-friendly string. +export fn strerror(err: error) str = { + return err: str; +}; + +@symbol("SDL_GetError") fn geterror() const *char; + +export fn wrapvoid(ret: int) (void | error) = { + wrapint(ret)?; +}; + +export fn wrapint(ret: int) (int | error) = { + if (ret < 0) { + return strings::fromc(geterror()): error; + }; + return ret; +}; + +export fn wrapptr(ret: nullable *void) (*void | error) = { + match (ret) { + case let v: *void => + return v; + case null => + return strings::fromc(geterror()): error; + }; +}; |
