Backed out changeset 629b02d8c025 (bug 911142) for web-platform-4 test failures on a CLOSED TREE

This commit is contained in:
Wes Kocher 2014-10-27 16:14:35 -07:00
parent 78469cff03
commit e6ffe36a7e
29 changed files with 122 additions and 196 deletions

View File

@ -1,8 +1,4 @@
{
"WeakMap.prototype.clear.length": true,
"WeakMap.prototype.delete.length": true,
"WeakMap.prototype.get.length": true,
"WeakMap.prototype.get: return undefined": true,
"WeakMap.prototype.has.length": true,
"WeakMap.prototype.set.length": true
"WeakMap.prototype.get: return undefined": true
}

View File

@ -41,7 +41,7 @@ function assertBuiltinFunction(o, name, arity) {
value: arity,
writable: false,
enumerable: false,
configurable: true
configurable: false,
});
}

View File

@ -480,41 +480,24 @@ js::fun_resolve(JSContext *cx, HandleObject obj, HandleId id, MutableHandleObjec
return true;
}
bool isLength = JSID_IS_ATOM(id, cx->names().length);
if (isLength || JSID_IS_ATOM(id, cx->names().name)) {
if (JSID_IS_ATOM(id, cx->names().length) || JSID_IS_ATOM(id, cx->names().name)) {
MOZ_ASSERT(!IsInternalFunctionObject(obj));
RootedValue v(cx);
uint32_t attrs;
if (isLength) {
// Since f.length is configurable, it could be resolved and then deleted:
// function f(x) {}
// assertEq(f.length, 1);
// delete f.length;
// Afterwards, asking for f.length again will cause this resolve
// hook to run again. Defining the property again the second
// time through would be a bug.
// assertEq(f.length, 0); // gets Function.prototype.length!
// We use the RESOLVED_LENGTH flag as a hack to prevent this bug.
if (fun->hasResolvedLength())
return true;
if (JSID_IS_ATOM(id, cx->names().length)) {
if (fun->isInterpretedLazy() && !fun->getOrCreateScript(cx))
return false;
uint16_t length = fun->hasScript() ? fun->nonLazyScript()->funLength() :
fun->nargs() - fun->hasRest();
v.setInt32(length);
attrs = JSPROP_READONLY;
} else {
v.setString(fun->atom() == nullptr ? cx->runtime()->emptyString : fun->atom());
attrs = JSPROP_READONLY | JSPROP_PERMANENT;
}
if (!DefineNativeProperty(cx, fun, id, v, JS_PropertyStub, JS_StrictPropertyStub, attrs))
if (!DefineNativeProperty(cx, fun, id, v, JS_PropertyStub, JS_StrictPropertyStub,
JSPROP_PERMANENT | JSPROP_READONLY)) {
return false;
if (isLength)
fun->setResolvedLength();
}
objp.set(fun);
return true;
}

View File

@ -49,7 +49,6 @@ class JSFunction : public js::NativeObject
ASMJS = 0x0800, /* function is an asm.js module or exported function */
INTERPRETED_LAZY = 0x1000, /* function is interpreted but doesn't have a script yet */
ARROW = 0x2000, /* ES6 '(args) => body' syntax */
RESOLVED_LENGTH = 0x4000, /* f.length has been resolved (see js::fun_resolve). */
/* Derived Flags values for convenience: */
NATIVE_FUN = 0,
@ -130,13 +129,13 @@ class JSFunction : public js::NativeObject
bool isSelfHostedBuiltin() const { return flags() & SELF_HOSTED; }
bool isSelfHostedConstructor() const { return flags() & SELF_HOSTED_CTOR; }
bool hasRest() const { return flags() & HAS_REST; }
bool isInterpretedLazy() const { return flags() & INTERPRETED_LAZY; }
bool hasScript() const { return flags() & INTERPRETED; }
// Arrow functions store their lexical |this| in the first extended slot.
bool isArrow() const { return flags() & ARROW; }
bool hasResolvedLength() const { return flags() & RESOLVED_LENGTH; }
bool isInterpretedLazy() const {
return flags() & INTERPRETED_LAZY;
}
bool hasScript() const {
return flags() & INTERPRETED;
}
bool hasJITCode() const {
if (!hasScript())
@ -145,6 +144,9 @@ class JSFunction : public js::NativeObject
return nonLazyScript()->hasBaselineScript() || nonLazyScript()->hasIonScript();
}
// Arrow functions store their lexical |this| in the first extended slot.
bool isArrow() const { return flags() & ARROW; }
/* Compound attributes: */
bool isBuiltin() const {
return (isNative() && !isAsmJSNative()) || isSelfHostedBuiltin();
@ -208,16 +210,8 @@ class JSFunction : public js::NativeObject
flags_ |= ARROW;
}
void setResolvedLength() {
flags_ |= RESOLVED_LENGTH;
}
JSAtom *atom() const { return hasGuessedAtom() ? nullptr : atom_.get(); }
js::PropertyName *name() const {
return hasGuessedAtom() || !atom_ ? nullptr : atom_->asPropertyName();
}
js::PropertyName *name() const { return hasGuessedAtom() || !atom_ ? nullptr : atom_->asPropertyName(); }
void initAtom(JSAtom *atom) { atom_.init(atom); }
JSAtom *displayAtom() const {

View File

@ -30,6 +30,8 @@ writeHeaderToLog( SECTION + " Array.prototype.join()");
var ARR_PROTOTYPE = Array.prototype;
new TestCase( SECTION, "Array.prototype.join.length", 1, Array.prototype.join.length );
new TestCase( SECTION, "delete Array.prototype.join.length", false, delete Array.prototype.join.length );
new TestCase( SECTION, "delete Array.prototype.join.length; Array.prototype.join.length", 1, eval("delete Array.prototype.join.length; Array.prototype.join.length") );
// case where array length is 0

View File

@ -68,6 +68,16 @@ new TestCase( SECTION,
0,
Array.prototype.reverse.length );
new TestCase( SECTION,
"delete Array.prototype.reverse.length",
false,
delete Array.prototype.reverse.length );
new TestCase( SECTION,
"delete Array.prototype.reverse.length; Array.prototype.reverse.length",
0,
eval("delete Array.prototype.reverse.length; Array.prototype.reverse.length") );
// length of array is 0
new TestCase( SECTION,
"var A = new Array(); A.reverse(); A.length",

View File

@ -64,6 +64,8 @@ writeHeaderToLog( SECTION + " Array.prototype.reverse()");
var ARR_PROTOTYPE = Array.prototype;
new TestCase( SECTION, "Array.prototype.reverse.length", 0, Array.prototype.reverse.length );
new TestCase( SECTION, "delete Array.prototype.reverse.length", false, delete Array.prototype.reverse.length );
new TestCase( SECTION, "delete Array.prototype.reverse.length; Array.prototype.reverse.length", 0, eval("delete Array.prototype.reverse.length; Array.prototype.reverse.length") );
// length of array is 0
new TestCase( SECTION,

View File

@ -99,6 +99,21 @@ new TestCase( SECTION,
"var PROPS=''; for ( var p in parseInt ) { PROPS += p; }; PROPS", "",
eval("var PROPS=''; for ( var p in parseInt ) { PROPS += p; }; PROPS") );
new TestCase( SECTION,
"delete parseInt.length",
false,
delete parseInt.length );
new TestCase( SECTION,
"delete parseInt.length; parseInt.length",
2,
eval("delete parseInt.length; parseInt.length") );
new TestCase( SECTION,
"parseInt.length = null; parseInt.length",
2,
eval("parseInt.length = null; parseInt.length") );
new TestCase( SECTION,
"parseInt()",
NaN,

View File

@ -54,6 +54,8 @@ writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "parseFloat.length", 1, parseFloat.length );
new TestCase( SECTION, "parseFloat.length = null; parseFloat.length", 1, eval("parseFloat.length = null; parseFloat.length") );
new TestCase( SECTION, "delete parseFloat.length", false, delete parseFloat.length );
new TestCase( SECTION, "delete parseFloat.length; parseFloat.length", 1, eval("delete parseFloat.length; parseFloat.length") );
new TestCase( SECTION, "var MYPROPS=''; for ( var p in parseFloat ) { MYPROPS += p }; MYPROPS", "", eval("var MYPROPS=''; for ( var p in parseFloat ) { MYPROPS += p }; MYPROPS") );
new TestCase( SECTION, "parseFloat()", Number.NaN, parseFloat() );

View File

@ -60,6 +60,8 @@ writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "escape.length", 1, escape.length );
new TestCase( SECTION, "escape.length = null; escape.length", 1, eval("escape.length = null; escape.length") );
new TestCase( SECTION, "delete escape.length", false, delete escape.length );
new TestCase( SECTION, "delete escape.length; escape.length", 1, eval("delete escape.length; escape.length") );
new TestCase( SECTION, "var MYPROPS=''; for ( var p in escape ) { MYPROPS+= p}; MYPROPS", "", eval("var MYPROPS=''; for ( var p in escape ) { MYPROPS+= p}; MYPROPS") );
new TestCase( SECTION, "escape()", "undefined", escape() );

View File

@ -58,6 +58,8 @@ writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "unescape.length", 1, unescape.length );
new TestCase( SECTION, "unescape.length = null; unescape.length", 1, eval("unescape.length=null; unescape.length") );
new TestCase( SECTION, "delete unescape.length", false, delete unescape.length );
new TestCase( SECTION, "delete unescape.length; unescape.length", 1, eval("delete unescape.length; unescape.length") );
new TestCase( SECTION, "var MYPROPS=''; for ( var p in unescape ) { MYPROPS+= p }; MYPROPS", "", eval("var MYPROPS=''; for ( var p in unescape ) { MYPROPS+= p }; MYPROPS") );
new TestCase( SECTION, "unescape()", "undefined", unescape() );

View File

@ -27,6 +27,8 @@ writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "isNaN.length", 1, isNaN.length );
new TestCase( SECTION, "var MYPROPS=''; for ( var p in isNaN ) { MYPROPS+= p }; MYPROPS", "", eval("var MYPROPS=''; for ( var p in isNaN ) { MYPROPS+= p }; MYPROPS") );
new TestCase( SECTION, "isNaN.length = null; isNaN.length", 1, eval("isNaN.length=null; isNaN.length") );
new TestCase( SECTION, "delete isNaN.length", false, delete isNaN.length );
new TestCase( SECTION, "delete isNaN.length; isNaN.length", 1, eval("delete isNaN.length; isNaN.length") );
// new TestCase( SECTION, "isNaN.__proto__", Function.prototype, isNaN.__proto__ );

View File

@ -27,6 +27,8 @@ writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "isFinite.length", 1, isFinite.length );
new TestCase( SECTION, "isFinite.length = null; isFinite.length", 1, eval("isFinite.length=null; isFinite.length") );
new TestCase( SECTION, "delete isFinite.length", false, delete isFinite.length );
new TestCase( SECTION, "delete isFinite.length; isFinite.length", 1, eval("delete isFinite.length; isFinite.length") );
new TestCase( SECTION, "var MYPROPS=''; for ( p in isFinite ) { MYPROPS+= p }; MYPROPS", "", eval("var MYPROPS=''; for ( p in isFinite ) { MYPROPS += p }; MYPROPS") );
new TestCase( SECTION, "isFinite()", false, isFinite() );

View File

@ -52,6 +52,8 @@ var TITLE = "String.prototype.substring( start, end )";
writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "String.prototype.substring.length", 2, String.prototype.substring.length );
new TestCase( SECTION, "delete String.prototype.substring.length", false, delete String.prototype.substring.length );
new TestCase( SECTION, "delete String.prototype.substring.length; String.prototype.substring.length", 2, eval("delete String.prototype.substring.length; String.prototype.substring.length") );
// test cases for when substring is called with no arguments.

View File

@ -33,6 +33,8 @@ var TITLE = "String.prototype.toLowerCase()";
writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "String.prototype.toLowerCase.length", 0, String.prototype.toLowerCase.length );
new TestCase( SECTION, "delete String.prototype.toLowerCase.length", false, delete String.prototype.toLowerCase.length );
new TestCase( SECTION, "delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length", 0, eval("delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length") );
// Basic Latin, Latin-1 Supplement, Latin Extended A
for ( var i = 0; i <= 0x017f; i++ ) {

View File

@ -72,6 +72,8 @@ new TestCase( SECTION,
new TestCase( SECTION, "String.prototype.indexOf.length", 1, String.prototype.indexOf.length );
new TestCase( SECTION, "String.prototype.indexOf.length = null; String.prototype.indexOf.length", 1, eval("String.prototype.indexOf.length = null; String.prototype.indexOf.length") );
new TestCase( SECTION, "delete String.prototype.indexOf.length", false, delete String.prototype.indexOf.length );
new TestCase( SECTION, "delete String.prototype.indexOf.length; String.prototype.indexOf.length", 1, eval("delete String.prototype.indexOf.length; String.prototype.indexOf.length") );
new TestCase( SECTION,
"var s = new String(); s.indexOf()",

View File

@ -53,6 +53,8 @@ writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "String.prototype.lastIndexOf.length", 1, String.prototype.lastIndexOf.length );
new TestCase( SECTION, "delete String.prototype.lastIndexOf.length", false, delete String.prototype.lastIndexOf.length );
new TestCase( SECTION, "delete String.prototype.lastIndexOf.length; String.prototype.lastIndexOf.length", 1, eval("delete String.prototype.lastIndexOf.length; String.prototype.lastIndexOf.length" ) );
new TestCase( SECTION, "var s = new String(''); s.lastIndexOf('', 0)", LastIndexOf("","",0), eval("var s = new String(''); s.lastIndexOf('', 0)") );
new TestCase( SECTION, "var s = new String(''); s.lastIndexOf('')", LastIndexOf("",""), eval("var s = new String(''); s.lastIndexOf('')") );

View File

@ -39,6 +39,8 @@ var TITLE = "String.prototype.split";
writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "String.prototype.split.length", 2, String.prototype.split.length );
new TestCase( SECTION, "delete String.prototype.split.length", false, delete String.prototype.split.length );
new TestCase( SECTION, "delete String.prototype.split.length; String.prototype.split.length", 2, eval("delete String.prototype.split.length; String.prototype.split.length") );
// test cases for when split is called with no arguments.

View File

@ -42,6 +42,8 @@ var TITLE = "String.prototype.substring( start )";
writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "String.prototype.substring.length", 2, String.prototype.substring.length );
new TestCase( SECTION, "delete String.prototype.substring.length", false, delete String.prototype.substring.length );
new TestCase( SECTION, "delete String.prototype.substring.length; String.prototype.substring.length", 2, eval("delete String.prototype.substring.length; String.prototype.substring.length") );
// test cases for when substring is called with no arguments.

View File

@ -23,6 +23,7 @@ startTest();
writeHeaderToLog( SECTION + " "+ TITLE);
new TestCase( SECTION, "eval.length", 1, eval.length );
new TestCase( SECTION, "delete eval.length", false, delete eval.length );
new TestCase( SECTION, "var PROPS = ''; for ( p in eval ) { PROPS += p }; PROPS", "", eval("var PROPS = ''; for ( p in eval ) { PROPS += p }; PROPS") );
new TestCase( SECTION, "eval.length = null; eval.length", 1, eval( "eval.length = null; eval.length") );
// new TestCase( SECTION, "eval.__proto__", Function.prototype, eval.__proto__ );

View File

@ -212,14 +212,14 @@ var len1Desc =
assertEq(len1Desc.value, 3);
assertEq(len1Desc.writable, false);
assertEq(len1Desc.enumerable, false);
assertEq(len1Desc.configurable, true);
assertEq(len1Desc.configurable, false);
var len2Desc =
Object.getOwnPropertyDescriptor(function(a, b, c){}.bind(null, 2), "length");
assertEq(len2Desc.value, 2);
assertEq(len2Desc.writable, false);
assertEq(len2Desc.enumerable, false);
assertEq(len2Desc.configurable, true);
assertEq(len2Desc.configurable, false);
/*

View File

@ -234,7 +234,7 @@ expected =
value: 0,
writable: false,
enumerable: false,
configurable: true
configurable: false
};
expectDescriptor(pd, expected);
@ -258,7 +258,7 @@ expected =
value: 1,
writable: false,
enumerable: false,
configurable: true
configurable: false
};
expectDescriptor(pd, expected);

View File

@ -520,6 +520,8 @@ function mapTestDescriptors(filter)
var ALL_DESCRIPTORS = mapTestDescriptors(function(d) { return true; });
var VALID_DESCRIPTORS = mapTestDescriptors(isValidDescriptor);
var SKIP_FULL_FUNCTION_LENGTH_TESTS = true;
function TestRunner()
{
this._logLines = [];
@ -533,11 +535,20 @@ TestRunner.prototype =
var self = this;
function functionLengthTests()
{
self._fullFunctionLengthTests(() => Function("one", "/* body */"), 1);
self._fullFunctionLengthTests(() => function(one, two, three=null) { }, 2);
self._fullFunctionLengthTests(() => (one, two, ...etc) => 0, 2);
self._fullFunctionLengthTests(() => ({method(){}}.method), 0);
self._fullFunctionLengthTests(() => Object.getOwnPropertyDescriptor({set x(v){}}, "x").set, 1);
if (SKIP_FULL_FUNCTION_LENGTH_TESTS)
{
print("Skipping full tests for redefining Function.length for now " +
"because we don't support redefinition of properties with " +
"native getter or setter...");
self._simpleFunctionLengthTests();
}
else
{
self._simpleFunctionLengthTests();
self._fullFunctionLengthTests(function() { }, 0);
self._fullFunctionLengthTests(function(one) { }, 1);
self._fullFunctionLengthTests(function(one, two) { }, 2);
}
}
this._runTestSet(functionLengthTests, "Function length tests completed!");
@ -726,15 +737,39 @@ TestRunner.prototype =
if (errorCount > 0)
throw errorCount + " errors detected, FAIL";
},
_fullFunctionLengthTests: function _fullFunctionLengthTests(funFactory, len)
_simpleFunctionLengthTests: function _simpleFunctionLengthTests(fun)
{
print("Running Function.length (" + funFactory + ") tests now...");
print("Running simple Function.length tests now..");
for (var i = 0, sz = VALID_DESCRIPTORS.length; i < sz; i++)
function expectThrowTypeError(o, p, desc)
{
var desc = VALID_DESCRIPTORS[i];
this._runSingleFunctionLengthTest(funFactory(), len, desc);
var err = "<none>", passed = false;
try
{
Object.defineProperty(o, p, desc);
}
catch (e)
{
err = e;
passed = e instanceof TypeError;
}
assertEq(passed, true, fun + " didn't throw TypeError when called: " + err);
}
expectThrowTypeError(function a() { }, "length", { value: 1 });
expectThrowTypeError(function a() { }, "length", { enumerable: true });
expectThrowTypeError(function a() { }, "length", { configurable: true });
expectThrowTypeError(function a() { }, "length", { writable: true });
},
_fullFunctionLengthTests: function _fullFunctionLengthTests(fun)
{
var len = fun.length;
print("Running Function.length (" + len + ") tests now...");
var desc;
var gen = new DescriptorState();
while ((desc = gen.nextDescriptor()))
this._runSingleFunctionLengthTest(fun, len, desc);
},
_log: function _log(v)
{
@ -947,7 +982,7 @@ TestRunner.prototype =
{
value: len,
enumerable: false,
configurable: true,
configurable: false,
writable: false
});

View File

@ -12,5 +12,8 @@ function fn() {
assertEq(testLenientAndStrict('var f = fn(); f.length = 1; f.length',
returns(3), raisesException(TypeError)),
true);
assertEq(testLenientAndStrict('var f = fn(); delete f.length',
returns(false), raisesException(TypeError)),
true);
reportCompare(true, true);

View File

@ -1,21 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/licenses/publicdomain/ */
// Deleting .length from a variety of builtin functions works as expected.
for (var fun of [Math.sin, Array.prototype.map, eval]) {
assertEq(delete fun.length, true);
assertEq(fun.hasOwnProperty("length"), false);
assertEq("length" in fun, true); // still inheriting Function.prototype.length
assertEq(fun.length, 0);
// The inherited property is nonwritable, so assigning still fails
// (silently, in sloppy mode).
fun.length = Math.hypot;
assertEq(fun.length, 0);
// It can be shadowed via defineProperty.
Object.defineProperty(fun, "length", {value: Math.hypot});
assertEq(fun.length, Math.hypot);
}
reportCompare(0, 0, 'ok');

View File

@ -1,86 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/licenses/publicdomain/ */
// Very simple initial test that the "length" property of a function is
// configurable. More thorough tests follow.
var f = function (a1, a2, a3, a4) {};
assertEq(delete f.length, true);
assertEq(f.hasOwnProperty("length"), false);
assertEq(f.length, 0); // inherited from Function.prototype.length
assertEq(delete Function.prototype.length, true);
assertEq(f.length, undefined);
// Now for the details.
//
// Many of these tests are poking at the "resolve hook" mechanism SM uses to
// lazily create this property, which is wonky and deserving of some extra
// skepticism.
// We've deleted Function.prototype.length. Check that the resolve hook does
// not resurrect it.
assertEq("length" in Function.prototype, false);
Function.prototype.length = 7;
assertEq(Function.prototype.length, 7);
delete Function.prototype.length;
assertEq(Function.prototype.length, undefined);
// OK, define Function.prototype.length back to its original state per spec, so
// the remaining tests can run in a more typical environment.
Object.defineProperty(Function.prototype, "length", {value: 0, configurable: true});
// Check the property descriptor of a function length property.
var g = function f(a1, a2, a3, a4, a5) {};
var desc = Object.getOwnPropertyDescriptor(g, "length");
assertEq(desc.configurable, true);
assertEq(desc.enumerable, false);
assertEq(desc.writable, false);
assertEq(desc.value, 5);
// After deleting the length property, assigning to f.length fails because
// Function.prototype.length is non-writable. In strict mode it would throw.
delete g.length;
g.length = 12;
assertEq(g.hasOwnProperty("length"), false);
assertEq(g.length, 0);
// After deleting both the length property and Function.prototype.length,
// assigning to f.length creates a new plain old data property.
delete Function.prototype.length;
g.length = 13;
var desc = Object.getOwnPropertyDescriptor(g, "length");
assertEq(desc.configurable, true);
assertEq(desc.enumerable, true);
assertEq(desc.writable, true);
assertEq(desc.value, 13);
// Deleting the .length of one instance of a FunctionDeclaration does not
// affect other instances.
function mkfun() {
function fun(a1, a2, a3, a4, a5) {}
return fun;
}
g = mkfun();
var h = mkfun();
delete h.length;
assertEq(g.length, 5);
assertEq(mkfun().length, 5);
// Object.defineProperty on a brand-new function is sufficient to cause the
// LENGTH_RESOLVED flag to be set.
g = mkfun();
Object.defineProperty(g, "length", {value: 0});
assertEq(delete g.length, true);
assertEq(g.hasOwnProperty("length"), false);
// Object.defineProperty on a brand-new function correctly merges new
// attributes with the builtin ones.
g = mkfun();
Object.defineProperty(g, "length", { value: 42 });
desc = Object.getOwnPropertyDescriptor(g, "length");
assertEq(desc.configurable, true);
assertEq(desc.enumerable, false);
assertEq(desc.writable, false);
assertEq(desc.value, 42);
reportCompare(0, 0, 'ok');

View File

@ -4,36 +4,6 @@
skip-if(!this.hasOwnProperty("Intl")) include test262/intl402/jstests.list # Intl is not enabled in all builds
skip script ecma_6/String/normalize-generateddata-input.js # input data for other test
###################################################
# Test262 tests skipped due to SpiderMonkey fixes #
###################################################
# These tests assert that function.length is non-configurable. It was
# non-configurable in ES5, but ES6 changes this and we have implemented the
# newer standard (bug 911142).
skip script test262/intl402/ch13/13.1/13.1.1_L15.js
skip script test262/intl402/ch13/13.2/13.2.1_L15.js
skip script test262/intl402/ch13/13.3/13.3.1_L15.js
skip script test262/intl402/ch13/13.3/13.3.2_L15.js
skip script test262/intl402/ch13/13.3/13.3.3_L15.js
skip script test262/intl402/ch10/10.2/10.2.2_L15.js
skip script test262/intl402/ch10/10.3/10.3.2_1_a_L15.js
skip script test262/intl402/ch10/10.3/10.3.3_L15.js
skip script test262/intl402/ch10/10.3/10.3.2_L15.js
skip script test262/intl402/ch10/10.1/10.1_L15.js
skip script test262/intl402/ch11/11.2/11.2.2_L15.js
skip script test262/intl402/ch11/11.1/11.1_L15.js
skip script test262/intl402/ch11/11.3/11.3.3_L15.js
skip script test262/intl402/ch11/11.3/11.3.2_L15.js
skip script test262/intl402/ch11/11.3/11.3.2_1_a_L15.js
skip script test262/intl402/ch12/12.3/12.3.3_L15.js
skip script test262/intl402/ch12/12.3/12.3.2_L15.js
skip script test262/intl402/ch12/12.3/12.3.2_1_a_L15.js
skip script test262/intl402/ch12/12.1/12.1_L15.js
skip script test262/intl402/ch12/12.2/12.2.2_L15.js
skip script test262/ch13/13.2/13.2-15-1.js
skip script test262/ch11/11.4/11.4.1/11.4.1-5-a-28-s.js
##################################################
# Test262 tests skipped due to SpiderMonkey bugs #
##################################################