From 40af1deff9db7b86532db6957ebdbc0aaff38db1 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Tue, 22 Feb 2022 21:25:36 +0000 Subject: Make errors more like dyalog: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 --- error.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'error.c') 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 -- cgit v1.2.3