Commit f74a85f3 authored by verwaest@chromium.org's avatar verwaest@chromium.org

Don't track representations in context extensions.

This also enables verification of representations.

BUG=
R=jkummerow@chromium.org

Review URL: https://chromiumcodereview.appspot.com/15411003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14735 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent db4a770c
...@@ -306,6 +306,17 @@ void JSObject::JSObjectVerify() { ...@@ -306,6 +306,17 @@ void JSObject::JSObjectVerify() {
CHECK_EQ(map()->unused_property_fields(), CHECK_EQ(map()->unused_property_fields(),
(map()->inobject_properties() + properties()->length() - (map()->inobject_properties() + properties()->length() -
map()->NextFreePropertyIndex())); map()->NextFreePropertyIndex()));
DescriptorArray* descriptors = map()->instance_descriptors();
for (int i = 0; i < map()->NumberOfOwnDescriptors(); i++) {
if (descriptors->GetDetails(i).type() == FIELD) {
Representation r = descriptors->GetDetails(i).representation();
int field = descriptors->GetFieldIndex(i);
Object* value = RawFastPropertyAt(field);
if (r.IsSmi()) ASSERT(value->IsSmi());
if (r.IsDouble()) ASSERT(value->IsHeapNumber());
if (r.IsHeapObject()) ASSERT(value->IsHeapObject());
}
}
} }
CHECK_EQ((map()->has_fast_smi_or_object_elements() || CHECK_EQ((map()->has_fast_smi_or_object_elements() ||
(elements() == GetHeap()->empty_fixed_array())), (elements() == GetHeap()->empty_fixed_array())),
......
...@@ -1801,7 +1801,9 @@ MaybeObject* JSObject::AddFastProperty(Name* name, ...@@ -1801,7 +1801,9 @@ MaybeObject* JSObject::AddFastProperty(Name* name,
int index = map()->NextFreePropertyIndex(); int index = map()->NextFreePropertyIndex();
// Allocate new instance descriptors with (name, index) added // Allocate new instance descriptors with (name, index) added
Representation representation = value->OptimalRepresentation(); Representation representation = IsJSContextExtensionObject()
? Representation::Tagged() : value->OptimalRepresentation();
FieldDescriptor new_field(name, index, attributes, representation); FieldDescriptor new_field(name, index, attributes, representation);
ASSERT(index < map()->inobject_properties() || ASSERT(index < map()->inobject_properties() ||
...@@ -2105,7 +2107,8 @@ MaybeObject* JSObject::ConvertDescriptorToField(Name* name, ...@@ -2105,7 +2107,8 @@ MaybeObject* JSObject::ConvertDescriptorToField(Name* name,
return ReplaceSlowProperty(name, new_value, attributes); return ReplaceSlowProperty(name, new_value, attributes);
} }
Representation representation = new_value->OptimalRepresentation(); Representation representation = IsJSContextExtensionObject()
? Representation::Tagged() : new_value->OptimalRepresentation();
int index = map()->NextFreePropertyIndex(); int index = map()->NextFreePropertyIndex();
FieldDescriptor new_field(name, index, attributes, representation); FieldDescriptor new_field(name, index, attributes, representation);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment