switch (stmt->type) { case STMT_FINALLY: if (js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0 || js_Emit3(cx, cg, JSOP_JSR, JUMP_OFFSET_HI(finallyIndex), JUMP_OFFSET_LO(finallyIndex)) < 0) return -1; finallyIndex--; break; case STMT_WITH: if (js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0) return -1; cg->stackDepth++; if (js_Emit1(cx, cg, JSOP_LEAVEWITH) < 0) return -1; break; case STMT_FOR_IN_LOOP: if (js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0) return -1; cg->stackDepth += 2; if (js_Emit1(cx, cg, JSOP_POP2) < 0) return -1; break; default:; }
switch (stmt->type) { case STMT_FINALLY: if (js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0 || js_Emit3(cx, cg, JSOP_GOSUB, JUMP_OFFSET_HI(finallyIndex), JUMP_OFFSET_LO(finallyIndex)) < 0) return -1; finallyIndex--; break; case STMT_WITH: if (js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0) return -1; cg->stackDepth++; if (js_Emit1(cx, cg, JSOP_LEAVEWITH) < 0) return -1; break; case STMT_FOR_IN_LOOP: if (js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0) return -1; cg->stackDepth += 2; if (js_Emit1(cx, cg, JSOP_POP2) < 0) return -1; break; default:; }
EmitGoto(JSContext *cx, JSCodeGenerator *cg, JSStmtInfo *toStmt,	 ptrdiff_t *last, JSAtomListElement *label, JSSrcNoteType noteType){    JSStmtInfo *stmt;    intN index;    uint16 finallyIndex = 0;    ptrdiff_t offset, delta;    for (stmt = cg->treeContext.topStmt; stmt != toStmt; stmt = stmt->down) {	switch (stmt->type) {	  case STMT_FINALLY:	    if (js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0 ||		js_Emit3(cx, cg, JSOP_JSR, JUMP_OFFSET_HI(finallyIndex),			 JUMP_OFFSET_LO(finallyIndex)) < 0)		return -1;	    finallyIndex--;	    break;	  case STMT_WITH:	    if (js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0)		return -1;	    cg->stackDepth++;	    if (js_Emit1(cx, cg, JSOP_LEAVEWITH) < 0)		return -1;	    break;	  case STMT_FOR_IN_LOOP:	    if (js_NewSrcNote(cx, cg, SRC_HIDDEN) < 0)		return -1;	    cg->stackDepth += 2;	    if (js_Emit1(cx, cg, JSOP_POP2) < 0)		return -1;	    break;	  default:;	}    }    if (label) {	index = js_NewSrcNote(cx, cg, noteType);	if (index < 0)	    return -1;	if (!js_SetSrcNoteOffset(cx, cg, (uintN)index, 0,				 (ptrdiff_t)label->index)) {	    return -1;	}    }    offset = CG_OFFSET(cg);    delta = offset - *last;    *last = offset;    return js_Emit3(cx, cg, JSOP_GOTO,		    JUMP_OFFSET_HI(delta), JUMP_OFFSET_LO(delta));}