mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
98 lines
4.2 KiB
Diff
98 lines
4.2 KiB
Diff
diff --git src/builtins/builtins-object-gen.cc src/builtins/builtins-object-gen.cc
|
|
index 1ebfbacf38..3fb8d7792d 100644
|
|
--- src/builtins/builtins-object-gen.cc
|
|
+++ src/builtins/builtins-object-gen.cc
|
|
@@ -268,7 +268,7 @@ TNode<JSArray> ObjectEntriesValuesBuiltinsAssembler::FastGetOwnValuesOrEntries(
|
|
object_enum_length, IntPtrConstant(kInvalidEnumCacheSentinel));
|
|
|
|
// In case, we found enum_cache in object,
|
|
- // we use it as array_length becuase it has same size for
|
|
+ // we use it as array_length because it has same size for
|
|
// Object.(entries/values) result array object length.
|
|
// So object_enum_length use less memory space than
|
|
// NumberOfOwnDescriptorsBits value.
|
|
@@ -285,7 +285,7 @@ TNode<JSArray> ObjectEntriesValuesBuiltinsAssembler::FastGetOwnValuesOrEntries(
|
|
INTPTR_PARAMETERS, kAllowLargeObjectAllocation));
|
|
|
|
// If in case we have enum_cache,
|
|
- // we can't detect accessor of object until loop through descritpros.
|
|
+ // we can't detect accessor of object until loop through descriptors.
|
|
// So if object might have accessor,
|
|
// we will remain invalid addresses of FixedArray.
|
|
// Because in that case, we need to jump to runtime call.
|
|
@@ -299,7 +299,7 @@ TNode<JSArray> ObjectEntriesValuesBuiltinsAssembler::FastGetOwnValuesOrEntries(
|
|
Variable* vars[] = {&var_descriptor_number, &var_result_index};
|
|
// Let desc be ? O.[[GetOwnProperty]](key).
|
|
TNode<DescriptorArray> descriptors = LoadMapDescriptors(map);
|
|
- Label loop(this, 2, vars), after_loop(this), loop_condition(this);
|
|
+ Label loop(this, 2, vars), after_loop(this), next_descriptor(this);
|
|
Branch(IntPtrEqual(var_descriptor_number.value(), object_enum_length),
|
|
&after_loop, &loop);
|
|
|
|
@@ -316,7 +316,7 @@ TNode<JSArray> ObjectEntriesValuesBuiltinsAssembler::FastGetOwnValuesOrEntries(
|
|
Node* next_key = DescriptorArrayGetKey(descriptors, descriptor_index);
|
|
|
|
// Skip Symbols.
|
|
- GotoIf(IsSymbol(next_key), &loop_condition);
|
|
+ GotoIf(IsSymbol(next_key), &next_descriptor);
|
|
|
|
TNode<Uint32T> details = TNode<Uint32T>::UncheckedCast(
|
|
DescriptorArrayGetDetails(descriptors, descriptor_index));
|
|
@@ -326,8 +326,9 @@ TNode<JSArray> ObjectEntriesValuesBuiltinsAssembler::FastGetOwnValuesOrEntries(
|
|
GotoIf(IsPropertyKindAccessor(kind), if_call_runtime_with_fast_path);
|
|
CSA_ASSERT(this, IsPropertyKindData(kind));
|
|
|
|
- // If desc is not undefined and desc.[[Enumerable]] is true, then
|
|
- GotoIfNot(IsPropertyEnumerable(details), &loop_condition);
|
|
+ // If desc is not undefined and desc.[[Enumerable]] is true, then skip to
|
|
+ // the next descriptor.
|
|
+ GotoIfNot(IsPropertyEnumerable(details), &next_descriptor);
|
|
|
|
VARIABLE(var_property_value, MachineRepresentation::kTagged,
|
|
UndefinedConstant());
|
|
@@ -357,12 +358,12 @@ TNode<JSArray> ObjectEntriesValuesBuiltinsAssembler::FastGetOwnValuesOrEntries(
|
|
StoreFixedArrayElement(values_or_entries, var_result_index.value(),
|
|
value);
|
|
Increment(&var_result_index, 1);
|
|
- Goto(&loop_condition);
|
|
+ Goto(&next_descriptor);
|
|
|
|
- BIND(&loop_condition);
|
|
+ BIND(&next_descriptor);
|
|
{
|
|
Increment(&var_descriptor_number, 1);
|
|
- Branch(IntPtrEqual(var_descriptor_number.value(), object_enum_length),
|
|
+ Branch(IntPtrEqual(var_result_index.value(), object_enum_length),
|
|
&after_loop, &loop);
|
|
}
|
|
}
|
|
diff --git test/mjsunit/es8/object-entries.js test/mjsunit/es8/object-entries.js
|
|
index 1c6358648b..51ce4692e4 100644
|
|
--- test/mjsunit/es8/object-entries.js
|
|
+++ test/mjsunit/es8/object-entries.js
|
|
@@ -210,6 +210,24 @@ function TestPropertyFilter(withWarmup) {
|
|
TestPropertyFilter();
|
|
TestPropertyFilter(true);
|
|
|
|
+function TestPropertyFilter2(withWarmup) {
|
|
+ var object = { };
|
|
+ Object.defineProperty(object, "prop1", { value: 10 });
|
|
+ Object.defineProperty(object, "prop2", { value: 20 });
|
|
+ object.prop3 = 30;
|
|
+
|
|
+ if (withWarmup) {
|
|
+ for (const key in object) {}
|
|
+ }
|
|
+
|
|
+ values = Object.entries(object);
|
|
+ assertEquals(1, values.length);
|
|
+ assertEquals([
|
|
+ [ "prop3", 30 ],
|
|
+ ], values);
|
|
+}
|
|
+TestPropertyFilter2();
|
|
+TestPropertyFilter2(true);
|
|
|
|
function TestWithProxy(withWarmup) {
|
|
var obj1 = {prop1:10};
|