From e12450d52dce2d6271d12720bf18175d082a0003 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Fri, 21 Jan 2022 15:27:59 +0000 Subject: =?UTF-8?q?Add=20=E2=8E=95THROW=20for=20throwing=20errors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- quadnames.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'quadnames.c') diff --git a/quadnames.c b/quadnames.c index a582abb..3368b70 100644 --- a/quadnames.c +++ b/quadnames.c @@ -12,12 +12,15 @@ Datum *getpp(void); int setpp(Datum); Array *runfile(Array *); +Array *quadthrow1(Array *); +Array *quadthrow2(Array *, Array *); QuadnameDef quadnames[] = { {L"⎕", NameTag, getquad, setquad, nil, nil}, {L"⎕IO", NameTag, getio, setio, nil, nil}, {L"⎕PP", NameTag, getpp, setpp, nil, nil}, {L"⎕RUN", FunctionTag, nil, nil, runfile, nil}, + {L"⎕THROW", FunctionTag, nil, nil, quadthrow1, quadthrow2}, {nil, 0, nil, nil, nil, nil} /* MUST BE LAST */ }; @@ -130,4 +133,29 @@ runfile(Array *a) free(code); Bterm(bio); return mkscalarint(1); +} + +/* ⎕THROW */ +Array * +quadthrow1(Array *code) +{ + if(code->type != AtypeInt) + throwerror(nil, EType); + if(code->size != 1) + throwerror(nil, ELength); + throwerror(nil, code->intdata[0]); + return nil; +} + +Array * +quadthrow2(Array *msg, Array *code) +{ + if(code->type != AtypeInt || msg->type != AtypeRune) + throwerror(nil, EType); + if(code->size != 1) + throwerror(nil, ELength); + if(msg->rank > 1) + throwerror(nil, ERank); + throwerror(pparray(msg), code->intdata[0]); + return nil; } \ No newline at end of file -- cgit v1.2.3