From 40c021d964bc60d2b60dd78022e180c964ea1b67 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Fri, 21 Jan 2022 15:18:22 +0000 Subject: Implement better error handling, but still no error guards --- error.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 error.c (limited to 'error.c') diff --git a/error.c b/error.c new file mode 100644 index 0000000..2d69457 --- /dev/null +++ b/error.c @@ -0,0 +1,29 @@ +#include +#include +#include + +#include "apl9.h" + +ErrorHandler globalerror; + +Rune *errorstrs[] = { + [ESyntax] = L"SYNTAX ERROR", + [EParse] = L"PARSE ERROR", + [EValue] = L"VALUE ERROR", + [EDomain] = L"DOMAIN ERROR", + [ERank] = L"RANK ERROR", + [EType] = L"TYPE ERROR", + [ELength] = L"LENGTH ERROR", + [EIndex] = L"INDEX ERROR", + [EShape] = L"SHAPE ERROR", + [ENotImplemented] = L"NOT IMPLEMENTED", +}; + +void +throwerror(Rune *msg, int err) +{ + free(globalerror.msg); + globalerror.msg = msg ? runestrdup(msg) : nil; + longjmp(globalerror.jmp, err); +} + -- cgit v1.2.3