void showmap(SYMBOL * sym) { MAP *map; map = (MAP *) sym->v.p; printmap(sym); if (--map->refcnt > 0) sym->v.p = NULL; freesym(sym); }
void setmap(SYMBOL * var, SYMBOL * map) { SYMBOL *sym; if (var->name) { sym = getsym(var->name); if (sym) { sym->v.p = freemap(sym->v.p); sym->v.p = map->v.p; } } freemap(var->v.p); var->v.p = NULL; freesym(var); printmap(map); map->v.p = NULL; freesym(map); }
void setany(SYMBOL * var, SYMBOL * any) { SYMBOL *sym; if (var->name) { sym = getsym(var->name); if (sym) { if (--((ANY *) sym->v.p)->refcnt < 1) G_free(sym->v.p); sym->v.p = any->v.p; } } if (--((ANY *) var->v.p)->refcnt < 1) G_free(var->v.p); var->v.p = NULL; freesym(var); /* can't show an anyvar */ any->v.p = NULL; freesym(any); }
SYMBOL *mkmapvar(SYMBOL * var, SYMBOL * map) { var->type = var->itype = st_map; var->name = var->v.p; var->v.p = map->v.p; map->v.p = NULL; freesym(map); symtab = (SYMBOL *) listadd((LIST *) symtab, (LIST *) var, cmpsymsym); printmap(var); return var; }