Index: test/cctest/test-unboxed-doubles.cc |
diff --git a/test/cctest/test-unboxed-doubles.cc b/test/cctest/test-unboxed-doubles.cc |
index 81ca9992879cbe5591b1d6b4e53a9e9722659830..7b466621e32d601f8cb60ff75376ca0e77b2329b 100644 |
--- a/test/cctest/test-unboxed-doubles.cc |
+++ b/test/cctest/test-unboxed-doubles.cc |
@@ -7,6 +7,7 @@ |
#include "src/v8.h" |
+#include "src/accessors.h" |
#include "src/compilation-cache.h" |
#include "src/execution.h" |
#include "src/factory.h" |
@@ -78,9 +79,8 @@ void WriteToField(JSObject* object, int descriptor, Object* value) { |
const int kNumberOfBits = 32; |
- |
enum TestPropertyKind { |
- PROP_CONSTANT, |
+ PROP_ACCESSOR_INFO, |
PROP_SMI, |
PROP_DOUBLE, |
PROP_TAGGED, |
@@ -97,9 +97,6 @@ static Handle<DescriptorArray> CreateDescriptorArray(Isolate* isolate, |
int kPropsCount) { |
Factory* factory = isolate->factory(); |
- Handle<String> func_name = factory->InternalizeUtf8String("func"); |
- Handle<JSFunction> func = factory->NewFunction(func_name); |
- |
Handle<DescriptorArray> descriptors = |
DescriptorArray::Allocate(isolate, 0, kPropsCount); |
@@ -111,15 +108,20 @@ static Handle<DescriptorArray> CreateDescriptorArray(Isolate* isolate, |
TestPropertyKind kind = props[i]; |
- if (kind == PROP_CONSTANT) { |
- Descriptor d = Descriptor::DataConstant(name, func, NONE); |
- descriptors->Append(&d); |
+ Descriptor d; |
+ if (kind == PROP_ACCESSOR_INFO) { |
+ Handle<AccessorInfo> info = |
+ Accessors::MakeAccessor(isolate, name, nullptr, nullptr, NONE); |
+ d = Descriptor::AccessorConstant(name, info, NONE); |
} else { |
- Descriptor d = Descriptor::DataField(name, next_field_offset, NONE, |
- representations[kind]); |
- next_field_offset += d.GetDetails().field_width_in_words(); |
- descriptors->Append(&d); |
+ d = Descriptor::DataField(name, next_field_offset, NONE, |
+ representations[kind]); |
+ } |
+ descriptors->Append(&d); |
+ PropertyDetails details = d.GetDetails(); |
+ if (details.location() == kField) { |
+ next_field_offset += details.field_width_in_words(); |
} |
} |
return descriptors; |
@@ -488,13 +490,13 @@ TEST(LayoutDescriptorCreateNewFast) { |
Handle<LayoutDescriptor> layout_descriptor; |
TestPropertyKind props[] = { |
- PROP_CONSTANT, |
+ PROP_ACCESSOR_INFO, |
PROP_TAGGED, // field #0 |
- PROP_CONSTANT, |
+ PROP_ACCESSOR_INFO, |
PROP_DOUBLE, // field #1 |
- PROP_CONSTANT, |
+ PROP_ACCESSOR_INFO, |
PROP_TAGGED, // field #2 |
- PROP_CONSTANT, |
+ PROP_ACCESSOR_INFO, |
}; |
const int kPropsCount = arraysize(props); |
@@ -616,9 +618,6 @@ static Handle<LayoutDescriptor> TestLayoutDescriptorAppend( |
int kPropsCount) { |
Factory* factory = isolate->factory(); |
- Handle<String> func_name = factory->InternalizeUtf8String("func"); |
- Handle<JSFunction> func = factory->NewFunction(func_name); |
- |
Handle<DescriptorArray> descriptors = |
DescriptorArray::Allocate(isolate, 0, kPropsCount); |
@@ -634,20 +633,24 @@ static Handle<LayoutDescriptor> TestLayoutDescriptorAppend( |
Handle<LayoutDescriptor> layout_descriptor; |
TestPropertyKind kind = props[i]; |
- if (kind == PROP_CONSTANT) { |
- Descriptor d = Descriptor::DataConstant(name, func, NONE); |
- layout_descriptor = LayoutDescriptor::ShareAppend(map, d.GetDetails()); |
- descriptors->Append(&d); |
+ Descriptor d; |
+ if (kind == PROP_ACCESSOR_INFO) { |
+ Handle<AccessorInfo> info = |
+ Accessors::MakeAccessor(isolate, name, nullptr, nullptr, NONE); |
+ d = Descriptor::AccessorConstant(name, info, NONE); |
} else { |
- Descriptor d = Descriptor::DataField(name, next_field_offset, NONE, |
- representations[kind]); |
- int field_width_in_words = d.GetDetails().field_width_in_words(); |
+ d = Descriptor::DataField(name, next_field_offset, NONE, |
+ representations[kind]); |
+ } |
+ PropertyDetails details = d.GetDetails(); |
+ layout_descriptor = LayoutDescriptor::ShareAppend(map, details); |
+ descriptors->Append(&d); |
+ if (details.location() == kField) { |
+ int field_width_in_words = details.field_width_in_words(); |
next_field_offset += field_width_in_words; |
- layout_descriptor = LayoutDescriptor::ShareAppend(map, d.GetDetails()); |
- descriptors->Append(&d); |
- int field_index = d.GetDetails().field_index(); |
+ int field_index = details.field_index(); |
bool is_inobject = field_index < map->GetInObjectProperties(); |
for (int bit = 0; bit < field_width_in_words; bit++) { |
CHECK_EQ(is_inobject && (kind == PROP_DOUBLE), |
@@ -958,13 +961,14 @@ TEST(DescriptorArrayTrimming) { |
Handle<FieldType> any_type = FieldType::Any(isolate); |
Handle<Map> map = Map::Create(isolate, kFieldCount); |
for (int i = 0; i < kSplitFieldIndex; i++) { |
- map = Map::CopyWithField(map, MakeName("prop", i), any_type, NONE, |
- Representation::Smi(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ map = Map::CopyWithField(map, MakeName("prop", i), any_type, NONE, kMutable, |
+ Representation::Smi(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
} |
- map = Map::CopyWithField(map, MakeName("dbl", kSplitFieldIndex), any_type, |
- NONE, Representation::Double(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ map = |
+ Map::CopyWithField(map, MakeName("dbl", kSplitFieldIndex), any_type, NONE, |
+ kMutable, Representation::Double(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
CHECK(map->layout_descriptor()->IsConsistentWithMap(*map, true)); |
CHECK(map->layout_descriptor()->IsSlowLayout()); |
CHECK(map->owns_descriptors()); |
@@ -977,8 +981,9 @@ TEST(DescriptorArrayTrimming) { |
Handle<Map> tmp_map = map; |
for (int i = kSplitFieldIndex + 1; i < kFieldCount; i++) { |
tmp_map = Map::CopyWithField(tmp_map, MakeName("dbl", i), any_type, NONE, |
- Representation::Double(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ kMutable, Representation::Double(), |
+ INSERT_TRANSITION) |
+ .ToHandleChecked(); |
CHECK(tmp_map->layout_descriptor()->IsConsistentWithMap(*tmp_map, true)); |
} |
// Check that descriptors are shared. |
@@ -1016,13 +1021,15 @@ TEST(DescriptorArrayTrimming) { |
Handle<Map> tmp_map = map; |
for (int i = kSplitFieldIndex + 1; i < kFieldCount - 1; i++) { |
tmp_map = Map::CopyWithField(tmp_map, MakeName("tagged", i), any_type, |
- NONE, Representation::Tagged(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ NONE, kMutable, Representation::Tagged(), |
+ INSERT_TRANSITION) |
+ .ToHandleChecked(); |
CHECK(tmp_map->layout_descriptor()->IsConsistentWithMap(*tmp_map, true)); |
} |
- tmp_map = Map::CopyWithField(tmp_map, MakeString("dbl"), any_type, NONE, |
- Representation::Double(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ tmp_map = |
+ Map::CopyWithField(tmp_map, MakeString("dbl"), any_type, NONE, kMutable, |
+ Representation::Double(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
CHECK(tmp_map->layout_descriptor()->IsConsistentWithMap(*tmp_map, true)); |
// Check that descriptors are shared. |
CHECK(tmp_map->owns_descriptors()); |
@@ -1045,9 +1052,9 @@ TEST(DoScavenge) { |
Handle<FieldType> any_type = FieldType::Any(isolate); |
Handle<Map> map = Map::Create(isolate, 10); |
- map = Map::CopyWithField(map, MakeName("prop", 0), any_type, NONE, |
- Representation::Double(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ map = Map::CopyWithField(map, MakeName("prop", 0), any_type, NONE, kMutable, |
+ Representation::Double(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
// Create object in new space. |
Handle<JSObject> obj = factory->NewJSObjectFromMap(map, NOT_TENURED); |
@@ -1107,12 +1114,12 @@ TEST(DoScavengeWithIncrementalWriteBarrier) { |
Handle<FieldType> any_type = FieldType::Any(isolate); |
Handle<Map> map = Map::Create(isolate, 10); |
- map = Map::CopyWithField(map, MakeName("prop", 0), any_type, NONE, |
- Representation::Double(), |
- INSERT_TRANSITION).ToHandleChecked(); |
- map = Map::CopyWithField(map, MakeName("prop", 1), any_type, NONE, |
- Representation::Tagged(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ map = Map::CopyWithField(map, MakeName("prop", 0), any_type, NONE, kMutable, |
+ Representation::Double(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
+ map = Map::CopyWithField(map, MakeName("prop", 1), any_type, NONE, kMutable, |
+ Representation::Tagged(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
// Create |obj_value| in old space. |
Handle<HeapObject> obj_value; |
@@ -1335,12 +1342,14 @@ TEST(LayoutDescriptorSharing) { |
Handle<Map> map = Map::Create(isolate, 64); |
for (int i = 0; i < 32; i++) { |
Handle<String> name = MakeName("prop", i); |
- map = Map::CopyWithField(map, name, any_type, NONE, Representation::Smi(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ map = Map::CopyWithField(map, name, any_type, NONE, kMutable, |
+ Representation::Smi(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
} |
- split_map = Map::CopyWithField(map, MakeString("dbl"), any_type, NONE, |
- Representation::Double(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ split_map = |
+ Map::CopyWithField(map, MakeString("dbl"), any_type, NONE, kMutable, |
+ Representation::Double(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
} |
Handle<LayoutDescriptor> split_layout_descriptor( |
split_map->layout_descriptor(), isolate); |
@@ -1348,9 +1357,10 @@ TEST(LayoutDescriptorSharing) { |
CHECK(split_layout_descriptor->IsSlowLayout()); |
CHECK(split_map->owns_descriptors()); |
- Handle<Map> map1 = Map::CopyWithField(split_map, MakeString("foo"), any_type, |
- NONE, Representation::Double(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ Handle<Map> map1 = |
+ Map::CopyWithField(split_map, MakeString("foo"), any_type, NONE, kMutable, |
+ Representation::Double(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
CHECK(!split_map->owns_descriptors()); |
CHECK_EQ(*split_layout_descriptor, split_map->layout_descriptor()); |
@@ -1359,9 +1369,10 @@ TEST(LayoutDescriptorSharing) { |
CHECK_EQ(*split_layout_descriptor, map1->layout_descriptor()); |
CHECK(map1->layout_descriptor()->IsConsistentWithMap(*map1, true)); |
- Handle<Map> map2 = Map::CopyWithField(split_map, MakeString("bar"), any_type, |
- NONE, Representation::Tagged(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ Handle<Map> map2 = |
+ Map::CopyWithField(split_map, MakeString("bar"), any_type, NONE, kMutable, |
+ Representation::Tagged(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
// Layout descriptors should not be shared with |split_map|. |
CHECK(map2->owns_descriptors()); |
@@ -1531,12 +1542,12 @@ static void TestWriteBarrierObjectShiftFieldsRight( |
Handle<Map> map = Map::Create(isolate, 10); |
map = Map::CopyWithConstant(map, MakeName("prop", 0), func, NONE, |
INSERT_TRANSITION).ToHandleChecked(); |
- map = Map::CopyWithField(map, MakeName("prop", 1), any_type, NONE, |
- Representation::Double(), |
- INSERT_TRANSITION).ToHandleChecked(); |
- map = Map::CopyWithField(map, MakeName("prop", 2), any_type, NONE, |
- Representation::Tagged(), |
- INSERT_TRANSITION).ToHandleChecked(); |
+ map = Map::CopyWithField(map, MakeName("prop", 1), any_type, NONE, kMutable, |
+ Representation::Double(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
+ map = Map::CopyWithField(map, MakeName("prop", 2), any_type, NONE, kMutable, |
+ Representation::Tagged(), INSERT_TRANSITION) |
+ .ToHandleChecked(); |
// Shift fields right by turning constant property to a field. |
Handle<Map> new_map = Map::ReconfigureProperty( |