diff options
author | Peter Mikkelsen <peter@pmikkelsen.com> | 2022-02-22 21:25:36 +0000 |
---|---|---|
committer | Peter Mikkelsen <peter@pmikkelsen.com> | 2022-02-22 21:25:36 +0000 |
commit | 40af1deff9db7b86532db6957ebdbc0aaff38db1 (patch) | |
tree | cb417113744f26a015d36ee6732746c4e808e700 /error.c | |
parent | ae6471f1c94f51df540d95edc09c7749002f44e8 (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.c | 29 |
1 files changed, 16 insertions, 13 deletions
@@ -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 |