summaryrefslogtreecommitdiff
path: root/error.c
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-21 15:18:22 +0000
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-21 15:18:22 +0000
commit40c021d964bc60d2b60dd78022e180c964ea1b67 (patch)
treeaee97fdfef0378c94871579b8bc12cbdca583553 /error.c
parent1ddd7de5b15f52c13a5c084445253655a94bd970 (diff)
Implement better error handling, but still no error guards
Diffstat (limited to 'error.c')
-rw-r--r--error.c29
1 files changed, 29 insertions, 0 deletions
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 <u.h>
+#include <libc.h>
+#include <bio.h>
+
+#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);
+}
+