summaryrefslogtreecommitdiff
path: root/main.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 /main.c
parent1ddd7de5b15f52c13a5c084445253655a94bd970 (diff)
Implement better error handling, but still no error guards
Diffstat (limited to 'main.c')
-rw-r--r--main.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/main.c b/main.c
index 96a6d07..13750ef 100644
--- a/main.c
+++ b/main.c
@@ -27,23 +27,31 @@ main(int argc, char *argv[])
break;
}ARGEND
+ int errorcode;
+restart:
+ SETUPERROR(errorcode);
+ if(errorcode){
+ if(globalerror.msg)
+ print("%S: %S\n", errorstrs[errorcode], globalerror.msg);
+ else
+ print("%S\n", errorstrs[errorcode]);
+ goto restart;
+ }
+
while(!off){
checkmem("main loop");
Rune *input = prompt(L"\t");
Datum *result = evalline(input, 1);
- if(result == nil){
- if(errormsg == nil)
- off = 1;
- else
- print("ERROR: %S\n", errormsg);
- }else{
+ if(result == nil)
+ continue;
+ else{
if(result[0].shy == 0)
print("%S\n", ppdatum(*result));
if(result->tag == ArrayTag)
freearray(result->array);
free(result);
}
- print("Unfreed arrays: %d\n", alloccounts);
+ /* print("Unfreed arrays: %d\n", alloccounts); */
}
exits(nil);
}