Installing Variables in Symbol Table
/* install variables in symbol table */ void instvars(TOKEN idlist, TOKEN typetok) { SYMBOL sym, typesym; int align; typesym = typetok->symtype; align = alignsize(typesym); while ( idlist != NULL ) /* for each id */ { sym = insertsym(idlist->stringval); sym->kind = VARSYM; sym->offset = /* "next" */ wordaddress(blockoffs[blocknumber], align); sym->size = typesym->size; blockoffs[blocknumber] = /* "next" */ sym->offset + sym->size; sym->datatype = typesym; sym->basicdt = typesym->basicdt; idlist = idlist->link; }; }
blockoffs[blocknumber] is the offset in the current block; this is the next value for this storage allocation.