| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 626 if (object->IsGlobalObject()) { | 626 if (object->IsGlobalObject()) { |
| 627 Handle<PropertyCell> cell(PropertyCell::cast( | 627 Handle<PropertyCell> cell(PropertyCell::cast( |
| 628 property_dictionary->ValueAt(result->GetDictionaryEntry()))); | 628 property_dictionary->ValueAt(result->GetDictionaryEntry()))); |
| 629 PropertyCell::SetValueInferType(cell, value); | 629 PropertyCell::SetValueInferType(cell, value); |
| 630 } else { | 630 } else { |
| 631 property_dictionary->ValueAtPut(result->GetDictionaryEntry(), *value); | 631 property_dictionary->ValueAtPut(result->GetDictionaryEntry(), *value); |
| 632 } | 632 } |
| 633 } | 633 } |
| 634 | 634 |
| 635 | 635 |
| 636 // TODO(mstarzinger): Temporary wrapper until handlified. | |
| 637 static Handle<NameDictionary> NameDictionaryAdd(Handle<NameDictionary> dict, | |
| 638 Handle<Name> name, | |
| 639 Handle<Object> value, | |
| 640 PropertyDetails details) { | |
| 641 CALL_HEAP_FUNCTION(dict->GetIsolate(), | |
| 642 dict->Add(*name, *value, details), | |
| 643 NameDictionary); | |
| 644 } | |
| 645 | |
| 646 | |
| 647 void JSObject::SetNormalizedProperty(Handle<JSObject> object, | 636 void JSObject::SetNormalizedProperty(Handle<JSObject> object, |
| 648 Handle<Name> name, | 637 Handle<Name> name, |
| 649 Handle<Object> value, | 638 Handle<Object> value, |
| 650 PropertyDetails details) { | 639 PropertyDetails details) { |
| 651 ASSERT(!object->HasFastProperties()); | 640 ASSERT(!object->HasFastProperties()); |
| 652 Handle<NameDictionary> property_dictionary(object->property_dictionary()); | 641 Handle<NameDictionary> property_dictionary(object->property_dictionary()); |
| 653 | 642 |
| 654 if (!name->IsUniqueName()) { | 643 if (!name->IsUniqueName()) { |
| 655 name = object->GetIsolate()->factory()->InternalizeString( | 644 name = object->GetIsolate()->factory()->InternalizeString( |
| 656 Handle<String>::cast(name)); | 645 Handle<String>::cast(name)); |
| 657 } | 646 } |
| 658 | 647 |
| 659 int entry = property_dictionary->FindEntry(*name); | 648 int entry = property_dictionary->FindEntry(*name); |
| 660 if (entry == NameDictionary::kNotFound) { | 649 if (entry == NameDictionary::kNotFound) { |
| 661 Handle<Object> store_value = value; | 650 Handle<Object> store_value = value; |
| 662 if (object->IsGlobalObject()) { | 651 if (object->IsGlobalObject()) { |
| 663 store_value = object->GetIsolate()->factory()->NewPropertyCell(value); | 652 store_value = object->GetIsolate()->factory()->NewPropertyCell(value); |
| 664 } | 653 } |
| 665 | 654 |
| 666 property_dictionary = | 655 property_dictionary = |
| 667 NameDictionaryAdd(property_dictionary, name, store_value, details); | 656 NameDictionary::Add(property_dictionary, name, store_value, details); |
| 668 object->set_properties(*property_dictionary); | 657 object->set_properties(*property_dictionary); |
| 669 return; | 658 return; |
| 670 } | 659 } |
| 671 | 660 |
| 672 PropertyDetails original_details = property_dictionary->DetailsAt(entry); | 661 PropertyDetails original_details = property_dictionary->DetailsAt(entry); |
| 673 int enumeration_index; | 662 int enumeration_index; |
| 674 // Preserve the enumeration index unless the property was deleted. | 663 // Preserve the enumeration index unless the property was deleted. |
| 675 if (original_details.IsDeleted()) { | 664 if (original_details.IsDeleted()) { |
| 676 enumeration_index = property_dictionary->NextEnumerationIndex(); | 665 enumeration_index = property_dictionary->NextEnumerationIndex(); |
| 677 property_dictionary->SetNextEnumerationIndex(enumeration_index + 1); | 666 property_dictionary->SetNextEnumerationIndex(enumeration_index + 1); |
| (...skipping 1259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1937 PropertyDetails details = PropertyDetails(attributes, NORMAL, index); | 1926 PropertyDetails details = PropertyDetails(attributes, NORMAL, index); |
| 1938 dict->SetNextEnumerationIndex(index + 1); | 1927 dict->SetNextEnumerationIndex(index + 1); |
| 1939 dict->SetEntry(entry, *name, *cell, details); | 1928 dict->SetEntry(entry, *name, *cell, details); |
| 1940 return; | 1929 return; |
| 1941 } | 1930 } |
| 1942 Handle<PropertyCell> cell = isolate->factory()->NewPropertyCell(value); | 1931 Handle<PropertyCell> cell = isolate->factory()->NewPropertyCell(value); |
| 1943 PropertyCell::SetValueInferType(cell, value); | 1932 PropertyCell::SetValueInferType(cell, value); |
| 1944 value = cell; | 1933 value = cell; |
| 1945 } | 1934 } |
| 1946 PropertyDetails details = PropertyDetails(attributes, NORMAL, 0); | 1935 PropertyDetails details = PropertyDetails(attributes, NORMAL, 0); |
| 1947 Handle<NameDictionary> result = NameDictionaryAdd(dict, name, value, details); | 1936 Handle<NameDictionary> result = |
| 1937 NameDictionary::Add(dict, name, value, details); |
| 1948 if (*dict != *result) object->set_properties(*result); | 1938 if (*dict != *result) object->set_properties(*result); |
| 1949 } | 1939 } |
| 1950 | 1940 |
| 1951 | 1941 |
| 1952 MaybeHandle<Object> JSObject::AddProperty( | 1942 MaybeHandle<Object> JSObject::AddProperty( |
| 1953 Handle<JSObject> object, | 1943 Handle<JSObject> object, |
| 1954 Handle<Name> name, | 1944 Handle<Name> name, |
| 1955 Handle<Object> value, | 1945 Handle<Object> value, |
| 1956 PropertyAttributes attributes, | 1946 PropertyAttributes attributes, |
| 1957 StrictMode strict_mode, | 1947 StrictMode strict_mode, |
| (...skipping 2538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4496 | 4486 |
| 4497 Handle<DescriptorArray> descs(map->instance_descriptors()); | 4487 Handle<DescriptorArray> descs(map->instance_descriptors()); |
| 4498 for (int i = 0; i < real_size; i++) { | 4488 for (int i = 0; i < real_size; i++) { |
| 4499 PropertyDetails details = descs->GetDetails(i); | 4489 PropertyDetails details = descs->GetDetails(i); |
| 4500 switch (details.type()) { | 4490 switch (details.type()) { |
| 4501 case CONSTANT: { | 4491 case CONSTANT: { |
| 4502 Handle<Name> key(descs->GetKey(i)); | 4492 Handle<Name> key(descs->GetKey(i)); |
| 4503 Handle<Object> value(descs->GetConstant(i), isolate); | 4493 Handle<Object> value(descs->GetConstant(i), isolate); |
| 4504 PropertyDetails d = PropertyDetails( | 4494 PropertyDetails d = PropertyDetails( |
| 4505 details.attributes(), NORMAL, i + 1); | 4495 details.attributes(), NORMAL, i + 1); |
| 4506 dictionary = NameDictionaryAdd(dictionary, key, value, d); | 4496 dictionary = NameDictionary::Add(dictionary, key, value, d); |
| 4507 break; | 4497 break; |
| 4508 } | 4498 } |
| 4509 case FIELD: { | 4499 case FIELD: { |
| 4510 Handle<Name> key(descs->GetKey(i)); | 4500 Handle<Name> key(descs->GetKey(i)); |
| 4511 Handle<Object> value( | 4501 Handle<Object> value( |
| 4512 object->RawFastPropertyAt(descs->GetFieldIndex(i)), isolate); | 4502 object->RawFastPropertyAt(descs->GetFieldIndex(i)), isolate); |
| 4513 PropertyDetails d = | 4503 PropertyDetails d = |
| 4514 PropertyDetails(details.attributes(), NORMAL, i + 1); | 4504 PropertyDetails(details.attributes(), NORMAL, i + 1); |
| 4515 dictionary = NameDictionaryAdd(dictionary, key, value, d); | 4505 dictionary = NameDictionary::Add(dictionary, key, value, d); |
| 4516 break; | 4506 break; |
| 4517 } | 4507 } |
| 4518 case CALLBACKS: { | 4508 case CALLBACKS: { |
| 4519 Handle<Name> key(descs->GetKey(i)); | 4509 Handle<Name> key(descs->GetKey(i)); |
| 4520 Handle<Object> value(descs->GetCallbacksObject(i), isolate); | 4510 Handle<Object> value(descs->GetCallbacksObject(i), isolate); |
| 4521 PropertyDetails d = PropertyDetails( | 4511 PropertyDetails d = PropertyDetails( |
| 4522 details.attributes(), CALLBACKS, i + 1); | 4512 details.attributes(), CALLBACKS, i + 1); |
| 4523 dictionary = NameDictionaryAdd(dictionary, key, value, d); | 4513 dictionary = NameDictionary::Add(dictionary, key, value, d); |
| 4524 break; | 4514 break; |
| 4525 } | 4515 } |
| 4526 case INTERCEPTOR: | 4516 case INTERCEPTOR: |
| 4527 break; | 4517 break; |
| 4528 case HANDLER: | 4518 case HANDLER: |
| 4529 case NORMAL: | 4519 case NORMAL: |
| 4530 case NONEXISTENT: | 4520 case NONEXISTENT: |
| 4531 UNREACHABLE(); | 4521 UNREACHABLE(); |
| 4532 break; | 4522 break; |
| 4533 } | 4523 } |
| (...skipping 9762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14296 template | 14286 template |
| 14297 int Dictionary<SeededNumberDictionaryShape, uint32_t>::NumberOfEnumElements(); | 14287 int Dictionary<SeededNumberDictionaryShape, uint32_t>::NumberOfEnumElements(); |
| 14298 | 14288 |
| 14299 template | 14289 template |
| 14300 int Dictionary<NameDictionaryShape, Name*>::NumberOfEnumElements(); | 14290 int Dictionary<NameDictionaryShape, Name*>::NumberOfEnumElements(); |
| 14301 | 14291 |
| 14302 template | 14292 template |
| 14303 int HashTable<SeededNumberDictionaryShape, uint32_t>::FindEntry(uint32_t); | 14293 int HashTable<SeededNumberDictionaryShape, uint32_t>::FindEntry(uint32_t); |
| 14304 | 14294 |
| 14305 | 14295 |
| 14296 Handle<NameDictionary> NameDictionary::Add(Handle<NameDictionary> dict, |
| 14297 Handle<Name> name, |
| 14298 Handle<Object> value, |
| 14299 PropertyDetails details) { |
| 14300 CALL_HEAP_FUNCTION(dict->GetIsolate(), |
| 14301 Handle<Dictionary>::cast(dict)->Add( |
| 14302 *name, *value, details), |
| 14303 NameDictionary); |
| 14304 } |
| 14305 |
| 14306 |
| 14306 Handle<Object> JSObject::PrepareSlowElementsForSort( | 14307 Handle<Object> JSObject::PrepareSlowElementsForSort( |
| 14307 Handle<JSObject> object, uint32_t limit) { | 14308 Handle<JSObject> object, uint32_t limit) { |
| 14308 CALL_HEAP_FUNCTION(object->GetIsolate(), | 14309 CALL_HEAP_FUNCTION(object->GetIsolate(), |
| 14309 object->PrepareSlowElementsForSort(limit), | 14310 object->PrepareSlowElementsForSort(limit), |
| 14310 Object); | 14311 Object); |
| 14311 } | 14312 } |
| 14312 | 14313 |
| 14313 | 14314 |
| 14314 // Collates undefined and unexisting elements below limit from position | 14315 // Collates undefined and unexisting elements below limit from position |
| 14315 // zero of the elements. The object stays in Dictionary mode. | 14316 // zero of the elements. The object stays in Dictionary mode. |
| (...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14827 Handle<JSGlobalObject> global, | 14828 Handle<JSGlobalObject> global, |
| 14828 Handle<Name> name) { | 14829 Handle<Name> name) { |
| 14829 ASSERT(!global->HasFastProperties()); | 14830 ASSERT(!global->HasFastProperties()); |
| 14830 int entry = global->property_dictionary()->FindEntry(*name); | 14831 int entry = global->property_dictionary()->FindEntry(*name); |
| 14831 if (entry == NameDictionary::kNotFound) { | 14832 if (entry == NameDictionary::kNotFound) { |
| 14832 Isolate* isolate = global->GetIsolate(); | 14833 Isolate* isolate = global->GetIsolate(); |
| 14833 Handle<PropertyCell> cell = isolate->factory()->NewPropertyCell( | 14834 Handle<PropertyCell> cell = isolate->factory()->NewPropertyCell( |
| 14834 isolate->factory()->the_hole_value()); | 14835 isolate->factory()->the_hole_value()); |
| 14835 PropertyDetails details(NONE, NORMAL, 0); | 14836 PropertyDetails details(NONE, NORMAL, 0); |
| 14836 details = details.AsDeleted(); | 14837 details = details.AsDeleted(); |
| 14837 Handle<NameDictionary> dictionary = NameDictionaryAdd( | 14838 Handle<NameDictionary> dictionary = NameDictionary::Add( |
| 14838 handle(global->property_dictionary()), name, cell, details); | 14839 handle(global->property_dictionary()), name, cell, details); |
| 14839 global->set_properties(*dictionary); | 14840 global->set_properties(*dictionary); |
| 14840 return cell; | 14841 return cell; |
| 14841 } else { | 14842 } else { |
| 14842 Object* value = global->property_dictionary()->ValueAt(entry); | 14843 Object* value = global->property_dictionary()->ValueAt(entry); |
| 14843 ASSERT(value->IsPropertyCell()); | 14844 ASSERT(value->IsPropertyCell()); |
| 14844 return handle(PropertyCell::cast(value)); | 14845 return handle(PropertyCell::cast(value)); |
| 14845 } | 14846 } |
| 14846 } | 14847 } |
| 14847 | 14848 |
| (...skipping 1646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16494 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16495 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 16495 static const char* error_messages_[] = { | 16496 static const char* error_messages_[] = { |
| 16496 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16497 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 16497 }; | 16498 }; |
| 16498 #undef ERROR_MESSAGES_TEXTS | 16499 #undef ERROR_MESSAGES_TEXTS |
| 16499 return error_messages_[reason]; | 16500 return error_messages_[reason]; |
| 16500 } | 16501 } |
| 16501 | 16502 |
| 16502 | 16503 |
| 16503 } } // namespace v8::internal | 16504 } } // namespace v8::internal |
| OLD | NEW |