void InlineFrameIterator::dump() const { if (more()) fprintf(stderr, " JS frame (inlined)\n"); else fprintf(stderr, " JS frame\n"); bool isFunction = false; if (isFunctionFrame()) { isFunction = true; fprintf(stderr, " callee fun: "); #ifdef DEBUG js_DumpObject(callee()); #else fprintf(stderr, "?\n"); #endif } else { fprintf(stderr, " global frame, no callee\n"); } fprintf(stderr, " file %s line %u\n", script()->filename, (unsigned) script()->lineno); fprintf(stderr, " script = %p, pc = %p\n", (void*) script(), pc()); fprintf(stderr, " current op: %s\n", js_CodeName[*pc()]); if (!more()) { numActualArgs(); } SnapshotIterator si = snapshotIterator(); fprintf(stderr, " slots: %u\n", si.slots() - 1); for (unsigned i = 0; i < si.slots() - 1; i++) { if (isFunction) { if (i == 0) fprintf(stderr, " scope chain: "); else if (i == 1) fprintf(stderr, " this: "); else if (i - 2 < callee()->nargs) fprintf(stderr, " formal (arg %d): ", i - 2); else { if (i - 2 == callee()->nargs && numActualArgs() > callee()->nargs) { DumpOp d(callee()->nargs); forEachCanonicalActualArg(d, d.i_, numActualArgs()); } fprintf(stderr, " slot %d: ", i - 2 - callee()->nargs); } } else fprintf(stderr, " slot %u: ", i); #ifdef DEBUG js_DumpValue(si.maybeRead()); #else fprintf(stderr, "?\n"); #endif } fputc('\n', stderr); }