Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index c47e35d3aeabb4be51a4a0d42c1824f875fad45c..75ace335b63a88222c2fa2ca5bfe6ddf64044705 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -255,12 +255,15 @@ static Handle<Object> CreateObjectLiteralBoilerplate( |
for (int index = 0; index < length; index +=2) { |
Handle<Object> key(constant_properties->get(index+0), isolate); |
Handle<Object> value(constant_properties->get(index+1), isolate); |
+ Object::ValueType value_type = Object::REAL_VALUE; |
if (value->IsFixedArray()) { |
// The value contains the constant_properties of a |
// simple object or array literal. |
Handle<FixedArray> array = Handle<FixedArray>::cast(value); |
value = CreateLiteralBoilerplate(isolate, literals, array); |
if (value.is_null()) return value; |
+ } else if (FLAG_track_computed_fields && value->IsUndefined()) { |
+ value_type = Object::PLACEHOLDER_VALUE; |
} |
Handle<Object> result; |
uint32_t element_index = 0; |
@@ -273,7 +276,7 @@ static Handle<Object> CreateObjectLiteralBoilerplate( |
Handle<String> name(String::cast(*key)); |
ASSERT(!name->AsArrayIndex(&element_index)); |
result = JSObject::SetLocalPropertyIgnoreAttributes( |
- boilerplate, name, value, NONE); |
+ boilerplate, name, value, NONE, value_type); |
} |
} else if (key->ToArrayIndex(&element_index)) { |
// Array index (uint32). |
@@ -289,7 +292,7 @@ static Handle<Object> CreateObjectLiteralBoilerplate( |
Handle<String> name = |
isolate->factory()->NewStringFromAscii(CStrVector(str)); |
result = JSObject::SetLocalPropertyIgnoreAttributes( |
- boilerplate, name, value, NONE); |
+ boilerplate, name, value, NONE, value_type); |
} |
// If setting the property on the boilerplate throws an |
// exception, the exception is converted to an empty handle in |