if (preserveTop) { if (js_Emit1(cx, cg, JSOP_SWAP) < 0) return JS_FALSE; }
EmitNonLocalJumpFixup(JSContext *cx, JSCodeGenerator *cg, JSStmtInfo *toStmt,                      JSBool preserveTop){    JSStmtInfo *stmt;    ptrdiff_t jmp;    /*     * If we're here as part of processing a return, emit JSOP_SWAP to preserve     * the top element.     */    for (stmt = cg->treeContext.topStmt; stmt != toStmt; stmt = stmt->down) {        switch (stmt->type) {          case STMT_FINALLY:            if (js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0)                return JS_FALSE;            EMIT_BACKPATCH_OP(cx, cg, stmt->gosub, JSOP_BACKPATCH_PUSH, jmp);            if (jmp < 0)                return JS_FALSE;            break;          case STMT_WITH:          case STMT_CATCH:            if (preserveTop) {                if (js_Emit1(cx, cg, JSOP_SWAP) < 0)                    return JS_FALSE;            }            if (js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0)                return JS_FALSE;            cg->stackDepth++;            if (js_Emit1(cx, cg, JSOP_LEAVEWITH) < 0)                return JS_FALSE;            break;          case STMT_FOR_IN_LOOP:            cg->stackDepth += 2;            if (preserveTop) {                if (js_Emit1(cx, cg, JSOP_SWAP) < 0 ||                    js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0 ||                    js_Emit1(cx, cg, JSOP_POP) < 0 ||                    js_Emit1(cx, cg, JSOP_SWAP) < 0 ||                    js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0 ||                    js_Emit1(cx, cg, JSOP_POP) < 0) {                    return JS_FALSE;                }            } else {                /* JSOP_POP2 isn't decompiled, and doesn't need a src note. */                if (js_Emit1(cx, cg, JSOP_POP2) < 0)                    return JS_FALSE;            }            break;          default:;        }    }    return JS_TRUE;}