diff options
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 7 |
1 files changed, 2 insertions, 5 deletions
@@ -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; } |