static void PrintObject(JSObject* obj, int depth, ObjectPile* pile) { PrintObjectBasics(obj); switch(pile->Visit(obj)) { case ObjectPile::primary: puts(""); break; case ObjectPile::seen: puts(" (SEE ABOVE)"); return; case ObjectPile::overflow: puts(" (TOO MANY OBJECTS)"); return; } if(!JS_IsNative(obj)) return; JSObject* parent = js::GetObjectParent(obj); JSObject* proto = js::GetObjectProto(obj); printf("%*sparent: ", INDENT(depth+1)); if(parent) PrintObject(parent, depth+1, pile); else puts("null"); printf("%*sproto: ", INDENT(depth+1)); if(proto) PrintObject(proto, depth+1, pile); else puts("null"); }
static void PrintObject(JSObject* obj, int depth, ObjectPile* pile) { PrintObjectBasics(obj); switch(pile->Visit(obj)) { case ObjectPile::primary: puts(""); break; case ObjectPile::seen: puts(" (SEE ABOVE)"); return; case ObjectPile::overflow: puts(" (TOO MANY OBJECTS)"); return; } if(!OBJ_IS_NATIVE(obj)) return; JSObject* parent = (JSObject*)(obj->slots[JSSLOT_PARENT]); JSObject* proto = (JSObject*)(obj->slots[JSSLOT_PROTO]); printf("%*sparent: ", INDENT(depth+1)); if(parent) PrintObject(parent, depth+1, pile); else puts("null"); printf("%*sproto: ", INDENT(depth+1)); if(proto) PrintObject(proto, depth+1, pile); else puts("null"); }