Index: test/cctest/test-field-type-tracking.cc |
diff --git a/test/cctest/test-field-type-tracking.cc b/test/cctest/test-field-type-tracking.cc |
index 7023dfce9a4178ac9c3fbd98e6d5e1651ce14ff0..08248ecf4db20e57e0ea8a81ae66f83f9cecbccf 100644 |
--- a/test/cctest/test-field-type-tracking.cc |
+++ b/test/cctest/test-field-type-tracking.cc |
@@ -73,23 +73,12 @@ static Handle<AccessorPair> CreateAccessorPair(bool with_getter, |
} |
-static bool EqualDetails(DescriptorArray* descriptors, int descriptor, |
- PropertyType type, PropertyAttributes attributes, |
- Representation representation, int field_index = -1) { |
- PropertyDetails details = descriptors->GetDetails(descriptor); |
- if (details.type() != type) return false; |
- if (details.attributes() != attributes) return false; |
- if (!details.representation().Equals(representation)) return false; |
- if (field_index >= 0 && details.field_index() != field_index) return false; |
- return true; |
-} |
- |
- |
class Expectations { |
static const int MAX_PROPERTIES = 10; |
Isolate* isolate_; |
ElementsKind elements_kind_; |
- PropertyType types_[MAX_PROPERTIES]; |
+ PropertyKind kinds_[MAX_PROPERTIES]; |
+ PropertyLocation locations_[MAX_PROPERTIES]; |
PropertyAttributes attributes_[MAX_PROPERTIES]; |
Representation representations_[MAX_PROPERTIES]; |
// FieldType for kField, value for DATA_CONSTANT and getter for |
@@ -110,10 +99,12 @@ class Expectations { |
isolate, |
isolate->object_function()->initial_map()->elements_kind()) {} |
- void Init(int index, PropertyType type, PropertyAttributes attributes, |
- Representation representation, Handle<Object> value) { |
+ void Init(int index, PropertyKind kind, PropertyAttributes attributes, |
+ PropertyLocation location, Representation representation, |
+ Handle<Object> value) { |
CHECK(index < MAX_PROPERTIES); |
- types_[index] = type; |
+ kinds_[index] = kind; |
+ locations_[index] = location; |
attributes_[index] = attributes; |
representations_[index] = representation; |
values_[index] = value; |
@@ -125,29 +116,23 @@ class Expectations { |
for (int i = 0; i < number_of_properties_; i++) { |
os << " " << i << ": "; |
os << "Descriptor @ "; |
- if (types_[i] == ACCESSOR_CONSTANT) { |
+ |
+ if (kinds_[i] == kData) { |
+ os << Brief(*values_[i]); |
+ } else { |
+ // kAccessor |
os << "(get: " << Brief(*values_[i]) |
<< ", set: " << Brief(*setter_values_[i]) << ") "; |
- } else { |
- os << Brief(*values_[i]); |
} |
+ |
os << " ("; |
- switch (types_[i]) { |
- case DATA_CONSTANT: |
- os << "immutable "; |
- // Fall through. |
- case DATA: |
- os << "data"; |
- break; |
- |
- case ACCESSOR_CONSTANT: |
- os << "immutable "; |
- // Fall through. |
- case ACCESSOR: |
- os << "accessor"; |
- break; |
+ os << (kinds_[i] == kData ? "data " : "accessor "); |
+ if (locations_[i] == kField) { |
+ os << "field" |
+ << ": " << representations_[i].Mnemonic(); |
+ } else { |
+ os << "descriptor"; |
} |
- os << ": " << representations_[i].Mnemonic(); |
os << ", attrs: " << attributes_[i] << ")\n"; |
} |
os << "\n"; |
@@ -159,22 +144,23 @@ class Expectations { |
Handle<FieldType> GetFieldType(int index) { |
CHECK(index < MAX_PROPERTIES); |
- CHECK(types_[index] == DATA || types_[index] == ACCESSOR); |
+ CHECK_EQ(kField, locations_[index]); |
return Handle<FieldType>::cast(values_[index]); |
} |
void SetDataField(int index, PropertyAttributes attrs, |
- Representation representation, Handle<FieldType> value) { |
- Init(index, DATA, attrs, representation, value); |
+ Representation representation, |
+ Handle<FieldType> field_type) { |
+ Init(index, kData, attrs, kField, representation, field_type); |
} |
void SetDataField(int index, Representation representation, |
- Handle<FieldType> value) { |
- SetDataField(index, attributes_[index], representation, value); |
+ Handle<FieldType> field_type) { |
+ SetDataField(index, attributes_[index], representation, field_type); |
} |
void SetAccessorField(int index, PropertyAttributes attrs) { |
- Init(index, ACCESSOR, attrs, Representation::Tagged(), |
+ Init(index, kAccessor, attrs, kDescriptor, Representation::Tagged(), |
FieldType::Any(isolate_)); |
} |
@@ -184,7 +170,7 @@ class Expectations { |
void SetDataConstant(int index, PropertyAttributes attrs, |
Handle<JSFunction> value) { |
- Init(index, DATA_CONSTANT, attrs, Representation::HeapObject(), value); |
+ Init(index, kData, attrs, kDescriptor, Representation::HeapObject(), value); |
} |
void SetDataConstant(int index, Handle<JSFunction> value) { |
@@ -193,14 +179,16 @@ class Expectations { |
void SetAccessorConstant(int index, PropertyAttributes attrs, |
Handle<Object> getter, Handle<Object> setter) { |
- Init(index, ACCESSOR_CONSTANT, attrs, Representation::Tagged(), getter); |
+ Init(index, kAccessor, attrs, kDescriptor, Representation::Tagged(), |
+ getter); |
setter_values_[index] = setter; |
} |
void SetAccessorConstantComponent(int index, PropertyAttributes attrs, |
AccessorComponent component, |
Handle<Object> accessor) { |
- CHECK_EQ(ACCESSOR_CONSTANT, types_[index]); |
+ CHECK_EQ(kAccessor, kinds_[index]); |
+ CHECK_EQ(kDescriptor, locations_[index]); |
CHECK(index < number_of_properties_); |
if (component == ACCESSOR_GETTER) { |
values_[index] = accessor; |
@@ -230,31 +218,41 @@ class Expectations { |
void GeneralizeRepresentation(int index) { |
CHECK(index < number_of_properties_); |
representations_[index] = Representation::Tagged(); |
- if (types_[index] == DATA || types_[index] == ACCESSOR) { |
+ if (locations_[index] == kField) { |
values_[index] = FieldType::Any(isolate_); |
} |
} |
bool Check(DescriptorArray* descriptors, int descriptor) const { |
- PropertyType type = types_[descriptor]; |
- if (!EqualDetails(descriptors, descriptor, type, attributes_[descriptor], |
- representations_[descriptor])) { |
- return false; |
- } |
+ PropertyDetails details = descriptors->GetDetails(descriptor); |
+ |
+ if (details.kind() != kinds_[descriptor]) return false; |
+ if (details.location() != locations_[descriptor]) return false; |
+ |
+ PropertyAttributes expected_attributes = attributes_[descriptor]; |
+ if (details.attributes() != expected_attributes) return false; |
+ |
+ Representation expected_representation = representations_[descriptor]; |
+ if (!details.representation().Equals(expected_representation)) return false; |
+ |
Object* value = descriptors->GetValue(descriptor); |
Object* expected_value = *values_[descriptor]; |
- switch (type) { |
- case DATA: |
- case ACCESSOR: { |
+ if (details.location() == kField) { |
+ if (details.kind() == kData) { |
FieldType* type = descriptors->GetFieldType(descriptor); |
return FieldType::cast(expected_value) == type; |
+ } else { |
+ // kAccessor |
+ UNREACHABLE(); |
+ return false; |
} |
- |
- case DATA_CONSTANT: |
+ } else { |
+ // kDescriptor |
+ if (details.kind() == kData) { |
return value == expected_value; |
- |
- case ACCESSOR_CONSTANT: { |
+ } else { |
+ // kAccessor |
if (value == expected_value) return true; |
if (!value->IsAccessorPair()) return false; |
AccessorPair* pair = AccessorPair::cast(value); |