diff --git a/src/accessors.cc b/src/accessors.cc index 51fdee67f2..f774c6db46 100644 --- a/src/accessors.cc +++ b/src/accessors.cc @@ -1095,12 +1095,52 @@ void Accessors::FunctionLengthGetter( } +MUST_USE_RESULT static MaybeHandle ReplaceAccessorWithDataProperty( + Isolate* isolate, Handle object, Handle name, + Handle value, bool is_observed, Handle old_value) { + LookupIterator it(object, name); + CHECK_EQ(LookupIterator::ACCESSOR, it.state()); + DCHECK(it.HolderIsReceiverOrHiddenPrototype()); + it.ReconfigureDataProperty(value, it.property_details().attributes()); + value = it.WriteDataValue(value); + + if (is_observed && !old_value->SameValue(*value)) { + return JSObject::EnqueueChangeRecord(object, "update", name, old_value); + } + + return value; +} + + +MUST_USE_RESULT static MaybeHandle SetFunctionLength( + Isolate* isolate, Handle function, Handle value) { + Handle old_value; + bool is_observed = function->map()->is_observed(); + if (is_observed) { + old_value = handle(Smi::FromInt(function->shared()->length()), isolate); + } + + return ReplaceAccessorWithDataProperty(isolate, function, + isolate->factory()->length_string(), + value, is_observed, old_value); +} + + void Accessors::FunctionLengthSetter( v8::Local name, v8::Local val, const v8::PropertyCallbackInfo& info) { - // Function length is non writable, non configurable. - UNREACHABLE(); + i::Isolate* isolate = reinterpret_cast(info.GetIsolate()); + HandleScope scope(isolate); + Handle value = Utils::OpenHandle(*val); + + if (SetPropertyOnInstanceIfInherited(isolate, info, name, value)) return; + + Handle object = + Handle::cast(Utils::OpenHandle(*info.Holder())); + if (SetFunctionLength(isolate, object, value).is_null()) { + isolate->OptionalRescheduleException(false); + } } @@ -1139,18 +1179,9 @@ MUST_USE_RESULT static MaybeHandle SetFunctionName( old_value = handle(function->shared()->name(), isolate); } - Handle name = isolate->factory()->name_string(); - LookupIterator it(function, name); - CHECK_EQ(LookupIterator::ACCESSOR, it.state()); - DCHECK(it.HolderIsReceiverOrHiddenPrototype()); - it.ReconfigureDataProperty(value, it.property_details().attributes()); - value = it.WriteDataValue(value); - - if (is_observed && !old_value->SameValue(*value)) { - return JSObject::EnqueueChangeRecord(function, "update", name, old_value); - } - - return value; + return ReplaceAccessorWithDataProperty(isolate, function, + isolate->factory()->name_string(), + value, is_observed, old_value); } diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index 02996fa512..9b378b92bb 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -388,10 +388,10 @@ void Genesis::SetFunctionInstanceDescriptor( static_cast(DONT_ENUM | READ_ONLY); Handle length = - Accessors::FunctionLengthInfo(isolate(), ro_attribs); + Accessors::FunctionLengthInfo(isolate(), roc_attribs); { // Add length. AccessorConstantDescriptor d(Handle(Name::cast(length->name())), - length, ro_attribs); + length, roc_attribs); map->AppendDescriptor(&d); } Handle name = @@ -555,9 +555,9 @@ void Genesis::SetStrictFunctionInstanceDescriptor( function_mode == FUNCTION_WITH_READONLY_PROTOTYPE || function_mode == FUNCTION_WITHOUT_PROTOTYPE); Handle length = - Accessors::FunctionLengthInfo(isolate(), ro_attribs); + Accessors::FunctionLengthInfo(isolate(), roc_attribs); AccessorConstantDescriptor d(Handle(Name::cast(length->name())), - length, ro_attribs); + length, roc_attribs); map->AppendDescriptor(&d); } Handle name = diff --git a/test/mjsunit/es6/function-length-configurable.js b/test/mjsunit/es6/function-length-configurable.js new file mode 100644 index 0000000000..e5b51aba20 --- /dev/null +++ b/test/mjsunit/es6/function-length-configurable.js @@ -0,0 +1,119 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +function getStrictF() { + 'use strict'; + return function f(x) {}; +} + + +function getSloppyF() { + return function f(x) {}; +} + + +function getStrictGenerator() { + 'use strict'; + return function* f(x) {}; +} + + +function getSloppyGenerator() { + return function* f(x) {}; +} + + +function test(testFunction) { + testFunction(getStrictF()); + testFunction(getSloppyF()); + testFunction(getStrictGenerator()); + testFunction(getSloppyGenerator()); +} + + +function testDescriptor(f) { + var descr = Object.getOwnPropertyDescriptor(f, 'length'); + assertTrue(descr.configurable); + assertFalse(descr.enumerable); + assertEquals(1, descr.value); + assertFalse(descr.writable); +} +test(testDescriptor); + + +function testSet(f) { + f.length = 2; + assertEquals(1, f.length); +} +test(testSet); + + +function testSetStrict(f) { + 'use strict'; + assertThrows(function() { + f.length = 2; + }, TypeError); +} +test(testSetStrict); + + +function testReconfigureAsDataProperty(f) { + Object.defineProperty(f, 'length', { + value: 2, + }); + assertEquals(2, f.length); + Object.defineProperty(f, 'length', { + writable: true + }); + f.length = 3; + assertEquals(3, f.length); + + f.length = 42; + assertEquals(42, f.length); +} +test(testReconfigureAsDataProperty); + + +function testReconfigureAsAccessorProperty(f) { + var length = 2; + Object.defineProperty(f, 'length', { + get: function() { return length; }, + set: function(v) { length = v; } + }); + assertEquals(2, f.length); + f.length = 3; + assertEquals(3, f.length); +} +test(testReconfigureAsAccessorProperty); + + +(function testSetOnInstance() { + // This needs to come before testDelete below + assertTrue(Function.prototype.hasOwnProperty('length')); + + function f() {} + delete f.length; + assertEquals(0, f.length); + + f.length = 42; + assertEquals(0, f.length); // non writable prototype property. + assertFalse(f.hasOwnProperty('length')); + + Object.defineProperty(Function.prototype, 'length', {writable: true}); + + f.length = 123; + assertTrue(f.hasOwnProperty('length')); + assertEquals(123, f.length); +})(); + + +(function testDelete() { + function f(x) {} + assertTrue(delete f.length); + assertFalse(f.hasOwnProperty('length')); + assertEquals(0, f.length); + + assertTrue(delete Function.prototype.length); + assertEquals(undefined, f.length); +})(); diff --git a/test/mjsunit/es7/object-observe.js b/test/mjsunit/es7/object-observe.js index ad47da5651..b2853c4048 100644 --- a/test/mjsunit/es7/object-observe.js +++ b/test/mjsunit/es7/object-observe.js @@ -1143,7 +1143,8 @@ function blacklisted(obj, prop) { return (obj instanceof Int32Array && prop == 1) || (obj instanceof Int32Array && prop === "length") || (obj instanceof ArrayBuffer && prop == 1) || - (obj instanceof Function && prop === "name"); // Has its own test. + (obj instanceof Function && prop === "name") || // Has its own test. + (obj instanceof Function && prop === "length"); // Has its own test. } for (var i in objects) for (var j in properties) { @@ -1826,6 +1827,31 @@ for (var b1 = 0; b1 < 2; ++b1) })(); +(function TestFunctionLength() { + reset(); + + function fun(x) {} + Object.observe(fun, observer.callback); + fun.length = 'x'; // No change. Not writable. + Object.defineProperty(fun, 'length', {value: 'a'}); + Object.defineProperty(fun, 'length', {writable: true}); + fun.length = 'b'; + delete fun.length; + fun.length = 'x'; // No change. Function.prototype.length is non writable + Object.defineProperty(Function.prototype, 'length', {writable: true}); + fun.length = 'c'; + fun.length = 'c'; // Same, no update. + Object.deliverChangeRecords(observer.callback); + observer.assertCallbackRecords([ + { object: fun, type: 'update', name: 'length', oldValue: 1 }, + { object: fun, type: 'reconfigure', name: 'length'}, + { object: fun, type: 'update', name: 'length', oldValue: 'a' }, + { object: fun, type: 'delete', name: 'length', oldValue: 'b' }, + { object: fun, type: 'add', name: 'length' }, + ]); +})(); + + (function TestObserveInvalidAcceptMessage() { var ex; try { diff --git a/test/mjsunit/regress/regress-1530.js b/test/mjsunit/regress/regress-1530.js index b0daa2c94e..fa86f62ce5 100644 --- a/test/mjsunit/regress/regress-1530.js +++ b/test/mjsunit/regress/regress-1530.js @@ -82,7 +82,8 @@ assertThrows("Object.defineProperty(f, 'prototype', { value: {} })"); // Verify that non-configurability of other properties is respected, but // non-writability is ignored by Object.defineProperty(). +// name and length are configurable in ES6 Object.defineProperty(f, 'name', { value: {} }); -assertThrows("Object.defineProperty(f, 'length', { value: {} })"); +Object.defineProperty(f, 'length', { value: {} }); assertThrows("Object.defineProperty(f, 'caller', { value: {} })"); assertThrows("Object.defineProperty(f, 'arguments', { value: {} })"); diff --git a/test/mjsunit/regress/regress-function-length-strict.js b/test/mjsunit/regress/regress-function-length-strict.js index 700f34a67a..77cca24054 100644 --- a/test/mjsunit/regress/regress-function-length-strict.js +++ b/test/mjsunit/regress/regress-function-length-strict.js @@ -37,5 +37,5 @@ var desc = Object.getOwnPropertyDescriptor(foo, 'length'); assertEquals(3, desc.value); assertFalse(desc.writable); assertFalse(desc.enumerable); -assertFalse(desc.configurable); +assertTrue(desc.configurable); assertThrows(function() { foo.length = 2; }, TypeError); diff --git a/test/mozilla/mozilla.status b/test/mozilla/mozilla.status index 0d6baf0e22..a1254dbd09 100644 --- a/test/mozilla/mozilla.status +++ b/test/mozilla/mozilla.status @@ -61,6 +61,19 @@ # TODO(turbofan): Large switch statements crash. 'js1_5/Regress/regress-398085-01': [PASS, NO_VARIANTS], + ############################ INVALID TESTS ############################# + + # Function length properties are configurable in ES6 + 'ecma/Array/15.4.4.3-1': [FAIL], + 'ecma/Array/15.4.4.4-1': [FAIL], + 'ecma/Array/15.4.4.4-2': [FAIL], + 'ecma/String/15.5.4.10-1': [FAIL], + 'ecma/String/15.5.4.11-1': [FAIL], + 'ecma/String/15.5.4.7-2': [FAIL], + 'ecma/String/15.5.4.8-1': [FAIL], + 'ecma/String/15.5.4.9-1': [FAIL], + + ##################### SKIPPED TESTS ##################### # This test checks that we behave properly in an out-of-memory diff --git a/test/test262-es6/test262-es6.status b/test/test262-es6/test262-es6.status index 5a308d61e5..c004242ce3 100644 --- a/test/test262-es6/test262-es6.status +++ b/test/test262-es6/test262-es6.status @@ -174,6 +174,132 @@ 'es6/String.prototype.contains/String.prototype.contains_Success' : [FAIL_OK], 'es6/String.prototype.contains/String.prototype.contains_SuccessNoLocation' : [FAIL_OK], + # Function length properties are configurable in ES6 + 'ch11/11.4/11.4.1/11.4.1-5-a-28-s': [FAIL], + 'ch13/13.2/13.2-15-1': [FAIL], + 'ch15/15.1/15.1.2/15.1.2.1/S15.1.2.1_A4.2': [FAIL], + 'ch15/15.1/15.1.2/15.1.2.2/S15.1.2.2_A9.2': [FAIL], + 'ch15/15.1/15.1.2/15.1.2.3/S15.1.2.3_A7.2': [FAIL], + 'ch15/15.1/15.1.2/15.1.2.4/S15.1.2.4_A2.2': [FAIL], + 'ch15/15.1/15.1.2/15.1.2.5/S15.1.2.5_A2.2': [FAIL], + 'ch15/15.1/15.1.3/15.1.3.1/S15.1.3.1_A5.2': [FAIL], + 'ch15/15.1/15.1.3/15.1.3.2/S15.1.3.2_A5.2': [FAIL], + 'ch15/15.1/15.1.3/15.1.3.3/S15.1.3.3_A5.2': [FAIL], + 'ch15/15.1/15.1.3/15.1.3.4/S15.1.3.4_A5.2': [FAIL], + 'ch15/15.10/15.10.6/15.10.6.2/S15.10.6.2_A9': [FAIL], + 'ch15/15.10/15.10.6/15.10.6.3/S15.10.6.3_A9': [FAIL], + 'ch15/15.10/15.10.6/15.10.6.4/S15.10.6.4_A9': [FAIL], + 'ch15/15.2/15.2.3/15.2.3.3/15.2.3.3-4-186': [FAIL], + 'ch15/15.2/15.2.3/15.2.3.3/15.2.3.3-4-187': [FAIL], + 'ch15/15.2/15.2.3/15.2.3.3/15.2.3.3-4-191': [FAIL], + 'ch15/15.2/15.2.3/15.2.3.3/15.2.3.3-4-194': [FAIL], + 'ch15/15.2/15.2.3/15.2.3.3/15.2.3.3-4-201': [FAIL], + 'ch15/15.2/15.2.4/15.2.4.2/S15.2.4.2_A9': [FAIL], + 'ch15/15.2/15.2.4/15.2.4.3/S15.2.4.3_A9': [FAIL], + 'ch15/15.2/15.2.4/15.2.4.4/S15.2.4.4_A9': [FAIL], + 'ch15/15.2/15.2.4/15.2.4.5/S15.2.4.5_A9': [FAIL], + 'ch15/15.2/15.2.4/15.2.4.6/S15.2.4.6_A9': [FAIL], + 'ch15/15.2/15.2.4/15.2.4.7/S15.2.4.7_A9': [FAIL], + 'ch15/15.3/15.3.3/15.3.3.2/15.3.3.2-1': [FAIL], + 'ch15/15.3/15.3.4/15.3.4.2/S15.3.4.2_A9': [FAIL], + 'ch15/15.3/15.3.4/15.3.4.3/S15.3.4.3_A9': [FAIL], + 'ch15/15.3/15.3.4/15.3.4.4/S15.3.4.4_A9': [FAIL], + 'ch15/15.3/15.3.5/S15.3.5.1_A2_T1': [FAIL], + 'ch15/15.3/15.3.5/S15.3.5.1_A2_T2': [FAIL], + 'ch15/15.3/15.3.5/S15.3.5.1_A2_T3': [FAIL], + 'ch15/15.4/15.4.3/S15.4.3_A2.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.10/S15.4.4.10_A5.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.11/S15.4.4.11_A7.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.12/S15.4.4.12_A5.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.13/S15.4.4.13_A5.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.2/S15.4.4.2_A4.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.3/S15.4.4.3_A4.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.4/S15.4.4.4_A4.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.5/S15.4.4.5_A6.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.6/S15.4.4.6_A5.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.7/S15.4.4.7_A6.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.8/S15.4.4.8_A5.2': [FAIL], + 'ch15/15.4/15.4.4/15.4.4.9/S15.4.4.9_A5.2': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.10/S15.5.4.10_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.11/S15.5.4.11_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.12/S15.5.4.12_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.13/S15.5.4.13_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.14/S15.5.4.14_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.15/S15.5.4.15_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.16/S15.5.4.16_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.17/S15.5.4.17_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.18/S15.5.4.18_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.19/S15.5.4.19_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.4/S15.5.4.4_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.5/S15.5.4.5_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.6/S15.5.4.6_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.7/S15.5.4.7_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.8/S15.5.4.8_A9': [FAIL], + 'ch15/15.5/15.5.4/15.5.4.9/S15.5.4.9_A9': [FAIL], + 'ch15/15.9/15.9.4/15.9.4.2/S15.9.4.2_A3_T2': [FAIL], + 'ch15/15.9/15.9.4/15.9.4.3/S15.9.4.3_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.1/S15.9.5.1_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.10/S15.9.5.10_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.11/S15.9.5.11_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.12/S15.9.5.12_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.13/S15.9.5.13_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.14/S15.9.5.14_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.15/S15.9.5.15_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.16/S15.9.5.16_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.17/S15.9.5.17_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.18/S15.9.5.18_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.19/S15.9.5.19_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.2/S15.9.5.2_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.20/S15.9.5.20_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.21/S15.9.5.21_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.22/S15.9.5.22_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.23/S15.9.5.23_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.24/S15.9.5.24_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.25/S15.9.5.25_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.26/S15.9.5.26_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.27/S15.9.5.27_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.28/S15.9.5.28_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.29/S15.9.5.29_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.3/S15.9.5.3_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.30/S15.9.5.30_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.31/S15.9.5.31_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.32/S15.9.5.32_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.33/S15.9.5.33_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.34/S15.9.5.34_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.35/S15.9.5.35_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.36/S15.9.5.36_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.37/S15.9.5.37_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.38/S15.9.5.38_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.39/S15.9.5.39_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.4/S15.9.5.4_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.40/S15.9.5.40_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.41/S15.9.5.41_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.42/S15.9.5.42_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.5/S15.9.5.5_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.6/S15.9.5.6_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.7/S15.9.5.7_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.8/S15.9.5.8_A3_T2': [FAIL], + 'ch15/15.9/15.9.5/15.9.5.9/S15.9.5.9_A3_T2': [FAIL], + 'intl402/ch10/10.1/10.1_L15': [FAIL], + 'intl402/ch10/10.2/10.2.2_L15': [FAIL], + 'intl402/ch10/10.3/10.3.2_1_a_L15': [FAIL], + 'intl402/ch10/10.3/10.3.2_L15': [FAIL], + 'intl402/ch10/10.3/10.3.3_L15': [FAIL], + 'intl402/ch11/11.1/11.1_L15': [FAIL], + 'intl402/ch11/11.2/11.2.2_L15': [FAIL], + 'intl402/ch11/11.3/11.3.2_1_a_L15': [FAIL], + 'intl402/ch11/11.3/11.3.2_L15': [FAIL], + 'intl402/ch11/11.3/11.3.3_L15': [FAIL], + 'intl402/ch12/12.1/12.1_L15': [FAIL], + 'intl402/ch12/12.2/12.2.2_L15': [FAIL], + 'intl402/ch12/12.3/12.3.2_1_a_L15': [FAIL], + 'intl402/ch12/12.3/12.3.2_L15': [FAIL], + 'intl402/ch12/12.3/12.3.3_L15': [FAIL], + 'intl402/ch13/13.1/13.1.1_L15': [FAIL], + 'intl402/ch13/13.2/13.2.1_L15': [FAIL], + 'intl402/ch13/13.3/13.3.1_L15': [FAIL], + 'intl402/ch13/13.3/13.3.2_L15': [FAIL], + 'intl402/ch13/13.3/13.3.3_L15': [FAIL], ############################ SKIPPED TESTS ############################# diff --git a/test/test262/test262.status b/test/test262/test262.status index d1800c5fc5..8e7496bc25 100644 --- a/test/test262/test262.status +++ b/test/test262/test262.status @@ -62,6 +62,133 @@ '11.1.5_4-4-d-3': [FAIL], '11.1.5_4-4-d-4': [FAIL], + # Function length properties are configurable in ES6 + '10.1_L15': [FAIL], + '10.2.2_L15': [FAIL], + '10.3.2_1_a_L15': [FAIL], + '10.3.2_L15': [FAIL], + '10.3.3_L15': [FAIL], + '11.1_L15': [FAIL], + '11.2.2_L15': [FAIL], + '11.3.2_1_a_L15': [FAIL], + '11.3.2_L15': [FAIL], + '11.3.3_L15': [FAIL], + '11.4.1-5-a-28-s': [FAIL], + '12.1_L15': [FAIL], + '12.2.2_L15': [FAIL], + '12.3.2_1_a_L15': [FAIL], + '12.3.2_L15': [FAIL], + '12.3.3_L15': [FAIL], + '13.1.1_L15': [FAIL], + '13.2-15-1': [FAIL], + '13.2.1_L15': [FAIL], + '13.3.1_L15': [FAIL], + '13.3.2_L15': [FAIL], + '13.3.3_L15': [FAIL], + '15.2.3.3-4-186': [FAIL], + '15.2.3.3-4-187': [FAIL], + '15.2.3.3-4-191': [FAIL], + '15.2.3.3-4-194': [FAIL], + '15.2.3.3-4-201': [FAIL], + '15.3.3.2-1': [FAIL], + 'S15.1.2.1_A4.2': [FAIL], + 'S15.1.2.2_A9.2': [FAIL], + 'S15.1.2.3_A7.2': [FAIL], + 'S15.1.2.4_A2.2': [FAIL], + 'S15.1.2.5_A2.2': [FAIL], + 'S15.1.3.1_A5.2': [FAIL], + 'S15.1.3.2_A5.2': [FAIL], + 'S15.1.3.3_A5.2': [FAIL], + 'S15.1.3.4_A5.2': [FAIL], + 'S15.10.6.2_A9': [FAIL], + 'S15.10.6.3_A9': [FAIL], + 'S15.10.6.4_A9': [FAIL], + 'S15.2.4.2_A9': [FAIL], + 'S15.2.4.3_A9': [FAIL], + 'S15.2.4.4_A9': [FAIL], + 'S15.2.4.5_A9': [FAIL], + 'S15.2.4.6_A9': [FAIL], + 'S15.2.4.7_A9': [FAIL], + 'S15.3.4.2_A9': [FAIL], + 'S15.3.4.3_A9': [FAIL], + 'S15.3.4.4_A9': [FAIL], + 'S15.3.5.1_A2_T1': [FAIL], + 'S15.3.5.1_A2_T2': [FAIL], + 'S15.3.5.1_A2_T3': [FAIL], + 'S15.4.3_A2.2': [FAIL], + 'S15.4.4.10_A5.2': [FAIL], + 'S15.4.4.11_A7.2': [FAIL], + 'S15.4.4.12_A5.2': [FAIL], + 'S15.4.4.13_A5.2': [FAIL], + 'S15.4.4.2_A4.2': [FAIL], + 'S15.4.4.3_A4.2': [FAIL], + 'S15.4.4.4_A4.2': [FAIL], + 'S15.4.4.5_A6.2': [FAIL], + 'S15.4.4.6_A5.2': [FAIL], + 'S15.4.4.7_A6.2': [FAIL], + 'S15.4.4.8_A5.2': [FAIL], + 'S15.4.4.9_A5.2': [FAIL], + 'S15.5.4.10_A9': [FAIL], + 'S15.5.4.11_A9': [FAIL], + 'S15.5.4.12_A9': [FAIL], + 'S15.5.4.13_A9': [FAIL], + 'S15.5.4.14_A9': [FAIL], + 'S15.5.4.15_A9': [FAIL], + 'S15.5.4.16_A9': [FAIL], + 'S15.5.4.17_A9': [FAIL], + 'S15.5.4.18_A9': [FAIL], + 'S15.5.4.19_A9': [FAIL], + 'S15.5.4.4_A9': [FAIL], + 'S15.5.4.5_A9': [FAIL], + 'S15.5.4.6_A9': [FAIL], + 'S15.5.4.7_A9': [FAIL], + 'S15.5.4.8_A9': [FAIL], + 'S15.5.4.9_A9': [FAIL], + 'S15.9.4.2_A3_T2': [FAIL], + 'S15.9.4.3_A3_T2': [FAIL], + 'S15.9.5.10_A3_T2': [FAIL], + 'S15.9.5.11_A3_T2': [FAIL], + 'S15.9.5.12_A3_T2': [FAIL], + 'S15.9.5.13_A3_T2': [FAIL], + 'S15.9.5.14_A3_T2': [FAIL], + 'S15.9.5.15_A3_T2': [FAIL], + 'S15.9.5.16_A3_T2': [FAIL], + 'S15.9.5.17_A3_T2': [FAIL], + 'S15.9.5.18_A3_T2': [FAIL], + 'S15.9.5.19_A3_T2': [FAIL], + 'S15.9.5.1_A3_T2': [FAIL], + 'S15.9.5.20_A3_T2': [FAIL], + 'S15.9.5.21_A3_T2': [FAIL], + 'S15.9.5.22_A3_T2': [FAIL], + 'S15.9.5.23_A3_T2': [FAIL], + 'S15.9.5.24_A3_T2': [FAIL], + 'S15.9.5.25_A3_T2': [FAIL], + 'S15.9.5.26_A3_T2': [FAIL], + 'S15.9.5.27_A3_T2': [FAIL], + 'S15.9.5.28_A3_T2': [FAIL], + 'S15.9.5.29_A3_T2': [FAIL], + 'S15.9.5.2_A3_T2': [FAIL], + 'S15.9.5.30_A3_T2': [FAIL], + 'S15.9.5.31_A3_T2': [FAIL], + 'S15.9.5.32_A3_T2': [FAIL], + 'S15.9.5.33_A3_T2': [FAIL], + 'S15.9.5.34_A3_T2': [FAIL], + 'S15.9.5.35_A3_T2': [FAIL], + 'S15.9.5.36_A3_T2': [FAIL], + 'S15.9.5.37_A3_T2': [FAIL], + 'S15.9.5.38_A3_T2': [FAIL], + 'S15.9.5.39_A3_T2': [FAIL], + 'S15.9.5.3_A3_T2': [FAIL], + 'S15.9.5.40_A3_T2': [FAIL], + 'S15.9.5.41_A3_T2': [FAIL], + 'S15.9.5.42_A3_T2': [FAIL], + 'S15.9.5.4_A3_T2': [FAIL], + 'S15.9.5.5_A3_T2': [FAIL], + 'S15.9.5.6_A3_T2': [FAIL], + 'S15.9.5.7_A3_T2': [FAIL], + 'S15.9.5.8_A3_T2': [FAIL], + 'S15.9.5.9_A3_T2': [FAIL], + ######################## NEEDS INVESTIGATION ########################### # These test failures are specific to the intl402 suite and need investigation diff --git a/test/webkit/fast/js/kde/prototype_length-expected.txt b/test/webkit/fast/js/kde/prototype_length-expected.txt index 7c4c2e25d8..5cf2bd5db8 100644 --- a/test/webkit/fast/js/kde/prototype_length-expected.txt +++ b/test/webkit/fast/js/kde/prototype_length-expected.txt @@ -39,7 +39,7 @@ PASS Array.prototype.length is 6 PASS Function.prototype.length is 0 PASS String.prototype.length is 0 PASS delete Array.prototype.length is false -PASS delete Function.prototype.length is false +PASS delete Function.prototype.length is true PASS delete String.prototype.length is false PASS foundArrayPrototypeLength is false PASS foundFunctionPrototypeLength is false diff --git a/test/webkit/fast/js/kde/prototype_length.js b/test/webkit/fast/js/kde/prototype_length.js index 4eb888c3da..48357005d1 100644 --- a/test/webkit/fast/js/kde/prototype_length.js +++ b/test/webkit/fast/js/kde/prototype_length.js @@ -43,7 +43,7 @@ shouldBe("String.prototype.length","0"); // check DontDelete shouldBe("delete Array.prototype.length","false"); -shouldBe("delete Function.prototype.length","false"); +shouldBe("delete Function.prototype.length","true"); shouldBe("delete String.prototype.length","false"); // check DontEnum