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

📄 js.c

📁 java script test programing source code
💻 C
📖 第 1 页 / 共 5 页
字号:
    static char hex[] = "0123456789abcdef";    jschar u;    unsigned char b, c;    int i, j;    if (!w)        return "";    for (i = j = 0; i < sizeof enuf - 1; i++, j++) {        u = w[j];        if (u == 0)            break;        b = (unsigned char)(u >> 8);        c = (unsigned char)(u);        if (b) {            if (i >= sizeof enuf - 6)                break;            enuf[i++] = '\\';            enuf[i++] = 'u';            enuf[i++] = hex[b >> 4];            enuf[i++] = hex[b & 15];            enuf[i++] = hex[c >> 4];            enuf[i] = hex[c & 15];        } else if (!isprint(c)) {            if (i >= sizeof enuf - 4)                break;            enuf[i++] = '\\';            enuf[i++] = 'x';            enuf[i++] = hex[c >> 4];            enuf[i] = hex[c & 15];        } else {            enuf[i] = (char)c;        }    }    enuf[i] = 0;    return enuf;}#include <stdarg.h>static JSBoolZZ_formatter(JSContext *cx, const char *format, JSBool fromJS, jsval **vpp,             va_list *app){    jsval *vp;    va_list ap;    jsdouble re, im;    printf("entering ZZ_formatter");    vp = *vpp;    ap = *app;    if (fromJS) {        if (!JS_ValueToNumber(cx, vp[0], &re))            return JS_FALSE;        if (!JS_ValueToNumber(cx, vp[1], &im))            return JS_FALSE;        *va_arg(ap, jsdouble *) = re;        *va_arg(ap, jsdouble *) = im;    } else {        re = va_arg(ap, jsdouble);        im = va_arg(ap, jsdouble);        if (!JS_NewNumberValue(cx, re, &vp[0]))            return JS_FALSE;        if (!JS_NewNumberValue(cx, im, &vp[1]))            return JS_FALSE;    }    *vpp = vp + 2;    *app = ap;    printf("leaving ZZ_formatter");    return JS_TRUE;}static JSBoolConvertArgs(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    JSBool b = JS_FALSE;    jschar c = 0;    int32 i = 0, j = 0;    uint32 u = 0;    jsdouble d = 0, I = 0, re = 0, im = 0;    char *s = NULL;    JSString *str = NULL;    jschar *w = NULL;    JSObject *obj2 = NULL;    JSFunction *fun = NULL;    jsval v = JSVAL_VOID;    JSBool ok;    if (!JS_AddArgumentFormatter(cx, "ZZ", ZZ_formatter))        return JS_FALSE;;    ok = JS_ConvertArguments(cx, argc, argv, "b/ciujdIsSWofvZZ*",                             &b, &c, &i, &u, &j, &d, &I, &s, &str, &w, &obj2,                             &fun, &v, &re, &im);    JS_RemoveArgumentFormatter(cx, "ZZ");    if (!ok)        return JS_FALSE;    fprintf(gOutFile,            "b %u, c %x (%c), i %ld, u %lu, j %ld\n",            b, c, (char)c, i, u, j);    fprintf(gOutFile,            "d %g, I %g, s %s, S %s, W %s, obj %s, fun %s\n"            "v %s, re %g, im %g\n",            d, I, s, str ? JS_GetStringBytes(str) : "", EscapeWideString(w),            JS_GetStringBytes(JS_ValueToString(cx, OBJECT_TO_JSVAL(obj2))),            fun ? JS_GetStringBytes(JS_DecompileFunction(cx, fun, 4)) : "",            JS_GetStringBytes(JS_ValueToString(cx, v)), re, im);    return JS_TRUE;}#endifstatic JSBoolBuildDate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    char version[20] = "\n";#if JS_VERSION < 150    sprintf(version, " for version %d\n", JS_VERSION);#endif    fprintf(gOutFile, "built on %s at %s%s", __DATE__, __TIME__, version);    return JS_TRUE;}static JSBoolClear(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    if (argc != 0 && !JS_ValueToObject(cx, argv[0], &obj))        return JS_FALSE;    JS_ClearScope(cx, obj);    return JS_TRUE;}static JSBoolIntern(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    JSString *str;    str = JS_ValueToString(cx, argv[0]);    if (!str)        return JS_FALSE;    if (!JS_InternUCStringN(cx, JS_GetStringChars(str),                                JS_GetStringLength(str))) {        return JS_FALSE;    }    return JS_TRUE;}static JSBoolClone(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    JSFunction *fun;    JSObject *funobj, *parent, *clone;    fun = JS_ValueToFunction(cx, argv[0]);    if (!fun)        return JS_FALSE;    funobj = JS_GetFunctionObject(fun);    if (argc > 1) {        if (!JS_ValueToObject(cx, argv[1], &parent))            return JS_FALSE;    } else {        parent = JS_GetParent(cx, funobj);    }    clone = JS_CloneFunctionObject(cx, funobj, parent);    if (!clone)        return JS_FALSE;    *rval = OBJECT_TO_JSVAL(clone);    return JS_TRUE;}static JSBoolSeal(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    JSObject *target;    JSBool deep = JS_FALSE;    if (!JS_ConvertArguments(cx, argc, argv, "o/b", &target, &deep))        return JS_FALSE;    if (!target)        return JS_TRUE;    return JS_SealObject(cx, target, deep);}static JSBoolGetPDA(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    JSObject *vobj, *aobj, *pdobj;    JSBool ok;    JSPropertyDescArray pda;    JSPropertyDesc *pd;    uint32 i;    jsval v;    if (!JS_ValueToObject(cx, argv[0], &vobj))        return JS_FALSE;    if (!vobj)        return JS_TRUE;    aobj = JS_NewArrayObject(cx, 0, NULL);    if (!aobj)        return JS_FALSE;    *rval = OBJECT_TO_JSVAL(aobj);    ok = JS_GetPropertyDescArray(cx, vobj, &pda);    if (!ok)        return JS_FALSE;    pd = pda.array;    for (i = 0; i < pda.length; i++) {        pdobj = JS_NewObject(cx, NULL, NULL, NULL);        if (!pdobj) {            ok = JS_FALSE;            break;        }        ok = JS_SetProperty(cx, pdobj, "id", &pd->id) &&             JS_SetProperty(cx, pdobj, "value", &pd->value) &&             (v = INT_TO_JSVAL(pd->flags),              JS_SetProperty(cx, pdobj, "flags", &v)) &&             (v = INT_TO_JSVAL(pd->slot),              JS_SetProperty(cx, pdobj, "slot", &v)) &&             JS_SetProperty(cx, pdobj, "alias", &pd->alias);        if (!ok)            break;        v = OBJECT_TO_JSVAL(pdobj);        ok = JS_SetElement(cx, aobj, i, &v);        if (!ok)            break;    }    JS_PutPropertyDescArray(cx, &pda);    return ok;}static JSBoolGetSLX(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    JSScript *script;    script = ValueToScript(cx, argv[0]);    if (!script)        return JS_FALSE;    *rval = INT_TO_JSVAL(js_GetScriptLineExtent(script));    return JS_TRUE;}static JSBoolToInt32(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    int32 i;    if (!JS_ValueToInt32(cx, argv[0], &i))        return JS_FALSE;    return JS_NewNumberValue(cx, i, rval);}static JSBoolStringsAreUtf8(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,               jsval *rval){    *rval = JS_CStringsAreUTF8() ? JSVAL_TRUE : JSVAL_FALSE;    return JS_TRUE;}static const char* badUtf8 = "...\xC0...";static const char* bigUtf8 = "...\xFB\xBF\xBF\xBF\xBF...";static const jschar badSurrogate[] = { 'A', 'B', 'C', 0xDEEE, 'D', 'E', 0 };static JSBoolTestUtf8(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    intN mode = 1;    jschar chars[20];    size_t charsLength = 5;    char bytes[20];    size_t bytesLength = 20;    if (argc && !JS_ValueToInt32(cx, *argv, &mode))        return JS_FALSE;    /* The following throw errors if compiled with UTF-8. */    switch (mode) {      /* mode 1: malformed UTF-8 string. */      case 1:        JS_NewStringCopyZ(cx, badUtf8);        break;      /* mode 2: big UTF-8 character. */      case 2:        JS_NewStringCopyZ(cx, bigUtf8);        break;      /* mode 3: bad surrogate character. */      case 3:        JS_EncodeCharacters(cx, badSurrogate, 6, bytes, &bytesLength);        break;      /* mode 4: use a too small buffer. */      case 4:        JS_DecodeBytes(cx, "1234567890", 10, chars, &charsLength);        break;      default:        JS_ReportError(cx, "invalid mode parameter");        return JS_FALSE;    }    return !JS_IsExceptionPending (cx);}static JSBoolThrowError(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    JS_ReportError(cx, "This is an error");    return JS_FALSE;}#define LAZY_STANDARD_CLASSES/* A class for easily testing the inner/outer object callbacks. */typedef struct ComplexObject {    JSBool isInner;    JSObject *inner;    JSObject *outer;} ComplexObject;static JSObject *split_create_outer(JSContext *cx);static JSObject *split_create_inner(JSContext *cx, JSObject *outer);static ComplexObject *split_get_private(JSContext *cx, JSObject *obj);JS_STATIC_DLL_CALLBACK(JSBool)split_addProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){    ComplexObject *cpx;    jsid asId;    cpx = split_get_private(cx, obj);    if (!cpx)        return JS_TRUE;    if (!cpx->isInner && cpx->inner) {        /* Make sure to define this property on the inner object. */        if (!JS_ValueToId(cx, *vp, &asId))            return JS_FALSE;        return OBJ_DEFINE_PROPERTY(cx, cpx->inner, asId, *vp, NULL, NULL,                                   JSPROP_ENUMERATE, NULL);    }    return JS_TRUE;}JS_STATIC_DLL_CALLBACK(JSBool)split_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){    ComplexObject *cpx;    cpx = split_get_private(cx, obj);    if (!cpx)        return JS_TRUE;    if (!cpx->isInner && cpx->inner) {        if (JSVAL_IS_STRING(id)) {            JSString *str;            str = JSVAL_TO_STRING(id);            return JS_GetUCProperty(cx, cpx->inner, JS_GetStringChars(str),                                    JS_GetStringLength(str), vp);        }        if (JSVAL_IS_INT(id))            return JS_GetElement(cx, cpx->inner, JSVAL_TO_INT(id), vp);        return JS_TRUE;    }    return JS_TRUE;}JS_STATIC_DLL_CALLBACK(JSBool)split_setProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){    ComplexObject *cpx;    cpx = split_get_private(cx, obj);    if (!cpx)        return JS_TRUE;    if (!cpx->isInner && cpx->inner) {        if (JSVAL_IS_STRING(id)) {            JSString *str;            str = JSVAL_TO_STRING(id);            return JS_SetUCProperty(cx, cpx->inner, JS_GetStringChars(str),                                    JS_GetStringLength(str), vp);        }        if (JSVAL_IS_INT(id))            return JS_SetElement(cx, cpx->inner, JSVAL_TO_INT(id), vp);        return JS_TRUE;    }    return JS_TRUE;}JS_STATIC_DLL_CALLBACK(JSBool)split_delProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){    ComplexObject *cpx;    jsid asId;    cpx = split_get_private(cx, obj);    if (!cpx)        return JS_TRUE;    if (!cpx->isInner && cpx->inner) {        /* Make sure to define this property on the inner object. */        if (!JS_ValueToId(cx, *vp, &asId))            return JS_FALSE;        return OBJ_DELETE_PROPERTY(cx, cpx->inner, asId, vp);    }    return JS_TRUE;}JS_STATIC_DLL_CALLBACK(JSBool)split_enumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op,                  jsval *statep, jsid *idp){    ComplexObject *cpx;    JSObject *iterator;    switch (enum_op) {      case JSENUMERATE_INIT:        cpx = JS_GetPrivate(cx, obj);        if (!cpx->isInner && cpx->inner)            obj = cpx->inner;        iterator = JS_NewPropertyIterator(cx, obj);        if (!iterator)            return JS_FALSE;        *statep = OBJECT_TO_JSVAL(iterator);        if (idp)            *idp = JSVAL_ZERO;        break;      case JSENUMERATE_NEXT:        iterator = (JSObject*)JSVAL_TO_OBJECT(*statep);        if (!JS_NextProperty(cx, iterator, idp))            return JS_FALSE;        if (*idp != JSVAL_VOID)            break;        /* Fall through. */      case JSENUMERATE_DESTROY:        /* Let GC at our iterator object. */        *statep = JSVAL_NULL;        break;    }    return JS_TRUE;}JS_STATIC_DLL_CALLBACK(JSBool)split_resolve(JSContext *cx, JSObject *obj, jsval id, uintN flags,                JSObject **objp){    ComplexObject *cpx;    cpx = split_get_private(cx, obj);    if (!cpx)        return JS_TRUE;    if (!cpx->isInner && cpx->inner) {        jsid asId;        JSProperty *prop;        if (!JS_ValueToId(cx, id, &asId))            return JS_FALSE;        if (!OBJ_LOOKUP_PROPERTY(cx, cpx->inner, asId, objp, &prop))            return JS_FALSE;        if (prop)

⌨️ 快捷键说明

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