//create new table instance gcvarpt* tableNewSize(lu32 tsize) { gcvarpt* table = gcNewVar(VAR_TABLE, sizeof(lu32)*tsize*2 + sizeof(lu32) + sizeof(lu32)); GCVALUE(hashtable,table).count = 0; GCVALUE(hashtable,table).size = tsize; GCVALUE(hashtable,table).keys = (lu32*) &((*table)->data[sizeof(lu32) + sizeof(lu32)]); GCVALUE(hashtable,table).vals = (lu32*) &((*table)->data[sizeof(lu32) + sizeof(lu32)+sizeof(lu32)*tsize]); return table; }
//dump gc memory void gcDump() { platformPrintf("Dumping memory: size=%d, address=%d\n", GC_SIZE, &memory); u16 constpt; u32 size; u08* name; for(int i=0; i<GC_VAR_PT_SIZE; i++) { if(vars[i] == NULL) continue; switch(vars[i]->type) { case VAR_BOOLEAN: platformPrintf("VAR_BOOLEAN: size=%d, address=%d(m+%d), value=%d\n",vars[i]->size, vars[i], (u08*)vars[i] - memory, GCVALUE(u08, &vars[i])); break; case VAR_NUMBER: platformPrintf("VAR_NUMBER: size=%d, address=%d(m+%d), value=%d\n",vars[i]->size, vars[i], (u08*)vars[i] - memory, GCVALUE(u32, &vars[i])); break; case VAR_FLOAT: platformPrintf("VAR_FLOAT: size=%d, address=%d(m+%d), value=%f\n",vars[i]->size, vars[i], (u08*)vars[i] - memory, GCVALUE(float, &vars[i])); break; case VAR_STRING: platformPrintf("VAR_STRING: size=%d, address=%d(m+%d), value=%s\n",vars[i]->size, vars[i], (u08*)vars[i] - memory, vars[i]->data); break; case VAR_FILE_POINTER_STR: constpt = GCVALUE(u16, &vars[i]); size = platformReadDWord(constpt); constpt += 4; name = platformReadBuffer(constpt, size); platformPrintf("VAR_FILE_POINTER_STR: size=%d, address=%d(m+%d), value=%s\n",vars[i]->size, vars[i], (u08*)vars[i] - memory, name); break; case VAR_CLOSURE: platformPrintf("VAR_CLOSURE: size=%d, address=%d(m+%d), value=%d\n",vars[i]->size, vars[i], (u08*)vars[i] - memory, GCVALUE(u16, &vars[i])); break; case VAR_NULL: platformPrintf("VAR_NULL: size=%d, address=%d(m+%d)\n",vars[i]->size, vars[i], (u08*)vars[i] - memory); break; default: platformPrintf("UNKNOWN_TYPE: size=%d, address=%d(m+%d)\n",vars[i]->size, vars[i], (u08*)vars[i] - memory); break; } } }