diff options
Diffstat (limited to 'sdl3/errors.scm')
-rw-r--r-- | sdl3/errors.scm | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/sdl3/errors.scm b/sdl3/errors.scm new file mode 100644 index 0000000..3d48647 --- /dev/null +++ b/sdl3/errors.scm @@ -0,0 +1,54 @@ +;;; guile-sdl3 -- Scheme bindings for SDL3 +;;; Copyright © 2024 David Thompson <dthompson2@worcester.edu> +;;; +;;; Licensed under the Apache License, Version 2.0 (the "License"); +;;; you may not use this file except in compliance with the License. +;;; You may obtain a copy of the License at +;;; +;;; http://www.apache.org/licenses/LICENSE-2.0 +;;; +;;; Unless required by applicable law or agreed to in writing, software +;;; distributed under the License is distributed on an "AS IS" BASIS, +;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +;;; See the License for the specific language governing permissions and +;;; limitations under the License. + +;;; Commentary: +;; +;; SDL3 errors. +;; +;;; Code: + +(define-module (sdl3 errors) + #:use-module (ice-9 exceptions) + #:use-module (sdl3 bindings error) + #:use-module (system foreign) + #:export (sdl-get-error + make-sdl-error + sdl-assert + sdl-assert-non-null)) + +(define (sdl-get-error) + (pointer->string (SDL_GetError))) + +(define-exception-type &sdl-exception &error + make-sdl-exception + sdl-exception?) + +(define* (make-sdl-error origin #:key + (message (sdl-get-error)) + (irritants '())) + (make-exception + (make-sdl-exception) + (make-exception-with-message message) + (make-exception-with-irritants irritants) + (make-exception-with-origin origin))) + +(define (sdl-assert origin bool) + (unless (eq? bool 1) + (raise-exception (make-sdl-error origin)))) + +(define (sdl-assert-non-null origin pointer) + (when (null-pointer? pointer) + (raise-exception (make-sdl-error origin))) + pointer) |