CHECK_AND_SET_JUMP_OFFSET_AT(cx, cg, beq); if (!js_EmitTree(cx, cg, pn->pn_kid3))
(ptrdiff_t)(CG_OFFSET(cg) - off)) < 0 || js_Emit3(cx, cg, op, ARGC_HI(argc), ARGC_LO(argc)) < 0) {
        CHECK_AND_SET_JUMP_OFFSET_AT(cx, cg, beq);        if (!js_EmitTree(cx, cg, pn->pn_kid3))            return JS_FALSE;        CHECK_AND_SET_JUMP_OFFSET_AT(cx, cg, jmp);        break;      case TOK_OR:        /* Emit left operand, emit pop-if-converts-to-false-else-jump. */        if (!js_EmitTree(cx, cg, pn->pn_left))            return JS_FALSE;#if JS_BUG_SHORT_CIRCUIT        beq = js_Emit3(cx, cg, JSOP_IFEQ, 0, 0);        tmp = js_Emit1(cx, cg, JSOP_TRUE);        jmp = js_Emit3(cx, cg, JSOP_GOTO, 0, 0);        if (beq < 0 || tmp < 0 || jmp < 0)            return JS_FALSE;        CHECK_AND_SET_JUMP_OFFSET_AT(cx, cg, beq);#else        /*         * JSOP_OR converts the operand on the stack to boolean, and if true,         * leaves the original operand value on the stack and jumps; otherwise         * it pops and falls into the next bytecode.         */        jmp = js_Emit3(cx, cg, JSOP_OR, 0, 0);        if (jmp < 0)            return JS_FALSE;#endif        if (!js_EmitTree(cx, cg, pn->pn_right))            return JS_FALSE;        CHECK_AND_SET_JUMP_OFFSET_AT(cx, cg, jmp);        break;      case TOK_AND:        /* && is like || except it uses a pop-if-converts-to-true-else-jump. */        if (!js_EmitTree(cx, cg, pn->pn_left))            return JS_FALSE;#if JS_BUG_SHORT_CIRCUIT        beq = js_Emit3(cx, cg, JSOP_IFNE, 0, 0);        tmp = js_Emit1(cx, cg, JSOP_FALSE);        jmp = js_Emit3(cx, cg, JSOP_GOTO, 0, 0);        if (beq < 0 || tmp < 0 || jmp < 0)            return JS_FALSE;        CHECK_AND_SET_JUMP_OFFSET_AT(cx, cg, beq);#else        jmp = js_Emit3(cx, cg, JSOP_AND, 0, 0);        if (jmp < 0)            return JS_FALSE;#endif        if (!js_EmitTree(cx, cg, pn->pn_right))            return JS_FALSE;        CHECK_AND_SET_JUMP_OFFSET_AT(cx, cg, jmp);        break;      case TOK_BITOR:      case TOK_BITXOR:      case TOK_BITAND:      case TOK_EQOP:      case TOK_RELOP:#if JS_HAS_IN_OPERATOR      case TOK_IN:#endif#if JS_HAS_INSTANCEOF      case TOK_INSTANCEOF:#endif      case TOK_SHOP:      case TOK_PLUS:      case TOK_MINUS:      case TOK_STAR:      case TOK_DIVOP:        /* Binary operators that evaluate both operands unconditionally. */        if (!js_EmitTree(cx, cg, pn->pn_left))            return JS_FALSE;        if (!js_EmitTree(cx, cg, pn->pn_right))            return JS_FALSE;        if (js_Emit1(cx, cg, pn->pn_op) < 0)            return JS_FALSE;        break;#if JS_HAS_EXCEPTIONS      case TOK_THROW:#endif      case TOK_UNARYOP:        /* Unary op, including unary +/-. */        if (!js_EmitTree(cx, cg, pn->pn_kid))            return JS_FALSE;        if (js_Emit1(cx, cg, pn->pn_op) < 0)            return JS_FALSE;        break;      case TOK_INC:      case TOK_DEC:        /* Emit lvalue-specialized code for ++/-- operators. */        pn2 = pn->pn_kid;        JS_ASSERT(pn2->pn_type != TOK_RP);        op = pn->pn_op;        switch (pn2->pn_type) {          case TOK_NAME:            pn2->pn_op = op;            if (!LookupArgOrVar(cx, &cg->treeContext, pn2))                return JS_FALSE;            op = pn2->pn_op;            if (pn2->pn_slot >= 0) {                if (pn2->pn_attrs & JSPROP_READONLY)                    op = JSOP_GETVAR;                atomIndex = (jsatomid) pn2->pn_slot;                EMIT_ATOM_INDEX_OP(op, atomIndex);            } else {