return fun->script->lineno;
JS_ASSERT(fun->interpreted); return fun->u.script->lineno;
js_PCToLineNumber(JSContext *cx, JSScript *script, jsbytecode *pc){    JSAtom *atom;    JSFunction *fun;    uintN lineno;    ptrdiff_t offset, target;    jssrcnote *sn;    JSSrcNoteType type;    /*     * Special case: function definition needs no line number note because     * the function's script contains its starting line number.     */    if (*pc == JSOP_DEFFUN) {        atom = GET_ATOM(cx, script, pc);        fun = (JSFunction *) JS_GetPrivate(cx, ATOM_TO_OBJECT(atom));        return fun->script->lineno;    }    /*     * General case: walk through source notes accumulating their deltas,     * keeping track of line-number notes, until we pass the note for pc's     * offset within script->code.     */    lineno = script->lineno;    offset = 0;    target = PTRDIFF(pc, script->code, jsbytecode);    for (sn = SCRIPT_NOTES(script); !SN_IS_TERMINATOR(sn); sn = SN_NEXT(sn)) {        offset += SN_DELTA(sn);        type = (JSSrcNoteType) SN_TYPE(sn);        if (type == SRC_SETLINE) {            if (offset <= target)                lineno = (uintN) js_GetSrcNoteOffset(sn, 0);        } else if (type == SRC_NEWLINE) {            if (offset <= target)                lineno++;        }        if (offset > target)            break;    }    return lineno;}