summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/eval.c b/eval.c
index ee0de84..658dde8 100644
--- a/eval.c
+++ b/eval.c
@@ -225,7 +225,11 @@ nameis(Datum left, Datum right)
Datum
assign(Datum left, Datum right)
{
- if(left.symbol->setfn != nil)
+ if(runestrcmp(left.symbol->name, L"⍵") == 0)
+ throwerror(nil, ESyntax);
+ else if(runestrcmp(left.symbol->name, L"⍺") == 0 && !left.symbol->undefined)
+ goto end;
+ else if(left.symbol->setfn != nil)
left.symbol->setfn(right);
else{
if(left.symbol->undefined == 0 && left.symbol->value.tag == ArrayTag)
@@ -237,6 +241,7 @@ assign(Datum left, Datum right)
incref(right.array); /* for the binding */
}
}
+end:
right.shy = 1;
if(right.tag == ArrayTag)
incref(right.array); /* for the returned array */