⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jsdbgapi.c

📁 java script test programing source code
💻 C
📖 第 1 页 / 共 3 页
字号:
{    return script->lineno;}JS_PUBLIC_API(uintN)JS_GetScriptLineExtent(JSContext *cx, JSScript *script){    return js_GetScriptLineExtent(script);}JS_PUBLIC_API(JSVersion)JS_GetScriptVersion(JSContext *cx, JSScript *script){    return script->version & JSVERSION_MASK;}/***************************************************************************/JS_PUBLIC_API(void)JS_SetNewScriptHook(JSRuntime *rt, JSNewScriptHook hook, void *callerdata){    rt->newScriptHook = hook;    rt->newScriptHookData = callerdata;}JS_PUBLIC_API(void)JS_SetDestroyScriptHook(JSRuntime *rt, JSDestroyScriptHook hook,                        void *callerdata){    rt->destroyScriptHook = hook;    rt->destroyScriptHookData = callerdata;}/***************************************************************************/JS_PUBLIC_API(JSBool)JS_EvaluateUCInStackFrame(JSContext *cx, JSStackFrame *fp,                          const jschar *chars, uintN length,                          const char *filename, uintN lineno,                          jsval *rval){    JSObject *scobj;    uint32 flags, options;    JSScript *script;    JSBool ok;    scobj = JS_GetFrameScopeChain(cx, fp);    if (!scobj)        return JS_FALSE;    /*     * XXX Hack around ancient compiler API to propagate the JSFRAME_SPECIAL     * flags to the code generator (see js_EmitTree's TOK_SEMI case).     */    flags = fp->flags;    fp->flags |= JSFRAME_DEBUGGER | JSFRAME_EVAL;    options = cx->options;    cx->options = options | JSOPTION_COMPILE_N_GO;    script = JS_CompileUCScriptForPrincipals(cx, scobj,                                             JS_StackFramePrincipals(cx, fp),                                             chars, length, filename, lineno);    fp->flags = flags;    cx->options = options;    if (!script)        return JS_FALSE;    ok = js_Execute(cx, scobj, script, fp, JSFRAME_DEBUGGER | JSFRAME_EVAL,                    rval);    js_DestroyScript(cx, script);    return ok;}JS_PUBLIC_API(JSBool)JS_EvaluateInStackFrame(JSContext *cx, JSStackFrame *fp,                        const char *bytes, uintN length,                        const char *filename, uintN lineno,                        jsval *rval){    jschar *chars;    JSBool ok;    size_t len = length;    chars = js_InflateString(cx, bytes, &len);    if (!chars)        return JS_FALSE;    length = (uintN) len;    ok = JS_EvaluateUCInStackFrame(cx, fp, chars, length, filename, lineno,                                   rval);    JS_free(cx, chars);    return ok;}/************************************************************************//* XXXbe this all needs to be reworked to avoid requiring JSScope types. */JS_PUBLIC_API(JSScopeProperty *)JS_PropertyIterator(JSObject *obj, JSScopeProperty **iteratorp){    JSScopeProperty *sprop;    JSScope *scope;    sprop = *iteratorp;    scope = OBJ_SCOPE(obj);    /* XXXbe minor(?) incompatibility: iterate in reverse definition order */    if (!sprop) {        sprop = SCOPE_LAST_PROP(scope);    } else {        while ((sprop = sprop->parent) != NULL) {            if (!SCOPE_HAD_MIDDLE_DELETE(scope))                break;            if (SCOPE_HAS_PROPERTY(scope, sprop))                break;        }    }    *iteratorp = sprop;    return sprop;}JS_PUBLIC_API(JSBool)JS_GetPropertyDesc(JSContext *cx, JSObject *obj, JSScopeProperty *sprop,                   JSPropertyDesc *pd){    JSPropertyOp getter;    JSScope *scope;    JSScopeProperty *aprop;    jsval lastException;    JSBool wasThrowing;    pd->id = ID_TO_VALUE(sprop->id);    wasThrowing = cx->throwing;    if (wasThrowing) {        lastException = cx->exception;        if (JSVAL_IS_GCTHING(lastException) &&            !js_AddRoot(cx, &lastException, "lastException")) {                return JS_FALSE;        }        cx->throwing = JS_FALSE;    }    if (!js_GetProperty(cx, obj, sprop->id, &pd->value)) {        if (!cx->throwing) {            pd->flags = JSPD_ERROR;            pd->value = JSVAL_VOID;        } else {            pd->flags = JSPD_EXCEPTION;            pd->value = cx->exception;        }    } else {        pd->flags = 0;    }    cx->throwing = wasThrowing;    if (wasThrowing) {        cx->exception = lastException;        if (JSVAL_IS_GCTHING(lastException))            js_RemoveRoot(cx->runtime, &lastException);    }    getter = sprop->getter;    pd->flags |= ((sprop->attrs & JSPROP_ENUMERATE) ? JSPD_ENUMERATE : 0)              | ((sprop->attrs & JSPROP_READONLY)  ? JSPD_READONLY  : 0)              | ((sprop->attrs & JSPROP_PERMANENT) ? JSPD_PERMANENT : 0)              | ((getter == js_GetCallVariable)    ? JSPD_VARIABLE  : 0)              | ((getter == js_GetArgument)        ? JSPD_ARGUMENT  : 0)              | ((getter == js_GetLocalVariable)   ? JSPD_VARIABLE  : 0);    /* for Call Object 'real' getter isn't passed in to us */    if (OBJ_GET_CLASS(cx, obj) == &js_CallClass &&        getter == js_CallClass.getProperty) {        /*         * Property of a heavyweight function's variable object having the         * class-default getter.  It's either an argument if permanent, or a         * nested function if impermanent.  Local variables have a special         * getter (js_GetCallVariable, tested above) and setter, and not the         * class default.         */        pd->flags |= (sprop->attrs & JSPROP_PERMANENT)                     ? JSPD_ARGUMENT                     : JSPD_VARIABLE;    }    pd->spare = 0;    pd->slot = (pd->flags & (JSPD_ARGUMENT | JSPD_VARIABLE))               ? sprop->shortid               : 0;    pd->alias = JSVAL_VOID;    scope = OBJ_SCOPE(obj);    if (SPROP_HAS_VALID_SLOT(sprop, scope)) {        for (aprop = SCOPE_LAST_PROP(scope); aprop; aprop = aprop->parent) {            if (aprop != sprop && aprop->slot == sprop->slot) {                pd->alias = ID_TO_VALUE(aprop->id);                break;            }        }    }    return JS_TRUE;}JS_PUBLIC_API(JSBool)JS_GetPropertyDescArray(JSContext *cx, JSObject *obj, JSPropertyDescArray *pda){    JSClass *clasp;    JSScope *scope;    uint32 i, n;    JSPropertyDesc *pd;    JSScopeProperty *sprop;    clasp = OBJ_GET_CLASS(cx, obj);    if (!OBJ_IS_NATIVE(obj) || (clasp->flags & JSCLASS_NEW_ENUMERATE)) {        JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,                             JSMSG_CANT_DESCRIBE_PROPS, clasp->name);        return JS_FALSE;    }    if (!clasp->enumerate(cx, obj))        return JS_FALSE;    /* have no props, or object's scope has not mutated from that of proto */    scope = OBJ_SCOPE(obj);    if (scope->object != obj || scope->entryCount == 0) {        pda->length = 0;        pda->array = NULL;        return JS_TRUE;    }    n = scope->entryCount;    if (n > scope->map.nslots)        n = scope->map.nslots;    pd = (JSPropertyDesc *) JS_malloc(cx, (size_t)n * sizeof(JSPropertyDesc));    if (!pd)        return JS_FALSE;    i = 0;    for (sprop = SCOPE_LAST_PROP(scope); sprop; sprop = sprop->parent) {        if (SCOPE_HAD_MIDDLE_DELETE(scope) && !SCOPE_HAS_PROPERTY(scope, sprop))            continue;        if (!js_AddRoot(cx, &pd[i].id, NULL))            goto bad;        if (!js_AddRoot(cx, &pd[i].value, NULL))            goto bad;        if (!JS_GetPropertyDesc(cx, obj, sprop, &pd[i]))            goto bad;        if ((pd[i].flags & JSPD_ALIAS) && !js_AddRoot(cx, &pd[i].alias, NULL))            goto bad;        if (++i == n)            break;    }    pda->length = i;    pda->array = pd;    return JS_TRUE;bad:    pda->length = i + 1;    pda->array = pd;    JS_PutPropertyDescArray(cx, pda);    return JS_FALSE;}JS_PUBLIC_API(void)JS_PutPropertyDescArray(JSContext *cx, JSPropertyDescArray *pda){    JSPropertyDesc *pd;    uint32 i;    pd = pda->array;    for (i = 0; i < pda->length; i++) {        js_RemoveRoot(cx->runtime, &pd[i].id);        js_RemoveRoot(cx->runtime, &pd[i].value);        if (pd[i].flags & JSPD_ALIAS)            js_RemoveRoot(cx->runtime, &pd[i].alias);    }    JS_free(cx, pd);}/************************************************************************/JS_PUBLIC_API(JSBool)JS_SetDebuggerHandler(JSRuntime *rt, JSTrapHandler handler, void *closure){    rt->debuggerHandler = handler;    rt->debuggerHandlerData = closure;    return JS_TRUE;}JS_PUBLIC_API(JSBool)JS_SetSourceHandler(JSRuntime *rt, JSSourceHandler handler, void *closure){    rt->sourceHandler = handler;    rt->sourceHandlerData = closure;    return JS_TRUE;}JS_PUBLIC_API(JSBool)JS_SetExecuteHook(JSRuntime *rt, JSInterpreterHook hook, void *closure){    rt->executeHook = hook;    rt->executeHookData = closure;    return JS_TRUE;}JS_PUBLIC_API(JSBool)JS_SetCallHook(JSRuntime *rt, JSInterpreterHook hook, void *closure){    rt->callHook = hook;    rt->callHookData = closure;    return JS_TRUE;}JS_PUBLIC_API(JSBool)JS_SetObjectHook(JSRuntime *rt, JSObjectHook hook, void *closure){    rt->objectHook = hook;    rt->objectHookData = closure;    return JS_TRUE;}JS_PUBLIC_API(JSBool)JS_SetThrowHook(JSRuntime *rt, JSTrapHandler hook, void *closure){    rt->throwHook = hook;    rt->throwHookData = closure;    return JS_TRUE;}JS_PUBLIC_API(JSBool)JS_SetDebugErrorHook(JSRuntime *rt, JSDebugErrorHook hook, void *closure){    rt->debugErrorHook = hook;    rt->debugErrorHookData = closure;    return JS_TRUE;}/************************************************************************/JS_PUBLIC_API(size_t)JS_GetObjectTotalSize(JSContext *cx, JSObject *obj){    size_t nbytes;    JSScope *scope;    nbytes = sizeof *obj + obj->map->nslots * sizeof obj->slots[0];    if (OBJ_IS_NATIVE(obj)) {        scope = OBJ_SCOPE(obj);        if (scope->object == obj) {            nbytes += sizeof *scope;            nbytes += SCOPE_CAPACITY(scope) * sizeof(JSScopeProperty *);        }    }    return nbytes;}static size_tGetAtomTotalSize(JSContext *cx, JSAtom *atom){    size_t nbytes;    nbytes = sizeof *atom;    if (ATOM_IS_STRING(atom)) {        nbytes += sizeof(JSString);        nbytes += (ATOM_TO_STRING(atom)->length + 1) * sizeof(jschar);    } else if (ATOM_IS_DOUBLE(atom)) {        nbytes += sizeof(jsdouble);    } else if (ATOM_IS_OBJECT(atom)) {        nbytes += JS_GetObjectTotalSize(cx, ATOM_TO_OBJECT(atom));    }    return nbytes;}JS_PUBLIC_API(size_t)JS_GetFunctionTotalSize(JSContext *cx, JSFunction *fun){    size_t nbytes;    nbytes = sizeof *fun;    if (fun->object)        nbytes += JS_GetObjectTotalSize(cx, fun->object);    if (FUN_INTERPRETED(fun))        nbytes += JS_GetScriptTotalSize(cx, fun->u.i.script);    if (fun->atom)        nbytes += GetAtomTotalSize(cx, fun->atom);    return nbytes;}#include "jsemit.h"JS_PUBLIC_API(size_t)JS_GetScriptTotalSize(JSContext *cx, JSScript *script){    size_t nbytes, pbytes;    JSObject *obj;    jsatomid i;    jssrcnote *sn, *notes;    JSTryNote *tn, *tnotes;    JSPrincipals *principals;    nbytes = sizeof *script;    obj = script->object;    if (obj)        nbytes += JS_GetObjectTotalSize(cx, obj);    nbytes += script->length * sizeof script->code[0];    nbytes += script->atomMap.length * sizeof script->atomMap.vector[0];    for (i = 0; i < script->atomMap.length; i++)        nbytes += GetAtomTotalSize(cx, script->atomMap.vector[i]);    if (script->filename)        nbytes += strlen(script->filename) + 1;    notes = SCRIPT_NOTES(script);    for (sn = notes; !SN_IS_TERMINATOR(sn); sn = SN_NEXT(sn))        continue;    nbytes += (sn - notes + 1) * sizeof *sn;    tnotes = script->trynotes;    if (tnotes) {        for (tn = tnotes; tn->catchStart; tn++)            continue;        nbytes += (tn - tnotes + 1) * sizeof *tn;    }    principals = script->principals;    if (principals) {        JS_ASSERT(principals->refcount);        pbytes = sizeof *principals;        if (principals->refcount > 1)            pbytes = JS_HOWMANY(pbytes, principals->refcount);        nbytes += pbytes;    }    return nbytes;}JS_PUBLIC_API(uint32)JS_GetTopScriptFilenameFlags(JSContext *cx, JSStackFrame *fp){    if (!fp)        fp = cx->fp;    while (fp) {        if (fp->script) {            return JS_GetScriptFilenameFlags(fp->script);        }        fp = fp->down;    }    return 0; }JS_PUBLIC_API(uint32)JS_GetScriptFilenameFlags(JSScript *script){    JS_ASSERT(script);    if (!script->filename)        return JSFILENAME_NULL;    return js_GetScriptFilenameFlags(script->filename);}JS_PUBLIC_API(JSBool)JS_FlagScriptFilenamePrefix(JSRuntime *rt, const char *prefix, uint32 flags){    if (!js_SaveScriptFilenameRT(rt, prefix, flags))        return JS_FALSE;    return JS_TRUE;}JS_PUBLIC_API(JSBool)JS_IsSystemObject(JSContext *cx, JSObject *obj){    return (*js_GetGCThingFlags(obj) & GCF_SYSTEM) != 0;}JS_PUBLIC_API(void)JS_FlagSystemObject(JSContext *cx, JSObject *obj){    uint8 *flagp;    flagp = js_GetGCThingFlags(obj);    *flagp |= GCF_SYSTEM;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -