JSBool ok, useful;
JSBool ok;
js_EmitTree(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn){    JSBool ok, useful;    JSCodeGenerator cg2;    JSStmtInfo *stmt, stmtInfo;    ptrdiff_t top, off, tmp, beq, jmp;    JSParseNode *pn2, *pn3, *pn4;    JSAtom *atom;    JSAtomListElement *ale;    jsatomid atomIndex;    intN noteIndex;    JSOp op;    uint32 argc;    pn->pn_offset = top = CG_OFFSET(cg);    /* Emit notes to tell the current bytecode's source line number. */    UPDATE_LINENO_NOTES(cx, cg, pn);    switch (pn->pn_type) {      case TOK_FUNCTION:      {        JSFunction *fun;        /* Generate code for the function's body. */        pn2 = pn->pn_body;        if (!js_InitCodeGenerator(cx, &cg2, cg->filename,                                  pn->pn_pos.begin.lineno,                                  cg->principals)) {            return JS_FALSE;        }        cg2.treeContext.flags = pn->pn_flags;        cg2.treeContext.tryCount = pn->pn_tryCount;        fun = pn->pn_fun;        if (!js_EmitFunctionBody(cx, &cg2, pn2, fun))            return JS_FALSE;        js_FinishCodeGenerator(cx, &cg2);        /* Make the function object a literal in the outer script's pool. */        atom = js_AtomizeObject(cx, fun->object, 0);        if (!atom)            return JS_FALSE;        ale = js_IndexAtom(cx, atom, &cg->atomList);        if (!ale)            return JS_FALSE;        atomIndex = ALE_INDEX(ale);#if JS_HAS_LEXICAL_CLOSURE        /* Emit a bytecode pointing to the closure object in its immediate. */        if (pn->pn_op != JSOP_NOP) {            EMIT_ATOM_INDEX_OP(pn->pn_op, atomIndex);            break;        }#endif        /* Top-level named functions need a nop for decompilation. */        noteIndex = js_NewSrcNote2(cx, cg, SRC_FUNCDEF, (ptrdiff_t)atomIndex);        if (noteIndex < 0 ||            js_Emit1(cx, cg, JSOP_NOP) < 0) {            return JS_FALSE;        }        /* Top-levels also need a prolog op to predefine their names. */        CG_SWITCH_TO_PROLOG(cg);        EMIT_ATOM_INDEX_OP(JSOP_DEFFUN, atomIndex);        CG_SWITCH_TO_MAIN(cg);        break;      }