| Index: src/runtime.cc
|
| ===================================================================
|
| --- src/runtime.cc (revision 2285)
|
| +++ src/runtime.cc (working copy)
|
| @@ -618,9 +618,6 @@
|
| // property as read-only, so we don't either.
|
| PropertyAttributes base = is_eval ? NONE : DONT_DELETE;
|
|
|
| - // Only optimize the object if we intend to add more than 5 properties.
|
| - OptimizedObjectForAddingMultipleProperties ba(global, pairs->length()/2 > 5);
|
| -
|
| // Traverse the name/value pairs and set the properties.
|
| int length = pairs->length();
|
| for (int i = 0; i < length; i += 2) {
|
| @@ -932,10 +929,8 @@
|
| properties->set(index, *value);
|
| }
|
| } else if (type == NORMAL) {
|
| - Dictionary* dictionary = global->property_dictionary();
|
| - int entry = lookup.GetDictionaryEntry();
|
| - if (dictionary->ValueAt(entry)->IsTheHole()) {
|
| - dictionary->ValueAtPut(entry, *value);
|
| + if (global->GetNormalizedProperty(&lookup)->IsTheHole()) {
|
| + global->SetNormalizedProperty(&lookup, *value);
|
| }
|
| } else {
|
| // Ignore re-initialization of constants that have already been
|
| @@ -1025,10 +1020,8 @@
|
| properties->set(index, *value);
|
| }
|
| } else if (type == NORMAL) {
|
| - Dictionary* dictionary = context_ext->property_dictionary();
|
| - int entry = lookup.GetDictionaryEntry();
|
| - if (dictionary->ValueAt(entry)->IsTheHole()) {
|
| - dictionary->ValueAtPut(entry, *value);
|
| + if (context_ext->GetNormalizedProperty(&lookup)->IsTheHole()) {
|
| + context_ext->SetNormalizedProperty(&lookup, *value);
|
| }
|
| } else {
|
| // We should not reach here. Any real, named property should be
|
| @@ -2640,9 +2633,13 @@
|
| // Attempt dictionary lookup.
|
| Dictionary* dictionary = receiver->property_dictionary();
|
| int entry = dictionary->FindStringEntry(key);
|
| - if ((entry != DescriptorArray::kNotFound) &&
|
| + if ((entry != Dictionary::kNotFound) &&
|
| (dictionary->DetailsAt(entry).type() == NORMAL)) {
|
| - return dictionary->ValueAt(entry);
|
| + Object* value = dictionary->ValueAt(entry);
|
| + if (receiver->IsJSGlobalObject()) {
|
| + value = JSGlobalPropertyCell::cast(value)->value();
|
| + }
|
| + return value;
|
| }
|
| }
|
| }
|
| @@ -5560,15 +5557,12 @@
|
| bool* caught_exception) {
|
| Object* value;
|
| switch (result->type()) {
|
| - case NORMAL: {
|
| - Dictionary* dict =
|
| - JSObject::cast(result->holder())->property_dictionary();
|
| - value = dict->ValueAt(result->GetDictionaryEntry());
|
| + case NORMAL:
|
| + value = result->holder()->GetNormalizedProperty(result);
|
| if (value->IsTheHole()) {
|
| return Heap::undefined_value();
|
| }
|
| return value;
|
| - }
|
| case FIELD:
|
| value =
|
| JSObject::cast(
|
|
|