Skip to content

Commit

Permalink
Bug 1022773 - Switch all JS Compile functions to use MutableHandle, r…
Browse files Browse the repository at this point in the history
…=terrence
  • Loading branch information
hotsphink committed Jun 25, 2014
1 parent 5c6a27f commit e113b2d
Show file tree
Hide file tree
Showing 18 changed files with 197 additions and 171 deletions.
13 changes: 7 additions & 6 deletions dom/base/nsJSUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,12 +157,13 @@ nsJSUtils::CompileFunction(JSContext* aCx,
}

// Compile.
JSFunction* fun = JS::CompileFunction(aCx, aTarget, aOptions,
PromiseFlatCString(aName).get(),
aArgCount, aArgArray,
PromiseFlatString(aBody).get(),
aBody.Length());
if (!fun) {
JS::Rooted<JSFunction*> fun(aCx);
if (!JS::CompileFunction(aCx, aTarget, aOptions,
PromiseFlatCString(aName).get(),
aArgCount, aArgArray,
PromiseFlatString(aBody).get(),
aBody.Length(), &fun))
{
ReportPendingException(aCx);
return NS_ERROR_FAILURE;
}
Expand Down
21 changes: 11 additions & 10 deletions ipc/testshell/XPCShellEnvironment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,10 @@ Load(JSContext *cx,
JS::CompileOptions options(cx);
options.setUTF8(true)
.setFileAndLine(filename.ptr(), 1);
JS::Rooted<JSScript*> script(cx, JS::Compile(cx, obj, options, file));
JS::Rooted<JSScript*> script(cx);
bool ok = JS::Compile(cx, obj, options, file, &script);
fclose(file);
if (!script)
if (!ok)
return false;

if (!JS_ExecuteScript(cx, obj, script)) {
Expand Down Expand Up @@ -334,8 +335,8 @@ XPCShellEnvironment::ProcessFile(JSContext *cx,
JS::CompileOptions options(cx);
options.setUTF8(true)
.setFileAndLine(filename, 1);
JS::Rooted<JSScript*> script(cx, JS::Compile(cx, obj, options, file));
if (script)
JS::Rooted<JSScript*> script(cx);
if (JS::Compile(cx, obj, options, file, &script))
(void)JS_ExecuteScript(cx, obj, script, &result);

return;
Expand Down Expand Up @@ -371,9 +372,8 @@ XPCShellEnvironment::ProcessFile(JSContext *cx,
JS_ClearPendingException(cx);
JS::CompileOptions options(cx);
options.setFileAndLine("typein", startline);
JS::Rooted<JSScript*> script(cx,
JS_CompileScript(cx, obj, buffer, strlen(buffer), options));
if (script) {
JS::Rooted<JSScript*> script(cx);
if (JS_CompileScript(cx, obj, buffer, strlen(buffer), options, &script)) {
JSErrorReporter older;

ok = JS_ExecuteScript(cx, obj, script, &result);
Expand Down Expand Up @@ -580,9 +580,10 @@ XPCShellEnvironment::EvaluateString(const nsString& aString,

JS::CompileOptions options(cx);
options.setFileAndLine("typein", 0);
JS::Rooted<JSScript*> script(cx, JS_CompileUCScript(cx, global, aString.get(),
aString.Length(), options));
if (!script) {
JS::Rooted<JSScript*> script(cx);
if (!JS_CompileUCScript(cx, global, aString.get(), aString.Length(), options,
&script))
{
return false;
}

Expand Down
24 changes: 12 additions & 12 deletions js/src/jsapi-tests/testChromeBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,8 @@ BEGIN_TEST(testChromeBuffer)
JS::HandleObject global = JS::HandleObject::fromMarkedLocation(trusted_glob.unsafeGet());
JS::CompileOptions options(cx);
options.setFileAndLine("", 0);
CHECK(fun = JS_CompileFunction(cx, global, "trusted", 1, &paramName,
bytes, strlen(bytes), options));
CHECK(JS_CompileFunction(cx, global, "trusted", 1, &paramName,
bytes, strlen(bytes), options, &fun));
trusted_fun = JS_GetFunctionObject(fun);
if (!JS::AddNamedObjectRoot(cx, &trusted_fun, "trusted-function"))
return false;
Expand All @@ -93,8 +93,8 @@ BEGIN_TEST(testChromeBuffer)
"} ";
JS::CompileOptions options(cx);
options.setFileAndLine("", 0);
CHECK(fun = JS_CompileFunction(cx, global, "untrusted", 1, &paramName,
bytes, strlen(bytes), options));
CHECK(JS_CompileFunction(cx, global, "untrusted", 1, &paramName,
bytes, strlen(bytes), options, &fun));

JS::RootedValue rval(cx);
CHECK(JS_CallFunction(cx, JS::NullPtr(), fun, JS::HandleValueArray(v), &rval));
Expand All @@ -117,8 +117,8 @@ BEGIN_TEST(testChromeBuffer)
JS::HandleObject global = JS::HandleObject::fromMarkedLocation(trusted_glob.unsafeGet());
JS::CompileOptions options(cx);
options.setFileAndLine("", 0);
CHECK(fun = JS_CompileFunction(cx, global, "trusted", 1, &paramName,
bytes, strlen(bytes), options));
CHECK(JS_CompileFunction(cx, global, "trusted", 1, &paramName,
bytes, strlen(bytes), options, &fun));
trusted_fun = JS_GetFunctionObject(fun);
}

Expand All @@ -133,8 +133,8 @@ BEGIN_TEST(testChromeBuffer)
"} ";
JS::CompileOptions options(cx);
options.setFileAndLine("", 0);
CHECK(fun = JS_CompileFunction(cx, global, "untrusted", 1, &paramName,
bytes, strlen(bytes), options));
CHECK(JS_CompileFunction(cx, global, "untrusted", 1, &paramName,
bytes, strlen(bytes), options, &fun));

JS::RootedValue rval(cx);
CHECK(JS_CallFunction(cx, JS::NullPtr(), fun, JS::HandleValueArray(v), &rval));
Expand All @@ -154,8 +154,8 @@ BEGIN_TEST(testChromeBuffer)
JS::HandleObject global = JS::HandleObject::fromMarkedLocation(trusted_glob.unsafeGet());
JS::CompileOptions options(cx);
options.setFileAndLine("", 0);
CHECK(fun = JS_CompileFunction(cx, global, "trusted", 0, nullptr,
bytes, strlen(bytes), options));
CHECK(JS_CompileFunction(cx, global, "trusted", 0, nullptr,
bytes, strlen(bytes), options, &fun));
trusted_fun = JS_GetFunctionObject(fun);
}

Expand All @@ -170,8 +170,8 @@ BEGIN_TEST(testChromeBuffer)
"} ";
JS::CompileOptions options(cx);
options.setFileAndLine("", 0);
CHECK(fun = JS_CompileFunction(cx, global, "untrusted", 1, &paramName,
bytes, strlen(bytes), options));
CHECK(JS_CompileFunction(cx, global, "untrusted", 1, &paramName,
bytes, strlen(bytes), options, &fun));

JS::RootedValue arg(cx, JS::ObjectValue(*callTrusted));
JS::RootedValue rval(cx);
Expand Down
13 changes: 7 additions & 6 deletions js/src/jsapi-tests/testCloneScript.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@ BEGIN_TEST(test_cloneScript)
// compile for A
{
JSAutoCompartment a(cx, A);
JSFunction *fun;
JS::RootedFunction fun(cx);
JS::CompileOptions options(cx);
options.setFileAndLine(__FILE__, 1);
CHECK(fun = JS_CompileFunction(cx, A, "f", 0, nullptr, source,
strlen(source), options));
CHECK(JS_CompileFunction(cx, A, "f", 0, nullptr, source,
strlen(source), options, &fun));
CHECK(obj = JS_GetFunctionObject(fun));
}

Expand Down Expand Up @@ -109,9 +109,10 @@ BEGIN_TEST(test_cloneScriptWithPrincipals)
JSAutoCompartment a(cx, A);
JS::CompileOptions options(cx);
options.setFileAndLine(__FILE__, 1);
JS::RootedFunction fun(cx, JS_CompileFunction(cx, A, "f",
mozilla::ArrayLength(argnames), argnames, source,
strlen(source), options));
JS::RootedFunction fun(cx);
JS_CompileFunction(cx, A, "f",
mozilla::ArrayLength(argnames), argnames, source,
strlen(source), options, &fun);
CHECK(fun);

JSScript *script;
Expand Down
12 changes: 6 additions & 6 deletions js/src/jsapi-tests/testEnclosingFunction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,22 +40,22 @@ BEGIN_TEST(test_enclosingFunction)
options.setFileAndLine(__FILE__, __LINE__);

const char s1chars[] = "checkEnclosing()";
fun = JS_CompileFunction(cx, global, "s1", 0, nullptr, s1chars,
strlen(s1chars), options);
JS_CompileFunction(cx, global, "s1", 0, nullptr, s1chars,
strlen(s1chars), options, &fun);
CHECK(fun);
EXEC("s1()");
CHECK(foundFun == fun);

const char s2chars[] = "return function() { checkEnclosing() }";
fun = JS_CompileFunction(cx, global, "s2", 0, nullptr, s2chars,
strlen(s2chars), options);
JS_CompileFunction(cx, global, "s2", 0, nullptr, s2chars,
strlen(s2chars), options, &fun);
CHECK(fun);
EXEC("s2()()");
CHECK(foundFun == fun);

const char s3chars[] = "return function() { let (x) { function g() { checkEnclosing() } return g() } }";
fun = JS_CompileFunction(cx, global, "s3", 0, nullptr, s3chars,
strlen(s3chars), options);
JS_CompileFunction(cx, global, "s3", 0, nullptr, s3chars,
strlen(s3chars), options, &fun);
CHECK(fun);
EXEC("s3()()");
CHECK(foundFun == fun);
Expand Down
5 changes: 2 additions & 3 deletions js/src/jsapi-tests/testScriptInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,8 @@ BEGIN_TEST(testScriptInfo)

JS::CompileOptions options(cx);
options.setFileAndLine(__FILE__, startLine);
JS::RootedScript script(cx, JS_CompileScript(cx, global, code, strlen(code),
options));

JS::RootedScript script(cx);
CHECK(JS_CompileScript(cx, global, code, strlen(code), options, &script));
CHECK(script);

jsbytecode *start = JS_LineNumberToPC(cx, script, startLine);
Expand Down
50 changes: 32 additions & 18 deletions js/src/jsapi-tests/testScriptObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,8 @@ struct ScriptObjectFixture : public JSAPITest {
uc_code[i] = code[i];
}

bool tryScript(JS::HandleObject global, JSScript *scriptArg)
bool tryScript(JS::HandleObject global, JS::HandleScript script)
{
JS::RootedScript script(cx, scriptArg);
CHECK(script);

JS_GC(rt);
Expand All @@ -42,52 +41,59 @@ BEGIN_FIXTURE_TEST(ScriptObjectFixture, bug438633_CompileScript)
{
JS::CompileOptions options(cx);
options.setFileAndLine(__FILE__, __LINE__);
return tryScript(global, JS_CompileScript(cx, global, code, code_size,
options));
JS::RootedScript script(cx);
CHECK(JS_CompileScript(cx, global, code, code_size, options, &script));
return tryScript(global, script);
}
END_FIXTURE_TEST(ScriptObjectFixture, bug438633_CompileScript)

BEGIN_FIXTURE_TEST(ScriptObjectFixture, bug438633_CompileScript_empty)
{
JS::CompileOptions options(cx);
options.setFileAndLine(__FILE__, __LINE__);
return tryScript(global, JS_CompileScript(cx, global, "", 0, options));
JS::RootedScript script(cx);
CHECK(JS_CompileScript(cx, global, "", 0, options, &script));
return tryScript(global, script);
}
END_FIXTURE_TEST(ScriptObjectFixture, bug438633_CompileScript_empty)

BEGIN_FIXTURE_TEST(ScriptObjectFixture, bug438633_CompileScriptForPrincipals)
{
JS::CompileOptions options(cx);
options.setFileAndLine(__FILE__, __LINE__);
return tryScript(global, JS_CompileScript(cx, global, code, code_size,
options));
JS::RootedScript script(cx);
CHECK(JS_CompileScript(cx, global, code, code_size, options, &script));
return tryScript(global, script);
}
END_FIXTURE_TEST(ScriptObjectFixture, bug438633_CompileScriptForPrincipals)

BEGIN_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileUCScript)
{
JS::CompileOptions options(cx);
options.setFileAndLine(__FILE__, __LINE__);
return tryScript(global, JS_CompileUCScript(cx, global, uc_code, code_size,
options));
JS::RootedScript script(cx);
CHECK(JS_CompileUCScript(cx, global, uc_code, code_size, options, &script));
return tryScript(global, script);
}
END_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileUCScript)

BEGIN_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileUCScript_empty)
{
JS::CompileOptions options(cx);
options.setFileAndLine(__FILE__, __LINE__);
return tryScript(global, JS_CompileUCScript(cx, global, uc_code, 0,
options));
JS::RootedScript script(cx);
CHECK(JS_CompileUCScript(cx, global, uc_code, 0, options, &script));
return tryScript(global, script);
}
END_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileUCScript_empty)

BEGIN_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileUCScriptForPrincipals)
{
JS::CompileOptions options(cx);
options.setFileAndLine(__FILE__, __LINE__);
return tryScript(global, JS_CompileUCScript(cx, global, uc_code, code_size,
options));
JS::RootedScript script(cx);
CHECK(JS_CompileUCScript(cx, global, uc_code, code_size, options, &script));
return tryScript(global, script);
}
END_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileUCScriptForPrincipals)

Expand All @@ -100,7 +106,8 @@ BEGIN_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileFile)
tempScript.close();
JS::CompileOptions options(cx);
options.setFileAndLine(script_filename, 1);
JSScript *script = JS::Compile(cx, global, options, script_filename);
JS::RootedScript script(cx);
CHECK(JS::Compile(cx, global, options, script_filename, &script));
tempScript.remove();
return tryScript(global, script);
}
Expand All @@ -114,7 +121,8 @@ BEGIN_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileFile_empty)
tempScript.close();
JS::CompileOptions options(cx);
options.setFileAndLine(script_filename, 1);
JSScript *script = JS::Compile(cx, global, options, script_filename);
JS::RootedScript script(cx);
CHECK(JS::Compile(cx, global, options, script_filename, &script));
tempScript.remove();
return tryScript(global, script);
}
Expand All @@ -129,7 +137,9 @@ BEGIN_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileFileHandle)
CHECK(fseek(script_stream, 0, SEEK_SET) != EOF);
JS::CompileOptions options(cx);
options.setFileAndLine(script_filename, 1);
return tryScript(global, JS::Compile(cx, global, options, script_stream));
JS::RootedScript script(cx);
CHECK(JS::Compile(cx, global, options, script_stream, &script));
return tryScript(global, script);
}
END_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileFileHandle)

Expand All @@ -140,7 +150,9 @@ BEGIN_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileFileHandle_empty)
FILE *script_stream = tempScript.open("temp-bug438633_JS_CompileFileHandle_empty");
JS::CompileOptions options(cx);
options.setFileAndLine(script_filename, 1);
return tryScript(global, JS::Compile(cx, global, options, script_stream));
JS::RootedScript script(cx);
CHECK(JS::Compile(cx, global, options, script_stream, &script));
return tryScript(global, script);
}
END_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileFileHandle_empty)

Expand All @@ -152,6 +164,8 @@ BEGIN_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileFileHandleForPrincip
CHECK(fseek(script_stream, 0, SEEK_SET) != EOF);
JS::CompileOptions options(cx);
options.setFileAndLine("temporary file", 1);
return tryScript(global, JS::Compile(cx, global, options, script_stream));
JS::RootedScript script(cx);
CHECK(JS::Compile(cx, global, options, script_stream, &script));
return tryScript(global, script);
}
END_FIXTURE_TEST(ScriptObjectFixture, bug438633_JS_CompileFileHandleForPrincipals)
4 changes: 3 additions & 1 deletion js/src/jsapi-tests/testSourcePolicy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ BEGIN_TEST(testBug795104)
memset(s + 1, 'x', strLen - 2);
s[strLen - 1] = '"';
CHECK(JS::Evaluate(cx, global, opts, s, strLen));
CHECK(JS::CompileFunction(cx, global, opts, "f", 0, nullptr, s, strLen));
JS::RootedFunction fun(cx);
CHECK(JS::CompileFunction(cx, global, opts, "f", 0, nullptr, s, strLen, &fun));
CHECK(fun);
JS_free(cx, s);

return true;
Expand Down
4 changes: 2 additions & 2 deletions js/src/jsapi-tests/testTrap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ BEGIN_TEST(testTrap_gc)
// compile
JS::CompileOptions options(cx);
options.setFileAndLine(__FILE__, 1);
JS::RootedScript script(cx, JS_CompileScript(cx, global, source,
strlen(source), options));
JS::RootedScript script(cx);
CHECK(JS_CompileScript(cx, global, source, strlen(source), options, &script));
CHECK(script);

// execute
Expand Down
Loading

0 comments on commit e113b2d

Please sign in to comment.