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

📄 jsj_javapackage.c

📁 caffeine-monkey java实现的js模拟引擎
💻 C
📖 第 1 页 / 共 2 页
字号:
    switch (type) {    /* Pretty-printing of JavaPackage */    case JSTYPE_VOID:   /* Default value */    case JSTYPE_NUMBER:    case JSTYPE_STRING:        /* Convert '/' to '.' so that it looks like Java language syntax. */        if (!package->path)            break;        name = JS_smprintf("[JavaPackage %s]", package->path);        if (!name) {            JS_ReportOutOfMemory(cx);            return JS_FALSE;        }        for (cp = name; *cp != '\0'; cp++)            if (*cp == '/')                *cp = '.';        str = JS_NewString(cx, name, strlen(name));        if (!str) {            free(name);            /* It's not necessary to call JS_ReportOutOfMemory(), as               JS_NewString() will do so on failure. */            return JS_FALSE;        }        *vp = STRING_TO_JSVAL(str);        break;    case JSTYPE_OBJECT:        *vp = OBJECT_TO_JSVAL(obj);        break;    default:        break;    }    return JS_TRUE;}/* * Free the private native data associated with the JavaPackage object. */JS_STATIC_DLL_CALLBACK(void)JavaPackage_finalize(JSContext *cx, JSObject *obj){    JavaPackage_Private *package = JS_GetPrivate(cx, obj);    if (!package)        return;    if (package->path)        JS_free(cx, (char *)package->path);    JS_free(cx, package);}/* * The definition of the JavaPackage class */JSClass JavaPackage_class = {    "JavaPackage", JSCLASS_HAS_PRIVATE,    JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JavaPackage_setProperty,    JS_EnumerateStub, JavaPackage_resolve,    JavaPackage_convert, JavaPackage_finalize,    /* Optionally non-null members start here. */    NULL,                       /* getObjectOps */    NULL,                       /* checkAccess */    NULL,                       /* call */    NULL,                       /* construct */    NULL,                       /* xdrObject */    NULL,                       /* hasInstance */    NULL,                       /* mark */    0,                          /* spare */};JavaPackageDefstandard_java_packages[] = {    {"java",                NULL,   PKG_USER,   0},    {"java.applet",         NULL,   PKG_USER,   JSPROP_READONLY},    {"java.awt",            NULL,   PKG_USER,   JSPROP_READONLY},    {"java.awt.datatransfer",                                                   NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"java.awt.event",      NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"java.awt.image",      NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"java.awt.peer",       NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"java.beans",          NULL,   PKG_USER,   JSPROP_READONLY},    {"java.io",             NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"java.lang",           NULL,   PKG_USER,   JSPROP_READONLY},    {"java.lang.reflect",   NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"java.math",           NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"java.net",            NULL,   PKG_USER,   JSPROP_READONLY},    {"java.rmi",            NULL,   PKG_USER,   JSPROP_READONLY},    {"java.rmi.dgc",        NULL,   PKG_USER,   JSPROP_READONLY},    {"java.rmi.user",       NULL,   PKG_USER,   JSPROP_READONLY},    {"java.rmi.registry",   NULL,   PKG_USER,   JSPROP_READONLY},    {"java.rmi.server",     NULL,   PKG_USER,   JSPROP_READONLY},    {"java.security",       NULL,   PKG_USER,   JSPROP_READONLY},    {"java.security.acl",   NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"java.security.interfaces",                            NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"java.sql",            NULL,   PKG_USER,   JSPROP_READONLY},    {"java.text",           NULL,   PKG_USER,   JSPROP_READONLY},    {"java.text.resources", NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"java.util",           NULL,   PKG_USER,   JSPROP_READONLY},    {"java.util.zip",       NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape",            NULL,   PKG_USER,   0},    {"netscape.applet",     NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape.application",NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape.debug",      NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape.javascript", NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape.ldap",       NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape.misc",       NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape.net",        NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape.plugin",     NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape.util",       NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape.secfile",    NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape.security",   NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"netscape.WAI",        NULL,   PKG_SYSTEM, JSPROP_READONLY},    {"sun",                 NULL,   PKG_USER,   0},    {"Packages",            "",     PKG_USER,   JSPROP_READONLY},    {NULL,                  NULL,   0,          0}};/* * On systems which provide strtok_r we'll use that function to avoid * problems with non-thread-safety. */#if HAVE_STRTOK_R# define STRTOK_1ST(str, seps, res) strtok_r (str, seps, &res)# define STRTOK_OTHER(seps, res) strtok_r (res, seps, &res)#else# define STRTOK_1ST(str, seps, res) strtok (str, seps)# define STRTOK_OTHER(seps, res) strtok (NULL, seps)#endif/* * Pre-define a hierarchy of JavaPackage objects. * Pre-defining a Java package at initialization time is not necessary, but * it will make package lookup faster and, more importantly, will avoid * unnecessary network accesses if classes are being loaded over the network. */static JSBoolpre_define_java_packages(JSContext *cx, JSObject *global_obj,                         JavaPackageDef *predefined_packages){    JSBool package_exists;    JSObject *parent_obj;    JavaPackageDef *package_def;    char *simple_name, *cp, *package_name, *path;    int flags;    if (!predefined_packages)        return JS_TRUE;    /* Iterate over all pre-defined Java packages */    for (package_def = predefined_packages; package_def->name; package_def++) {#if HAVE_STRTOK_R	char *nextstr;#endif        package_name = path = NULL;        parent_obj = global_obj;        package_name = strdup(package_def->name);        if (!package_name)            goto out_of_memory;        /* Walk the chain of JavaPackage objects to get to the parent of the           rightmost sub-package in the fully-qualified package name. */        for (simple_name = STRTOK_1ST(package_name, ".", nextstr); simple_name /*1*/; simple_name = STRTOK_OTHER(".", nextstr)) {            jsval v;            if (!simple_name) {                JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,                                         JSJMSG_DOUBLE_SHIPPING, package_name);                goto error;            }            /* Check to see if the sub-package already exists */            quiet_resolve_failure = JS_TRUE;            package_exists = JS_LookupProperty(cx, parent_obj, simple_name, &v) && JSVAL_IS_OBJECT(v);            quiet_resolve_failure = JS_FALSE;            if (package_exists) {                parent_obj = JSVAL_TO_OBJECT(v);                continue;            }            /* New package objects should only be created at the terminal               sub-package in a fully-qualified package-name */            if (STRTOK_OTHER(".", nextstr)) {                JS_ReportErrorNumber(cx, jsj_GetErrorMessage, NULL,                                JSJMSG_BAD_PACKAGE_PREDEF,                               package_def->name);                goto error;            }                        if (package_def->path) {                path = strdup(package_def->path);                if (!path)                    goto out_of_memory;            } else {                /*                 * The default path is specified, so create it from the                 * fully-qualified package name.                 */                path = strdup(package_def->name);                if (!path)                    goto out_of_memory;                /* Transform package name, e.g. "java.lang" ==> "java/lang" */                for (cp = path; *cp != '\0'; cp++) {                    if (*cp == '.')                         *cp = '/';                }            }            flags = package_def->flags;            parent_obj = define_JavaPackage(cx, parent_obj, simple_name, path, flags,                                            package_def->access);            if (!parent_obj)                goto error;             free(path);            break;        }        free(package_name);    }    return JS_TRUE;out_of_memory:    JS_ReportOutOfMemory(cx);error:    JS_FREE_IF(cx, package_name);    JS_FREE_IF(cx, path);    return JS_FALSE;}JS_STATIC_DLL_CALLBACK(JSBool)JavaPackage_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                 jsval *rval){    if (!JS_InstanceOf(cx, obj, &JavaPackage_class, argv))        return JS_FALSE;    return JavaPackage_convert(cx, obj, JSTYPE_STRING, rval);}static JSFunctionSpec JavaPackage_methods[] = {    {"toString",   JavaPackage_toString,        0,      0,      0},    {0, 0, 0, 0, 0},};/* * One-time initialization for the JavaPackage class.  (This is not * run once per thread, rather it's run once for a given JSContext.) */JSBooljsj_init_JavaPackage(JSContext *cx, JSObject *global_obj,                     JavaPackageDef *additional_predefined_packages) {    /* Define JavaPackage class */    if (!JS_InitClass(cx, global_obj, 0, &JavaPackage_class,                      0, 0, 0, JavaPackage_methods, 0, 0))        return JS_FALSE;    /* Add top-level packages, e.g. : java, netscape, sun */    if (!pre_define_java_packages(cx, global_obj, standard_java_packages))        return JS_FALSE;    if (!pre_define_java_packages(cx, global_obj, additional_predefined_packages))        return JS_FALSE;        return JS_TRUE;}

⌨️ 快捷键说明

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