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

@ -377,7 +377,7 @@ interface nsIXPCComponents_Utils : nsISupports
[implicit_jscontext]
attribute boolean strict_mode;
[implicit_jscontext]
attribute boolean ion;

View File

@ -1124,12 +1124,48 @@ static int
usage(void)
{
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;
}
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
ProcessArgs(JSContext *cx, JSObject *obj, char **argv, int argc)
{
@ -1210,13 +1246,7 @@ ProcessArgs(JSContext *cx, JSObject *obj, char **argv, int argc)
case 'w':
reportWarnings = true;
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 'd':
xpc_ActivateDebugMode();
@ -1254,11 +1284,12 @@ ProcessArgs(JSContext *cx, JSObject *obj, char **argv, int argc)
compileOnly = true;
isInteractive = false;
break;
case 'S':
case 's':
case 'm':
JS_ToggleOptions(cx, JSOPTION_METHODJIT);
break;
case 'I':
case 'n':
JS_ToggleOptions(cx, JSOPTION_TYPE_INFERENCE);
// These options are processed in ProcessArgsForCompartment.
break;
default:
return usage();
@ -1775,6 +1806,10 @@ main(int argc, char **argv, char **envp)
return 1;
}
argc--;
argv++;
ProcessArgsForCompartment(cx, argv, argc);
JS_SetOptions(cx, JS_GetOptions(cx) | JSOPTION_ALLOW_XML);
xpc_LocalizeContext(cx);
@ -1887,9 +1922,6 @@ main(int argc, char **argv, char **envp)
JS_DefineProperty(cx, glob, "__LOCATION__", JSVAL_VOID,
GetLocationProperty, NULL, 0);
argc--;
argv++;
result = ProcessArgs(cx, glob, argv, argc);