Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 107 ASSERT(0 <= at_least_space_for); | 107 ASSERT(0 <= at_least_space_for); |
| 108 CALL_HEAP_FUNCTION(isolate(), | 108 CALL_HEAP_FUNCTION(isolate(), |
| 109 ObjectHashTable::Allocate(at_least_space_for), | 109 ObjectHashTable::Allocate(at_least_space_for), |
| 110 ObjectHashTable); | 110 ObjectHashTable); |
| 111 } | 111 } |
| 112 | 112 |
| 113 | 113 |
| 114 Handle<DescriptorArray> Factory::NewDescriptorArray(int number_of_descriptors) { | 114 Handle<DescriptorArray> Factory::NewDescriptorArray(int number_of_descriptors) { |
| 115 ASSERT(0 <= number_of_descriptors); | 115 ASSERT(0 <= number_of_descriptors); |
| 116 CALL_HEAP_FUNCTION(isolate(), | 116 CALL_HEAP_FUNCTION(isolate(), |
| 117 DescriptorArray::Allocate(number_of_descriptors), | 117 DescriptorArray::Allocate(number_of_descriptors, false), |
| 118 DescriptorArray); | 118 DescriptorArray); |
| 119 } | 119 } |
| 120 | 120 |
| 121 | 121 |
| 122 Handle<DeoptimizationInputData> Factory::NewDeoptimizationInputData( | 122 Handle<DeoptimizationInputData> Factory::NewDeoptimizationInputData( |
| 123 int deopt_entry_count, | 123 int deopt_entry_count, |
| 124 PretenureFlag pretenure) { | 124 PretenureFlag pretenure) { |
| 125 ASSERT(deopt_entry_count > 0); | 125 ASSERT(deopt_entry_count > 0); |
| 126 CALL_HEAP_FUNCTION(isolate(), | 126 CALL_HEAP_FUNCTION(isolate(), |
| 127 DeoptimizationInputData::Allocate(deopt_entry_count, | 127 DeoptimizationInputData::Allocate(deopt_entry_count, |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 488 copy->inobject_properties() + extra_inobject_properties; | 488 copy->inobject_properties() + extra_inobject_properties; |
| 489 copy->set_inobject_properties(inobject_properties); | 489 copy->set_inobject_properties(inobject_properties); |
| 490 copy->set_unused_property_fields(inobject_properties); | 490 copy->set_unused_property_fields(inobject_properties); |
| 491 copy->set_instance_size(copy->instance_size() + instance_size_delta); | 491 copy->set_instance_size(copy->instance_size() + instance_size_delta); |
| 492 copy->set_visitor_id(StaticVisitorBase::GetVisitorId(*copy)); | 492 copy->set_visitor_id(StaticVisitorBase::GetVisitorId(*copy)); |
| 493 return copy; | 493 return copy; |
| 494 } | 494 } |
| 495 | 495 |
| 496 | 496 |
| 497 Handle<Map> Factory::CopyMapDropTransitions(Handle<Map> src) { | 497 Handle<Map> Factory::CopyMapDropTransitions(Handle<Map> src) { |
| 498 CALL_HEAP_FUNCTION(isolate(), src->CopyDropTransitions(), Map); | 498 CALL_HEAP_FUNCTION(isolate(), src->CopyDropTransitions(false), Map); |
| 499 } | 499 } |
| 500 | 500 |
| 501 | 501 |
| 502 Handle<Map> Factory::GetElementsTransitionMap( | 502 Handle<Map> Factory::GetElementsTransitionMap( |
| 503 Handle<JSObject> src, | 503 Handle<JSObject> src, |
| 504 ElementsKind elements_kind) { | 504 ElementsKind elements_kind) { |
| 505 Isolate* i = isolate(); | 505 Isolate* i = isolate(); |
| 506 CALL_HEAP_FUNCTION(i, | 506 CALL_HEAP_FUNCTION(i, |
| 507 src->GetElementsTransitionMap(i, elements_kind), | 507 src->GetElementsTransitionMap(i, elements_kind), |
| 508 Map); | 508 Map); |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 859 DescriptorArray); | 859 DescriptorArray); |
| 860 } | 860 } |
| 861 | 861 |
| 862 | 862 |
| 863 Handle<String> Factory::SymbolFromString(Handle<String> value) { | 863 Handle<String> Factory::SymbolFromString(Handle<String> value) { |
| 864 CALL_HEAP_FUNCTION(isolate(), | 864 CALL_HEAP_FUNCTION(isolate(), |
| 865 isolate()->heap()->LookupSymbol(*value), String); | 865 isolate()->heap()->LookupSymbol(*value), String); |
| 866 } | 866 } |
| 867 | 867 |
| 868 | 868 |
| 869 static int LinearSearchUnsorted(DescriptorArray* descriptor_array, | |
| 870 String* name, int len) { | |
| 871 uint32_t hash = name->Hash(); | |
| 872 for (int number = 0; number < len; number++) { | |
| 873 String* entry = descriptor_array->GetKey(number); | |
| 874 if (entry->Hash() == hash && | |
| 875 name->Equals(entry) && | |
| 876 !descriptor_array->IsNullDescriptor(number)) { | |
| 877 return number; | |
| 878 } | |
| 879 } | |
| 880 return DescriptorArray::kNotFound; | |
| 881 } | |
| 882 | |
| 883 | |
| 869 Handle<DescriptorArray> Factory::CopyAppendCallbackDescriptors( | 884 Handle<DescriptorArray> Factory::CopyAppendCallbackDescriptors( |
| 870 Handle<DescriptorArray> array, | 885 Handle<DescriptorArray> array, |
| 871 Handle<Object> descriptors) { | 886 Handle<Object> descriptors) { |
| 872 v8::NeanderArray callbacks(descriptors); | 887 v8::NeanderArray callbacks(descriptors); |
| 873 int nof_callbacks = callbacks.length(); | 888 int nof_callbacks = callbacks.length(); |
| 874 Handle<DescriptorArray> result = | 889 Handle<DescriptorArray> result = |
| 875 NewDescriptorArray(array->number_of_descriptors() + nof_callbacks); | 890 NewDescriptorArray(array->number_of_descriptors() + nof_callbacks); |
| 876 | 891 |
| 877 // Number of descriptors added to the result so far. | 892 // Number of descriptors added to the result so far. |
| 878 int descriptor_count = 0; | 893 int descriptor_count = 0; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 893 // Fill in new callback descriptors. Process the callbacks from | 908 // Fill in new callback descriptors. Process the callbacks from |
| 894 // back to front so that the last callback with a given name takes | 909 // back to front so that the last callback with a given name takes |
| 895 // precedence over previously added callbacks with that name. | 910 // precedence over previously added callbacks with that name. |
| 896 for (int i = nof_callbacks - 1; i >= 0; i--) { | 911 for (int i = nof_callbacks - 1; i >= 0; i--) { |
| 897 Handle<AccessorInfo> entry = | 912 Handle<AccessorInfo> entry = |
| 898 Handle<AccessorInfo>(AccessorInfo::cast(callbacks.get(i))); | 913 Handle<AccessorInfo>(AccessorInfo::cast(callbacks.get(i))); |
| 899 // Ensure the key is a symbol before writing into the instance descriptor. | 914 // Ensure the key is a symbol before writing into the instance descriptor. |
| 900 Handle<String> key = | 915 Handle<String> key = |
| 901 SymbolFromString(Handle<String>(String::cast(entry->name()))); | 916 SymbolFromString(Handle<String>(String::cast(entry->name()))); |
| 902 // Check if a descriptor with this name already exists before writing. | 917 // Check if a descriptor with this name already exists before writing. |
| 903 if (result->LinearSearch(*key, descriptor_count) == | 918 if (LinearSearchUnsorted(*result, *key, descriptor_count) == |
|
danno
2012/06/01 13:49:55
Add a enum { EXPECT_SORTED, EXPECT_UNSORTED } and
Toon Verwaest
2012/06/04 09:17:48
Done.
| |
| 904 DescriptorArray::kNotFound) { | 919 DescriptorArray::kNotFound) { |
| 905 CallbacksDescriptor desc(*key, *entry, entry->property_attributes()); | 920 CallbacksDescriptor desc(*key, *entry, entry->property_attributes()); |
| 906 result->Set(descriptor_count, &desc, witness); | 921 result->Set(descriptor_count, &desc, witness); |
| 907 descriptor_count++; | 922 descriptor_count++; |
| 908 } else { | 923 } else { |
| 909 duplicates++; | 924 duplicates++; |
| 910 } | 925 } |
| 911 } | 926 } |
| 912 | 927 |
| 913 // If duplicates were detected, allocate a result of the right size | 928 // If duplicates were detected, allocate a result of the right size |
| (...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1441 | 1456 |
| 1442 | 1457 |
| 1443 Handle<Object> Factory::ToBoolean(bool value) { | 1458 Handle<Object> Factory::ToBoolean(bool value) { |
| 1444 return Handle<Object>(value | 1459 return Handle<Object>(value |
| 1445 ? isolate()->heap()->true_value() | 1460 ? isolate()->heap()->true_value() |
| 1446 : isolate()->heap()->false_value()); | 1461 : isolate()->heap()->false_value()); |
| 1447 } | 1462 } |
| 1448 | 1463 |
| 1449 | 1464 |
| 1450 } } // namespace v8::internal | 1465 } } // namespace v8::internal |
| OLD | NEW |