summaryrefslogtreecommitdiff
path: root/error.c
diff options
context:
space:
mode:
authorglenda <glenda@cirno>2022-09-12 15:38:48 +0000
committerglenda <glenda@cirno>2022-09-12 15:38:48 +0000
commit18c383ac2da9b56a84374645eac3868de0c9331e (patch)
tree2673338b6522b1b410b6f25660b94b04a84f9814 /error.c
parent9f463939c96f8528819c66678c1be0c6333cdd11 (diff)
Try to throw errors on C stack overflows
Diffstat (limited to 'error.c')
-rw-r--r--error.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/error.c b/error.c
index 45670f5..5b7f386 100644
--- a/error.c
+++ b/error.c
@@ -67,6 +67,7 @@ errorstr(int code)
case EValue: err = L"VALUE ERROR"; break;
case EDomain: err = L"DOMAIN ERROR"; break;
case ETimeout: err = L"TIMEOUT ERROR"; break;
+ case EStack: err = L"STACK OVERFLOW"; break;
case ENotImplemented: err = L"NOT IMPLEMENTED"; break;
default: err = L""; break;
}
@@ -77,11 +78,14 @@ void
displayerror(void)
{
ThreadData *td = getthreaddata();
+ int tmp = td->requiredstack;
+ td->requiredstack = 0;
Array *error = allocarray(AtypeArray, 1, 3);
error->shape[0] = 3;
error->arraydata[0] = mkrunearray(errorstr(td->lasterror));
error->arraydata[1] = mkrunearray(td->lasterrormsg ? td->lasterrormsg : L"");
error->arraydata[2] = fnSame(td->name);
rundfn(L"0::⎕RAWIO←⍵ ⋄ ('!' ⍵) ⍈ ⎕SESSION", nil, nil, nil, error);
+ td->requiredstack = tmp;
freearray(error);
} \ No newline at end of file