if (!cx->fp) return JS_FALSE;
Detecting(JSContext *cx, jsbytecode *pc){    JSScript *script;    jsbytecode *endpc;    JSOp op;    JSAtom *atom;    script = cx->fp->script;    for (endpc = script->code + script->length; pc < endpc; pc++) {        /* General case: a branch or equality op follows the access. */        op = (JSOp) *pc;        if (js_CodeSpec[op].format & JOF_DETECTING)            return JS_TRUE;        /*         * Special case #1: handle (document.all == null).  Don't sweat about         * JS1.2's revision of the equality operators here.         */        if (op == JSOP_NULL) {            if (++pc < endpc)                return *pc == JSOP_EQ || *pc == JSOP_NE;            break;        }        /*         * Special case #2: handle (document.all == undefined).  Don't worry         * about someone redefining undefined, which was added by Edition 3,         * so was read/write for backward compatibility.         */        if (op == JSOP_NAME) {            atom = GET_ATOM(cx, script, pc);            if (atom == cx->runtime->atomState.typeAtoms[JSTYPE_VOID] &&                (pc += js_CodeSpec[op].length) < endpc) {                op = (JSOp) *pc;                return op == JSOP_EQ || op == JSOP_NE ||                       op == JSOP_NEW_EQ || op == JSOP_NEW_NE;            }            break;        }        /* At this point, anything but grouping means we're not detecting. */        if (op != JSOP_GROUP)            break;    }    return JS_FALSE;}