From 269c81f0217999367b4180e6a795142cbb2d02e7 Mon Sep 17 00:00:00 2001 From: glenda Date: Sun, 18 Sep 2022 14:55:48 +0000 Subject: Implement remote message passing via pipes! --- symbol.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'symbol.c') diff --git a/symbol.c b/symbol.c index 029ab0c..5d88f96 100644 --- a/symbol.c +++ b/symbol.c @@ -180,6 +180,9 @@ dupdfnframe(DfnFrame *f) void freedfnframe(DfnFrame *f, int keeperrorguards) { + if(f->keep) + return; + freesymtab(f->symtab); freedatum(f->lefto); freedatum(f->righto); @@ -337,12 +340,19 @@ dupscope(DfnFrame *dfn) Symbol *sym = d->symtab->syms[i]; int found = 0; for(int j = 0; j < new->symtab->nsyms && !found; j++) - if(runestrcmp(new->symtab->syms[i]->name, d->symtab->syms[j]->name) == 0) + if(runestrcmp(new->symtab->syms[j]->name, d->symtab->syms[i]->name) == 0) found = 1; if(!found){ new->symtab->nsyms++; new->symtab->syms = erealloc(new->symtab->syms, sizeof(Symbol *) * new->symtab->nsyms); new->symtab->syms[new->symtab->nsyms-1] = dupsymbol(sym); + sym = new->symtab->syms[new->symtab->nsyms-1]; + if(sym->value){ + if(sym->value->tag == FunctionTag) + sym->value->func.scope->keep = 1; + if(sym->value->tag == MonadicOpTag || sym->value->tag == DyadicOpTag) + sym->value->operator.scope->keep = 1; + } } } } -- cgit v1.2.3