[es6] JSObject::GetOwnElementKeys should collect String wrapper keys first
This makes Object.getOwnPropertyNames() return the integer keys in the proper order, following the spec: http://www.ecma-international.org/ecma-262/6.0/#sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys BUG=v8:4118 LOG=n Review URL: https://codereview.chromium.org/1228803006 Cr-Commit-Position: refs/heads/master@{#29667}
This commit is contained in:
parent
d940c6d3bc
commit
1e146c0708
@ -12962,6 +12962,23 @@ int JSObject::NumberOfEnumElements() {
|
||||
int JSObject::GetOwnElementKeys(FixedArray* storage,
|
||||
PropertyAttributes filter) {
|
||||
int counter = 0;
|
||||
|
||||
// If this is a String wrapper, add the string indices first,
|
||||
// as they're guaranteed to preced the elements in numerical order
|
||||
// and ascending order is required by ECMA-262, 6th, 9.1.12.
|
||||
if (IsJSValue()) {
|
||||
Object* val = JSValue::cast(this)->value();
|
||||
if (val->IsString()) {
|
||||
String* str = String::cast(val);
|
||||
if (storage) {
|
||||
for (int i = 0; i < str->length(); i++) {
|
||||
storage->set(counter + i, Smi::FromInt(i));
|
||||
}
|
||||
}
|
||||
counter += str->length();
|
||||
}
|
||||
}
|
||||
|
||||
switch (GetElementsKind()) {
|
||||
case FAST_SMI_ELEMENTS:
|
||||
case FAST_ELEMENTS:
|
||||
@ -13068,18 +13085,6 @@ int JSObject::GetOwnElementKeys(FixedArray* storage,
|
||||
}
|
||||
}
|
||||
|
||||
if (this->IsJSValue()) {
|
||||
Object* val = JSValue::cast(this)->value();
|
||||
if (val->IsString()) {
|
||||
String* str = String::cast(val);
|
||||
if (storage) {
|
||||
for (int i = 0; i < str->length(); i++) {
|
||||
storage->set(counter + i, Smi::FromInt(i));
|
||||
}
|
||||
}
|
||||
counter += str->length();
|
||||
}
|
||||
}
|
||||
DCHECK(!storage || storage->length() == counter);
|
||||
return counter;
|
||||
}
|
||||
|
@ -286,9 +286,6 @@
|
||||
'built-ins/Boolean/prototype/valueOf/S15.6.4.3_A1_T1': [FAIL],
|
||||
'built-ins/Boolean/prototype/valueOf/S15.6.4.3_A1_T2': [FAIL],
|
||||
|
||||
# https://code.google.com/p/v8/issues/detail?id=4118
|
||||
'built-ins/Object/getOwnPropertyNames/15.2.3.4-4-44': [FAIL],
|
||||
|
||||
# https://code.google.com/p/v8/issues/detail?id=3087
|
||||
'built-ins/Array/prototype/every/15.4.4.16-3-12': [FAIL],
|
||||
'built-ins/Array/prototype/every/15.4.4.16-3-14': [FAIL],
|
||||
|
Loading…
Reference in New Issue
Block a user