void free_env_code(void) { unsigned int i; InsT_t *inst; code_t *c = &EiC_ENV->CODE; while(c->prev) /* find start point */ c = (code_t*)c->prev; inst = c->inst; /* rem free up other info also */ for (i = 0; i < c->nextinst; i++, inst++) if (inst->opcode == jmptab) { eicstack_t *s; s = inst->val.p.p; xfree(s->val); s->val = NULL; //maks xfree(s); s = NULL; //maks } else if (inst->opcode == assigntype) { EiC_freetype(inst->val.p.p); } else if(inst->opcode == halt) { EiC_freetype(inst->val.p.p); } EiC_freecode(c); EiC_ENV->CODE = *c; }
static int showhashtab(void) { int tab; token_t e1; EiC_work_tab = tab = stand_tab; /* standard name space */ EiC_inittoken(&e1); switch(EiC_lexan()) { TYPESPEC: TYPEQUAL: retractlexan(); EiC_type_name(&e1); break; case ID: if(strcmp(EiC_LEXEM,"tags") == 0) tab = tag_tab; else if(strcmp(EiC_LEXEM,"builtin") == 0) e1.Type = EiC_addtype(t_builtin,0); else retractlexan(); break; default: retractlexan(); } if(e1.Type) { showtab(tab, 0,&e1,NULL,NULL); EiC_freetype(e1.Type); } else { showtab(tab,0,NULL,NULL,IsObject); showtab(tab,0,NULL,NULL,EiC_IsFunc); } return 1; }
symentry_t *EiC_add_builtinfunc(char *name, val_t(*vfunc) ()) { symentry_t *sym; sym = EiC_insertLUT(stand_tab, name, ID); EiC_freetype(sym->type); sym->level = 1; sym->val.vfunc = vfunc; sym->type = EiC_addtype(t_builtin,NULL); return sym; }