summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/eval.c b/eval.c
index b7515b1..ea7e84f 100644
--- a/eval.c
+++ b/eval.c
@@ -141,7 +141,7 @@ lookup(Datum *var)
traceprint("VAR LOOKUP %S\n", var->name);
Symbol *symbol = getsym(var->name, 0);
- if(symbol->undefined){
+ if(symbol->value == nil && symbol->getfn == nil){
Rune *msg = runesmprint("Undefined name: %S", var->name);
throwerror(msg, EValue);
}
@@ -259,12 +259,9 @@ assign(Datum *left, Datum *right)
else{
/* re-assign the symbol to one that is sure to be local. This enables shadowing */
symbol = getsym(symbol->name, 1);
-
- if(symbol->undefined == 0)
- freedatum(symbol->value);
+ freedatum(symbol->value);
symbol->value = right;
incdatumref(right);
- symbol->undefined = 0;
if(symbol->value->tag == ArrayTag)
symbol->value->array->stranded = 0;
}