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.