diff --git a/js/src/jit-test/tests/basic/testScriptCloning.js b/js/src/jit-test/tests/basic/testScriptCloning.js index 55955ce10600..face70bce0ee 100644 --- a/js/src/jit-test/tests/basic/testScriptCloning.js +++ b/js/src/jit-test/tests/basic/testScriptCloning.js @@ -1,28 +1,24 @@ var g = newGlobal(); -function cloneableFunction(body) { - return evaluate("(function () { " + body + " })", {compileAndGo: false}); -} - -g.f = cloneableFunction('return function(x) { return x };'); +g.f = new Function('return function(x) { return x };'); assertEq(g.eval("clone(f)()(9)"), 9); -g.f = cloneableFunction('return function(x) { let(y = x+1) { return y } };'); +g.f = new Function('return function(x) { let(y = x+1) { return y } };'); assertEq(g.eval("clone(f)()(9)"), 10); -g.f = cloneableFunction('return function(x) { let(y = x, z = 1) { return y+z } };'); +g.f = new Function('return function(x) { let(y = x, z = 1) { return y+z } };'); assertEq(g.eval("clone(f)()(9)"), 10); -g.f = cloneableFunction('return function(x) { return x.search(/ponies/) };'); +g.f = new Function('return function(x) { return x.search(/ponies/) };'); assertEq(g.eval("clone(f)()('123ponies')"), 3); -g.f = cloneableFunction('return function(x,y) { return x.search(/a/) + y.search(/b/) };'); +g.f = new Function('return function(x,y) { return x.search(/a/) + y.search(/b/) };'); assertEq(g.eval("clone(f)()('12a','foo')"), 1); -g.f = cloneableFunction('return [function(x) x+2, function(y) let(z=y+1) z];'); +g.f = new Function('return [function(x) x+2, function(y) let(z=y+1) z];'); assertEq(g.eval("let ([f,g] = clone(f)()) f(g(4))"), 7); -g.f = cloneableFunction('return function(x) { switch(x) { case "a": return "b"; case null: return "c" } };'); +g.f = new Function('return function(x) { switch(x) { case "a": return "b"; case null: return "c" } };'); assertEq(g.eval("clone(f)()('a')"), "b"); assertEq(g.eval("clone(f)()(null)"), "c"); assertEq(g.eval("clone(f)()(3)"), undefined); diff --git a/js/src/jit-test/tests/basic/weird-scopechains.js b/js/src/jit-test/tests/basic/weird-scopechains.js index 8f240cea7817..035a934ec53a 100644 --- a/js/src/jit-test/tests/basic/weird-scopechains.js +++ b/js/src/jit-test/tests/basic/weird-scopechains.js @@ -6,9 +6,7 @@ function assertWithMessage(got, expected, message) { assertEq(message + ": " + got, message + ": " + expected); } -// Create our test func via "evaluate" so it won't be compileAndGo and -// we can clone it. -evaluate(`function testFunc() { +function testFunc() { assertWithMessage(checkNameLookup(), "local", "nameLookup"); assertWithMessage(checkThisBinding(), "local", "thisBinding"); @@ -20,7 +18,7 @@ evaluate(`function testFunc() { assertWithMessage(checkNameLookup(), "local", "nameLookup" + reason); assertWithMessage(checkThisBinding(), "local", "thisBinding" + reason); })(); -}`, { compileAndGo: false }); +} var obj = { checkNameLookup: function() { diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 7e9c500d9658..4cc58459a157 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -3250,7 +3250,7 @@ IsFunctionCloneable(HandleFunction fun, HandleObject dynamicScope) return false; } - return !fun->nonLazyScript()->compileAndGo() || dynamicScope->is(); + return true; } static JSObject* diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index 760d01e4bf0f..c1725ead805c 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -2567,14 +2567,6 @@ Clone(JSContext* cx, unsigned argc, jsval* vp) funobj = JS_GetFunctionObject(fun); } } - if (funobj->compartment() != cx->compartment()) { - JSFunction* fun = &funobj->as(); - if (fun->hasScript() && fun->nonLazyScript()->compileAndGo()) { - JS_ReportErrorNumber(cx, GetErrorMessage, nullptr, JSMSG_UNEXPECTED_TYPE, - "function", "compile-and-go"); - return false; - } - } if (args.length() > 1) { if (!JS_ValueToObject(cx, args[1], &parent))