static int size_gvars(HashT *vars) { int sz = sizeof(int); /* for nvars */ int hval; if (vars) { for (hval = 0; hval < vars->size; hval++) { sz += size_vars(vars->table[hval]); } } return sz; }
Int size_object(Obj *obj, int memory_size) { Int size = 0; size = size_list(obj->parents, memory_size); size += size_list(obj->children, memory_size); size += size_vars(obj, memory_size); size += size_methods(obj, memory_size); if (!memory_size) size += size_ident(obj->objname, memory_size); if (memory_size) { size += sizeof(Obj); } return size; }
static int size_methods(HashT *methods) { int hval, sz = sizeof(int); /* for nmethods */ Method *m; if (methods) { for (hval = 0; hval < methods->size; hval++) { for (m = (Method *) methods->table[hval]; m; m = m->next) { sz += sizeof(m->name); sz += sizeof(unsigned char); /* for blocked flag */ sz += sizeof(m->ninst) + m->ninst * sizeof(Inst); sz += sizeof(int); /* for nvars */ sz += NERRS * sizeof(enum eh) + size_vars(m->vars); } } } return sz; }