From aad6ff05cc6110da6b458d9631604dacb44bcc61 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sun, 12 Dec 2021 13:06:13 +0100 Subject: all: add error handling on init --- cmd/demo/main.ha | 4 ++-- sdl2/image/image.ha | 10 ++++++---- sdl2/sdl2.ha | 6 +++++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/cmd/demo/main.ha b/cmd/demo/main.ha index 73a5517..2b662a2 100644 --- a/cmd/demo/main.ha +++ b/cmd/demo/main.ha @@ -30,9 +30,9 @@ export fn main() void = { }; fn run() (void | sdl2::error) = { - sdl2::init(sdl2::init_flags::VIDEO | sdl2::init_flags::GAMECONTROLLER); + sdl2::init(sdl2::init_flags::VIDEO | sdl2::init_flags::GAMECONTROLLER)!; defer sdl2::quit(); - image::init(image::init_flags::PNG | image::init_flags::JPG); + image::init(image::init_flags::PNG | image::init_flags::JPG)!; defer image::quit(); mixer::init(mixer::init_flags::OGG)!; diff --git a/sdl2/image/image.ha b/sdl2/image/image.ha index 6cabee2..8a48009 100644 --- a/sdl2/image/image.ha +++ b/sdl2/image/image.ha @@ -12,11 +12,13 @@ export type init_flags = enum int { WEBP = 0x00000008, }; +@symbol("IMG_Init") fn _init(flags: init_flags) int; + // Loads dynamic libraries and prepares them for use. Flags should be one or -// more flags from IMG_InitFlags OR'd together. -// -// Returns the flags successfully initialized, or 0 on failure. -export @symbol("IMG_Init") fn init(flags: init_flags) int; +// more flags from [[init_flags]] OR'd together. +export fn init(flags: init_flags) (void | sdl2::error) = { + return sdl2::wrapvoid(_init(flags)); +}; // Unloads libraries loaded with [[init]] export @symbol("IMG_Quit") fn quit() void; diff --git a/sdl2/sdl2.ha b/sdl2/sdl2.ha index b71c890..08e1234 100644 --- a/sdl2/sdl2.ha +++ b/sdl2/sdl2.ha @@ -13,8 +13,12 @@ export type init_flags = enum uint { EVERYTHING = TIMER | AUDIO | VIDEO | EVENTS | JOYSTICK | HAPTIC | GAMECONTROLLER | SENSOR, }; +@symbol("SDL_Init") fn _init(flags: init_flags) int; + // This function initializes the subsystems specified by 'flags'. -export @symbol("SDL_Init") fn init(flags: init_flags) void; +export fn init(flags: init_flags) (void | error) = { + return wrapvoid(_init(flags)); +}; // This function cleans up all initialized subsystems. You should call it upon // all exit conditions. -- cgit v1.2.3