diff options
-rw-r--r-- | apl9.h | 1 | ||||
-rw-r--r-- | eval.c | 7 | ||||
-rw-r--r-- | quadnames.c | 1 | ||||
-rw-r--r-- | symbol.c | 9 |
4 files changed, 4 insertions, 14 deletions
@@ -158,7 +158,6 @@ struct Datum struct Symbol { - int undefined; Rune *name; Datum *value; Datum *(*getfn)(void); @@ -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; } diff --git a/quadnames.c b/quadnames.c index 57c5dbb..209c339 100644 --- a/quadnames.c +++ b/quadnames.c @@ -61,7 +61,6 @@ initquadnames(void) s = getsym(q.name, 1); s->getfn = q.get; s->setfn = q.set; - s->undefined = 0; } } } @@ -47,9 +47,9 @@ getsym(Rune *name, int fresh) tab->syms = erealloc(tab->syms, sizeof(Symbol *) * tab->nsyms); tab->syms[tab->nsyms-1] = emalloc(sizeof(Symbol)); tab->syms[tab->nsyms-1]->name = runestrdup(name); - tab->syms[tab->nsyms-1]->undefined = 1; tab->syms[tab->nsyms-1]->getfn = nil; tab->syms[tab->nsyms-1]->setfn = nil; + tab->syms[tab->nsyms-1]->value = nil; return tab->syms[tab->nsyms-1]; } @@ -71,8 +71,7 @@ freesymtab(Symtab *tab) int i; for(i = 0; i < tab->nsyms; i++){ Symbol *s = tab->syms[i]; - if(s->undefined == 0) - freedatum(s->value); + freedatum(s->value); free(s->name); } free(tab->syms); @@ -87,22 +86,18 @@ initsymtab(void) s = getsym(L"⍺", 1); s->getfn = getalpha; s->setfn = setalpha; - s->undefined = 0; s = getsym(L"⍵", 1); s->getfn = getomega; s->setfn = setsyntaxerr; - s->undefined = 0; s = getsym(L"⍶", 1); s->getfn = getalphao; s->setfn = setsyntaxerr; - s->undefined = 0; s = getsym(L"⍹", 1); s->getfn = getomegao; s->setfn = setsyntaxerr; - s->undefined = 0; } DfnFrame * |