Bug 810062 - Toggle JSOPTIONs before the compartment creation. r=bhackett

This commit is contained in:
Nicolas B. Pierron 2012-11-19 17:52:35 -08:00
parent 20e2c47dfb
commit b4a74f1cc8
2 changed files with 46 additions and 14 deletions

View File

@ -1124,12 +1124,48 @@ static int
usage(void) usage(void)
{ {
fprintf(gErrFile, "%s\n", JS_GetImplementationVersion()); fprintf(gErrFile, "%s\n", JS_GetImplementationVersion());
fprintf(gErrFile, "usage: xpcshell [-g gredir] [-a appdir] [-r manifest]... [-PsSwWxCij] [-v version] [-f scriptfile] [-e script] [scriptfile] [scriptarg...]\n"); fprintf(gErrFile, "usage: xpcshell [-g gredir] [-a appdir] [-r manifest]... [-PsSwWxCijmIn] [-v version] [-f scriptfile] [-e script] [scriptfile] [scriptarg...]\n");
return 2; return 2;
} }
extern JSClass global_class; extern JSClass global_class;
static void
ProcessArgsForCompartment(JSContext *cx, char **argv, int argc)
{
for (int i = 0; i < argc; i++) {
if (argv[i][0] != '-' || argv[i][1] == '\0')
break;
switch (argv[i][1]) {
case 'v':
case 'f':
case 'e':
if (++i == argc)
return;
break;
case 'S':
JS_ToggleOptions(cx, JSOPTION_WERROR);
case 's':
JS_ToggleOptions(cx, JSOPTION_STRICT);
break;
case 'x':
JS_ToggleOptions(cx, JSOPTION_MOAR_XML);
break;
case 'm':
JS_ToggleOptions(cx, JSOPTION_METHODJIT);
break;
case 'I':
JS_ToggleOptions(cx, JSOPTION_COMPILE_N_GO);
JS_ToggleOptions(cx, JSOPTION_ION);
break;
case 'n':
JS_ToggleOptions(cx, JSOPTION_TYPE_INFERENCE);
break;
}
}
}
static int static int
ProcessArgs(JSContext *cx, JSObject *obj, char **argv, int argc) ProcessArgs(JSContext *cx, JSObject *obj, char **argv, int argc)
{ {
@ -1210,13 +1246,7 @@ ProcessArgs(JSContext *cx, JSObject *obj, char **argv, int argc)
case 'w': case 'w':
reportWarnings = true; reportWarnings = true;
break; break;
case 'S':
JS_ToggleOptions(cx, JSOPTION_WERROR);
case 's':
JS_ToggleOptions(cx, JSOPTION_STRICT);
break;
case 'x': case 'x':
JS_ToggleOptions(cx, JSOPTION_MOAR_XML);
break; break;
case 'd': case 'd':
xpc_ActivateDebugMode(); xpc_ActivateDebugMode();
@ -1254,11 +1284,12 @@ ProcessArgs(JSContext *cx, JSObject *obj, char **argv, int argc)
compileOnly = true; compileOnly = true;
isInteractive = false; isInteractive = false;
break; break;
case 'S':
case 's':
case 'm': case 'm':
JS_ToggleOptions(cx, JSOPTION_METHODJIT); case 'I':
break;
case 'n': case 'n':
JS_ToggleOptions(cx, JSOPTION_TYPE_INFERENCE); // These options are processed in ProcessArgsForCompartment.
break; break;
default: default:
return usage(); return usage();
@ -1775,6 +1806,10 @@ main(int argc, char **argv, char **envp)
return 1; return 1;
} }
argc--;
argv++;
ProcessArgsForCompartment(cx, argv, argc);
JS_SetOptions(cx, JS_GetOptions(cx) | JSOPTION_ALLOW_XML); JS_SetOptions(cx, JS_GetOptions(cx) | JSOPTION_ALLOW_XML);
xpc_LocalizeContext(cx); xpc_LocalizeContext(cx);
@ -1887,9 +1922,6 @@ main(int argc, char **argv, char **envp)
JS_DefineProperty(cx, glob, "__LOCATION__", JSVAL_VOID, JS_DefineProperty(cx, glob, "__LOCATION__", JSVAL_VOID,
GetLocationProperty, NULL, 0); GetLocationProperty, NULL, 0);
argc--;
argv++;
result = ProcessArgs(cx, glob, argv, argc); result = ProcessArgs(cx, glob, argv, argc);