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

📄 jsapi.c

📁 java script test programing source code
💻 C
📖 第 1 页 / 共 5 页
字号:
    {js_InitObjectClass,        EAGER_ATOM(count), NULL},#if JS_HAS_TOSOURCE    {js_InitObjectClass,        EAGER_ATOM(toSource), NULL},#endif    {js_InitObjectClass,        EAGER_ATOM(toString), NULL},    {js_InitObjectClass,        EAGER_ATOM(toLocaleString), NULL},    {js_InitObjectClass,        EAGER_ATOM(valueOf), NULL},#if JS_HAS_OBJ_WATCHPOINT    {js_InitObjectClass,        LAZY_ATOM(watch), NULL},    {js_InitObjectClass,        LAZY_ATOM(unwatch), NULL},#endif    {js_InitObjectClass,        LAZY_ATOM(hasOwnProperty), NULL},    {js_InitObjectClass,        LAZY_ATOM(isPrototypeOf), NULL},    {js_InitObjectClass,        LAZY_ATOM(propertyIsEnumerable), NULL},#if JS_HAS_GETTER_SETTER    {js_InitObjectClass,        LAZY_ATOM(defineGetter), NULL},    {js_InitObjectClass,        LAZY_ATOM(defineSetter), NULL},    {js_InitObjectClass,        LAZY_ATOM(lookupGetter), NULL},    {js_InitObjectClass,        LAZY_ATOM(lookupSetter), NULL},#endif    {NULL,                      0, NULL, NULL}};JS_PUBLIC_API(JSBool)JS_ResolveStandardClass(JSContext *cx, JSObject *obj, jsval id,                        JSBool *resolved){    JSString *idstr;    JSRuntime *rt;    JSAtom *atom;    JSStdName *stdnm;    uintN i;    CHECK_REQUEST(cx);    *resolved = JS_FALSE;    if (!JSVAL_IS_STRING(id))        return JS_TRUE;    idstr = JSVAL_TO_STRING(id);    rt = cx->runtime;    /* Check whether we're resolving 'undefined', and define it if so. */    atom = rt->atomState.typeAtoms[JSTYPE_VOID];    if (idstr == ATOM_TO_STRING(atom)) {        *resolved = JS_TRUE;        return OBJ_DEFINE_PROPERTY(cx, obj, ATOM_TO_JSID(atom), JSVAL_VOID,                                   NULL, NULL, JSPROP_PERMANENT, NULL);    }    /* Try for class constructors/prototypes named by well-known atoms. */    stdnm = NULL;    for (i = 0; standard_class_atoms[i].init; i++) {        atom = OFFSET_TO_ATOM(rt, standard_class_atoms[i].atomOffset);        if (idstr == ATOM_TO_STRING(atom)) {            stdnm = &standard_class_atoms[i];            break;        }    }    if (!stdnm) {        /* Try less frequently used top-level functions and constants. */        for (i = 0; standard_class_names[i].init; i++) {            atom = StdNameToAtom(cx, &standard_class_names[i]);            if (!atom)                return JS_FALSE;            if (idstr == ATOM_TO_STRING(atom)) {                stdnm = &standard_class_names[i];                break;            }        }        if (!stdnm && !OBJ_GET_PROTO(cx, obj)) {            /*             * Try even less frequently used names delegated from the global             * object to Object.prototype, but only if the Object class hasn't             * yet been initialized.             */            for (i = 0; object_prototype_names[i].init; i++) {                atom = StdNameToAtom(cx, &object_prototype_names[i]);                if (!atom)                    return JS_FALSE;                if (idstr == ATOM_TO_STRING(atom)) {                    stdnm = &standard_class_names[i];                    break;                }            }        }    }    if (stdnm) {        /*         * If this standard class is anonymous and obj advertises itself as a         * global object (in order to reserve slots for standard class object         * pointers), then we don't want to resolve by name.         *         * If inversely, either id does not name a class, or id does not name         * an anonymous class, or the global does not reserve slots for class         * objects, then we must call the init hook here.         */        if (stdnm->clasp &&            (stdnm->clasp->flags & JSCLASS_IS_ANONYMOUS) &&            (OBJ_GET_CLASS(cx, obj)->flags & JSCLASS_IS_GLOBAL)) {            return JS_TRUE;        }        if (!stdnm->init(cx, obj))            return JS_FALSE;        *resolved = JS_TRUE;    }    return JS_TRUE;}static JSBoolAlreadyHasOwnProperty(JSContext *cx, JSObject *obj, JSAtom *atom){    JSScopeProperty *sprop;    JSScope *scope;    JS_ASSERT(OBJ_IS_NATIVE(obj));    JS_LOCK_OBJ(cx, obj);    scope = OBJ_SCOPE(obj);    sprop = SCOPE_GET_PROPERTY(scope, ATOM_TO_JSID(atom));    JS_UNLOCK_SCOPE(cx, scope);    return sprop != NULL;}JS_PUBLIC_API(JSBool)JS_EnumerateStandardClasses(JSContext *cx, JSObject *obj){    JSRuntime *rt;    JSAtom *atom;    uintN i;    CHECK_REQUEST(cx);    rt = cx->runtime;    /* Check whether we need to bind 'undefined' and define it if so. */    atom = rt->atomState.typeAtoms[JSTYPE_VOID];    if (!AlreadyHasOwnProperty(cx, obj, atom) &&        !OBJ_DEFINE_PROPERTY(cx, obj, ATOM_TO_JSID(atom), JSVAL_VOID,                             NULL, NULL, JSPROP_PERMANENT, NULL)) {        return JS_FALSE;    }    /* Initialize any classes that have not been resolved yet. */    for (i = 0; standard_class_atoms[i].init; i++) {        atom = OFFSET_TO_ATOM(rt, standard_class_atoms[i].atomOffset);        if (!AlreadyHasOwnProperty(cx, obj, atom) &&            !standard_class_atoms[i].init(cx, obj)) {            return JS_FALSE;        }    }    return JS_TRUE;}static JSIdArray *AddAtomToArray(JSContext *cx, JSAtom *atom, JSIdArray *ida, jsint *ip){    jsint i, length;    i = *ip;    length = ida->length;    if (i >= length) {        ida = js_SetIdArrayLength(cx, ida, JS_MAX(length * 2, 8));        if (!ida)            return NULL;        JS_ASSERT(i < ida->length);    }    ida->vector[i] = ATOM_TO_JSID(atom);    *ip = i + 1;    return ida;}static JSIdArray *EnumerateIfResolved(JSContext *cx, JSObject *obj, JSAtom *atom, JSIdArray *ida,                    jsint *ip, JSBool *foundp){    *foundp = AlreadyHasOwnProperty(cx, obj, atom);    if (*foundp)        ida = AddAtomToArray(cx, atom, ida, ip);    return ida;}JS_PUBLIC_API(JSIdArray *)JS_EnumerateResolvedStandardClasses(JSContext *cx, JSObject *obj,                                    JSIdArray *ida){    JSRuntime *rt;    jsint i, j, k;    JSAtom *atom;    JSBool found;    JSObjectOp init;    CHECK_REQUEST(cx);    rt = cx->runtime;    if (ida) {        i = ida->length;    } else {        ida = js_NewIdArray(cx, 8);        if (!ida)            return NULL;        i = 0;    }    /* Check whether 'undefined' has been resolved and enumerate it if so. */    atom = rt->atomState.typeAtoms[JSTYPE_VOID];    ida = EnumerateIfResolved(cx, obj, atom, ida, &i, &found);    if (!ida)        return NULL;    /* Enumerate only classes that *have* been resolved. */    for (j = 0; standard_class_atoms[j].init; j++) {        atom = OFFSET_TO_ATOM(rt, standard_class_atoms[j].atomOffset);        ida = EnumerateIfResolved(cx, obj, atom, ida, &i, &found);        if (!ida)            return NULL;        if (found) {            init = standard_class_atoms[j].init;            for (k = 0; standard_class_names[k].init; k++) {                if (standard_class_names[k].init == init) {                    atom = StdNameToAtom(cx, &standard_class_names[k]);                    ida = AddAtomToArray(cx, atom, ida, &i);                    if (!ida)                        return NULL;                }            }            if (init == js_InitObjectClass) {                for (k = 0; object_prototype_names[k].init; k++) {                    atom = StdNameToAtom(cx, &object_prototype_names[k]);                    ida = AddAtomToArray(cx, atom, ida, &i);                    if (!ida)                        return NULL;                }            }        }    }    /* Trim to exact length via js_SetIdArrayLength. */    return js_SetIdArrayLength(cx, ida, i);}#undef ATOM_OFFSET#undef CLASS_ATOM_OFFSET#undef OFFSET_TO_ATOM#undef CLASP#undef EAGER_ATOM#undef EAGER_CLASS_ATOM#undef EAGER_ATOM_CLASP#undef LAZY_ATOMJS_PUBLIC_API(JSBool)JS_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key,                  JSObject **objp){    CHECK_REQUEST(cx);    return js_GetClassObject(cx, obj, key, objp);}JS_PUBLIC_API(JSObject *)JS_GetScopeChain(JSContext *cx){    JSStackFrame *fp;    fp = cx->fp;    if (!fp) {        JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_INACTIVE);        return NULL;    }    return js_GetScopeChain(cx, fp);}JS_PUBLIC_API(void *)JS_malloc(JSContext *cx, size_t nbytes){    void *p;    JS_ASSERT(nbytes != 0);    if (nbytes == 0)        nbytes = 1;    p = malloc(nbytes);    if (!p) {        JS_ReportOutOfMemory(cx);        return NULL;    }    js_UpdateMallocCounter(cx, nbytes);    return p;}JS_PUBLIC_API(void *)JS_realloc(JSContext *cx, void *p, size_t nbytes){    p = realloc(p, nbytes);    if (!p)        JS_ReportOutOfMemory(cx);    return p;}JS_PUBLIC_API(void)JS_free(JSContext *cx, void *p){    if (p)        free(p);}JS_PUBLIC_API(char *)JS_strdup(JSContext *cx, const char *s){    size_t n;    void *p;    n = strlen(s) + 1;    p = JS_malloc(cx, n);    if (!p)        return NULL;    return (char *)memcpy(p, s, n);}JS_PUBLIC_API(jsdouble *)JS_NewDouble(JSContext *cx, jsdouble d){    CHECK_REQUEST(cx);    return js_NewDouble(cx, d, 0);}JS_PUBLIC_API(JSBool)JS_NewDoubleValue(JSContext *cx, jsdouble d, jsval *rval){    CHECK_REQUEST(cx);    return js_NewDoubleValue(cx, d, rval);}JS_PUBLIC_API(JSBool)JS_NewNumberValue(JSContext *cx, jsdouble d, jsval *rval){    CHECK_REQUEST(cx);    return js_NewNumberValue(cx, d, rval);}#undef JS_AddRootJS_PUBLIC_API(JSBool)JS_AddRoot(JSContext *cx, void *rp){    CHECK_REQUEST(cx);    return js_AddRoot(cx, rp, NULL);}JS_PUBLIC_API(JSBool)JS_AddNamedRootRT(JSRuntime *rt, void *rp, const char *name){    return js_AddRootRT(rt, rp, name);}JS_PUBLIC_API(JSBool)JS_RemoveRoot(JSContext *cx, void *rp){    CHECK_REQUEST(cx);    return js_RemoveRoot(cx->runtime, rp);}JS_PUBLIC_API(JSBool)JS_RemoveRootRT(JSRuntime *rt, void *rp){    return js_RemoveRoot(rt, rp);}JS_PUBLIC_API(JSBool)JS_AddNamedRoot(JSContext *cx, void *rp, const char *name){    CHECK_REQUEST(cx);    return js_AddRoot(cx, rp, name);}JS_PUBLIC_API(void)JS_ClearNewbornRoots(JSContext *cx){    JS_CLEAR_WEAK_ROOTS(&cx->weakRoots);}JS_PUBLIC_API(JSBool)JS_EnterLocalRootScope(JSContext *cx){    CHECK_REQUEST(cx);    return js_EnterLocalRootScope(cx);}JS_PUBLIC_API(void)JS_LeaveLocalRootScope(JSContext *cx){    CHECK_REQUEST(cx);    js_LeaveLocalRootScope(cx);}JS_PUBLIC_API(void)JS_LeaveLocalRootScopeWithResult(JSContext *cx, jsval rval){    CHECK_REQUEST(cx);    js_LeaveLocalRootScopeWithResult(cx, rval);}JS_PUBLIC_API(void)JS_ForgetLocalRoot(JSContext *cx, void *thing){    CHECK_REQUEST(cx);    js_ForgetLocalRoot(cx, (jsval) thing);}#ifdef DEBUGJS_PUBLIC_API(void)JS_DumpNamedRoots(JSRuntime *rt,                  void (*dump)(const char *name, void *rp, void *data),                  void *data){    js_DumpNamedRoots(rt, dump, data);}#endif /* DEBUG */JS_PUBLIC_API(uint32)JS_MapGCRoots(JSRuntime *rt, JSGCRootMapFun map, void *data){    return js_MapGCRoots(rt, map, data);}JS_PUBLIC_API(JSBool)JS_LockGCThing(JSContext *cx, void *thing){    JSBool ok;    CHECK_REQUEST(cx);    ok = js_LockGCThing(cx, thing);    if (!ok)        JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_CANT_LOCK);    return ok;}JS_PUBLIC_API(JSBool)JS_LockGCThingRT(JSRuntime *rt, void *thing){    return js_LockGCThingRT(rt, thing);}JS_PUBLIC_API(JSBool)JS_UnlockGCThing(JSContext *cx, void *thing){    JSBool ok;    CHECK_REQUEST(cx);    ok = js_UnlockGCThingRT(cx->runtime, thing);    if (!ok)        JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_CANT_UNLOCK);    return ok;

⌨️ 快捷键说明

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