summaryrefslogtreecommitdiff
path: root/error.c
diff options
context:
space:
mode:
authorPeter Mikkelsen <peter@pmikkelsen.com>2022-02-22 21:25:36 +0000
committerPeter Mikkelsen <peter@pmikkelsen.com>2022-02-22 21:25:36 +0000
commit40af1deff9db7b86532db6957ebdbc0aaff38db1 (patch)
treecb417113744f26a015d36ee6732746c4e808e700 /error.c
parentae6471f1c94f51df540d95edc09c7749002f44e8 (diff)
Make errors more like dyalog:
* Use the same error numbers * Rename ⎕THROW to ⎕SIGNAL * Implement ⎕EN to inspect the last error code * Implement ⎕EM to get a message from an error code
Diffstat (limited to 'error.c')
-rw-r--r--error.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/error.c b/error.c
index 2a59553..09f2c32 100644
--- a/error.c
+++ b/error.c
@@ -7,19 +7,6 @@
ErrorGuard *globalerrorguard;
-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",
-};
-
ErrorGuard *
newerrorguard(Array *codes, Statement *guard)
{
@@ -69,3 +56,19 @@ match:
longjmp(matching->jmp, 1);
}
+Rune *
+errorstr(int code)
+{
+ Rune *err;
+ switch(code){
+ case ESyntax: err = L"SYNTAX ERROR"; break;
+ case EIndex: err = L"INDEX ERROR"; break;
+ case ERank: err = L"RANK ERROR"; break;
+ case ELength: err = L"LENGTH ERROR"; break;
+ case EValue: err = L"VALUE ERROR"; break;
+ case EDomain: err = L"DOMAIN ERROR"; break;
+ case ENotImplemented: err = L"NOT IMPLEMENTED"; break;
+ default: err = L""; break;
+ }
+ return err;
+} \ No newline at end of file