[es6] Function length property should be configurable

ES6 specs the function length property (it was not part of ES5) and
it makes it configurable.

BUG=v8:3045
LOG=N
R=mstarzinger@chromium.org, adamk@chromium.org
CQ_INCLUDE_TRYBOTS=tryserver.chromium.linux:linux_chromium_rel_ng;tryserver.blink:linux_blink_rel

Review URL: https://codereview.chromium.org/993073002

Cr-Commit-Position: refs/heads/master@{#27190}
This commit is contained in:
arv 2015-03-13 10:19:40 -07:00 committed by Commit bot
parent a8289230a3
commit e625844648
11 changed files with 466 additions and 23 deletions

View File

@ -1095,12 +1095,52 @@ void Accessors::FunctionLengthGetter(
} }
MUST_USE_RESULT static MaybeHandle<Object> ReplaceAccessorWithDataProperty(
Isolate* isolate, Handle<JSObject> object, Handle<Name> name,
Handle<Object> value, bool is_observed, Handle<Object> 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<Object> SetFunctionLength(
Isolate* isolate, Handle<JSFunction> function, Handle<Object> value) {
Handle<Object> 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( void Accessors::FunctionLengthSetter(
v8::Local<v8::Name> name, v8::Local<v8::Name> name,
v8::Local<v8::Value> val, v8::Local<v8::Value> val,
const v8::PropertyCallbackInfo<void>& info) { const v8::PropertyCallbackInfo<void>& info) {
// Function length is non writable, non configurable. i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
UNREACHABLE(); HandleScope scope(isolate);
Handle<Object> value = Utils::OpenHandle(*val);
if (SetPropertyOnInstanceIfInherited(isolate, info, name, value)) return;
Handle<JSFunction> object =
Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder()));
if (SetFunctionLength(isolate, object, value).is_null()) {
isolate->OptionalRescheduleException(false);
}
} }
@ -1139,18 +1179,9 @@ MUST_USE_RESULT static MaybeHandle<Object> SetFunctionName(
old_value = handle(function->shared()->name(), isolate); old_value = handle(function->shared()->name(), isolate);
} }
Handle<Name> name = isolate->factory()->name_string(); return ReplaceAccessorWithDataProperty(isolate, function,
LookupIterator it(function, name); isolate->factory()->name_string(),
CHECK_EQ(LookupIterator::ACCESSOR, it.state()); value, is_observed, old_value);
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;
} }

View File

@ -388,10 +388,10 @@ void Genesis::SetFunctionInstanceDescriptor(
static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY); static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY);
Handle<AccessorInfo> length = Handle<AccessorInfo> length =
Accessors::FunctionLengthInfo(isolate(), ro_attribs); Accessors::FunctionLengthInfo(isolate(), roc_attribs);
{ // Add length. { // Add length.
AccessorConstantDescriptor d(Handle<Name>(Name::cast(length->name())), AccessorConstantDescriptor d(Handle<Name>(Name::cast(length->name())),
length, ro_attribs); length, roc_attribs);
map->AppendDescriptor(&d); map->AppendDescriptor(&d);
} }
Handle<AccessorInfo> name = Handle<AccessorInfo> name =
@ -555,9 +555,9 @@ void Genesis::SetStrictFunctionInstanceDescriptor(
function_mode == FUNCTION_WITH_READONLY_PROTOTYPE || function_mode == FUNCTION_WITH_READONLY_PROTOTYPE ||
function_mode == FUNCTION_WITHOUT_PROTOTYPE); function_mode == FUNCTION_WITHOUT_PROTOTYPE);
Handle<AccessorInfo> length = Handle<AccessorInfo> length =
Accessors::FunctionLengthInfo(isolate(), ro_attribs); Accessors::FunctionLengthInfo(isolate(), roc_attribs);
AccessorConstantDescriptor d(Handle<Name>(Name::cast(length->name())), AccessorConstantDescriptor d(Handle<Name>(Name::cast(length->name())),
length, ro_attribs); length, roc_attribs);
map->AppendDescriptor(&d); map->AppendDescriptor(&d);
} }
Handle<AccessorInfo> name = Handle<AccessorInfo> name =

View File

@ -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);
})();

View File

@ -1143,7 +1143,8 @@ function blacklisted(obj, prop) {
return (obj instanceof Int32Array && prop == 1) || return (obj instanceof Int32Array && prop == 1) ||
(obj instanceof Int32Array && prop === "length") || (obj instanceof Int32Array && prop === "length") ||
(obj instanceof ArrayBuffer && prop == 1) || (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) { 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() { (function TestObserveInvalidAcceptMessage() {
var ex; var ex;
try { try {

View File

@ -82,7 +82,8 @@ assertThrows("Object.defineProperty(f, 'prototype', { value: {} })");
// Verify that non-configurability of other properties is respected, but // Verify that non-configurability of other properties is respected, but
// non-writability is ignored by Object.defineProperty(). // non-writability is ignored by Object.defineProperty().
// name and length are configurable in ES6
Object.defineProperty(f, 'name', { value: {} }); 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, 'caller', { value: {} })");
assertThrows("Object.defineProperty(f, 'arguments', { value: {} })"); assertThrows("Object.defineProperty(f, 'arguments', { value: {} })");

View File

@ -37,5 +37,5 @@ var desc = Object.getOwnPropertyDescriptor(foo, 'length');
assertEquals(3, desc.value); assertEquals(3, desc.value);
assertFalse(desc.writable); assertFalse(desc.writable);
assertFalse(desc.enumerable); assertFalse(desc.enumerable);
assertFalse(desc.configurable); assertTrue(desc.configurable);
assertThrows(function() { foo.length = 2; }, TypeError); assertThrows(function() { foo.length = 2; }, TypeError);

View File

@ -61,6 +61,19 @@
# TODO(turbofan): Large switch statements crash. # TODO(turbofan): Large switch statements crash.
'js1_5/Regress/regress-398085-01': [PASS, NO_VARIANTS], '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 ##################### ##################### SKIPPED TESTS #####################
# This test checks that we behave properly in an out-of-memory # This test checks that we behave properly in an out-of-memory

View File

@ -174,6 +174,132 @@
'es6/String.prototype.contains/String.prototype.contains_Success' : [FAIL_OK], 'es6/String.prototype.contains/String.prototype.contains_Success' : [FAIL_OK],
'es6/String.prototype.contains/String.prototype.contains_SuccessNoLocation' : [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 ############################# ############################ SKIPPED TESTS #############################

View File

@ -62,6 +62,133 @@
'11.1.5_4-4-d-3': [FAIL], '11.1.5_4-4-d-3': [FAIL],
'11.1.5_4-4-d-4': [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 ########################### ######################## NEEDS INVESTIGATION ###########################
# These test failures are specific to the intl402 suite and need investigation # These test failures are specific to the intl402 suite and need investigation

View File

@ -39,7 +39,7 @@ PASS Array.prototype.length is 6
PASS Function.prototype.length is 0 PASS Function.prototype.length is 0
PASS String.prototype.length is 0 PASS String.prototype.length is 0
PASS delete Array.prototype.length is false 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 delete String.prototype.length is false
PASS foundArrayPrototypeLength is false PASS foundArrayPrototypeLength is false
PASS foundFunctionPrototypeLength is false PASS foundFunctionPrototypeLength is false

View File

@ -43,7 +43,7 @@ shouldBe("String.prototype.length","0");
// check DontDelete // check DontDelete
shouldBe("delete Array.prototype.length","false"); shouldBe("delete Array.prototype.length","false");
shouldBe("delete Function.prototype.length","false"); shouldBe("delete Function.prototype.length","true");
shouldBe("delete String.prototype.length","false"); shouldBe("delete String.prototype.length","false");
// check DontEnum // check DontEnum