| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/objects.h" | 5 #include "src/objects.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 #include <iomanip> | 8 #include <iomanip> |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <sstream> | 10 #include <sstream> |
| (...skipping 2743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2754 } | 2754 } |
| 2755 accumulator->Add(" (SharedFunctionInfo %p)", | 2755 accumulator->Add(" (SharedFunctionInfo %p)", |
| 2756 reinterpret_cast<void*>(function->shared())); | 2756 reinterpret_cast<void*>(function->shared())); |
| 2757 accumulator->Put('>'); | 2757 accumulator->Put('>'); |
| 2758 break; | 2758 break; |
| 2759 } | 2759 } |
| 2760 case JS_GENERATOR_OBJECT_TYPE: { | 2760 case JS_GENERATOR_OBJECT_TYPE: { |
| 2761 accumulator->Add("<JS Generator>"); | 2761 accumulator->Add("<JS Generator>"); |
| 2762 break; | 2762 break; |
| 2763 } | 2763 } |
| 2764 case JS_ASYNC_GENERATOR_OBJECT_TYPE: { |
| 2765 accumulator->Add("<JS AsyncGenerator>"); |
| 2766 break; |
| 2767 } |
| 2768 case JS_ASYNC_FROM_SYNC_ITERATOR_TYPE: { |
| 2769 accumulator->Add("<JS AsyncFromSyncIterator>"); |
| 2770 break; |
| 2771 } |
| 2764 // All other JSObjects are rather similar to each other (JSObject, | 2772 // All other JSObjects are rather similar to each other (JSObject, |
| 2765 // JSGlobalProxy, JSGlobalObject, JSUndetectable, JSValue). | 2773 // JSGlobalProxy, JSGlobalObject, JSUndetectable, JSValue). |
| 2766 default: { | 2774 default: { |
| 2767 Map* map_of_this = map(); | 2775 Map* map_of_this = map(); |
| 2768 Heap* heap = GetHeap(); | 2776 Heap* heap = GetHeap(); |
| 2769 Object* constructor = map_of_this->GetConstructor(); | 2777 Object* constructor = map_of_this->GetConstructor(); |
| 2770 bool printed = false; | 2778 bool printed = false; |
| 2771 if (constructor->IsHeapObject() && | 2779 if (constructor->IsHeapObject() && |
| 2772 !heap->Contains(HeapObject::cast(constructor))) { | 2780 !heap->Contains(HeapObject::cast(constructor))) { |
| 2773 accumulator->Add("!!!INVALID CONSTRUCTOR!!!"); | 2781 accumulator->Add("!!!INVALID CONSTRUCTOR!!!"); |
| (...skipping 5864 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8638 #ifdef DEBUG | 8646 #ifdef DEBUG |
| 8639 Isolate* isolate = map->GetIsolate(); | 8647 Isolate* isolate = map->GetIsolate(); |
| 8640 // Strict function maps have Function as a constructor but the | 8648 // Strict function maps have Function as a constructor but the |
| 8641 // Function's initial map is a sloppy function map. Same holds for | 8649 // Function's initial map is a sloppy function map. Same holds for |
| 8642 // GeneratorFunction / AsyncFunction and its initial map. | 8650 // GeneratorFunction / AsyncFunction and its initial map. |
| 8643 Object* constructor = map->GetConstructor(); | 8651 Object* constructor = map->GetConstructor(); |
| 8644 DCHECK(constructor->IsJSFunction()); | 8652 DCHECK(constructor->IsJSFunction()); |
| 8645 DCHECK(*map == JSFunction::cast(constructor)->initial_map() || | 8653 DCHECK(*map == JSFunction::cast(constructor)->initial_map() || |
| 8646 *map == *isolate->strict_function_map() || | 8654 *map == *isolate->strict_function_map() || |
| 8647 *map == *isolate->generator_function_map() || | 8655 *map == *isolate->generator_function_map() || |
| 8648 *map == *isolate->async_function_map()); | 8656 *map == *isolate->async_function_map() || |
| 8657 *map == *isolate->async_generator_function_map()); |
| 8649 #endif | 8658 #endif |
| 8650 // Initial maps must always own their descriptors and it's descriptor array | 8659 // Initial maps must always own their descriptors and it's descriptor array |
| 8651 // does not contain descriptors that do not belong to the map. | 8660 // does not contain descriptors that do not belong to the map. |
| 8652 DCHECK(map->owns_descriptors()); | 8661 DCHECK(map->owns_descriptors()); |
| 8653 DCHECK_EQ(map->NumberOfOwnDescriptors(), | 8662 DCHECK_EQ(map->NumberOfOwnDescriptors(), |
| 8654 map->instance_descriptors()->number_of_descriptors()); | 8663 map->instance_descriptors()->number_of_descriptors()); |
| 8655 | 8664 |
| 8656 Handle<Map> result = RawCopy(map, instance_size); | 8665 Handle<Map> result = RawCopy(map, instance_size); |
| 8657 | 8666 |
| 8658 // Please note instance_type and instance_size are set when allocated. | 8667 // Please note instance_type and instance_size are set when allocated. |
| (...skipping 3972 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12631 bool CanSubclassHaveInobjectProperties(InstanceType instance_type) { | 12640 bool CanSubclassHaveInobjectProperties(InstanceType instance_type) { |
| 12632 switch (instance_type) { | 12641 switch (instance_type) { |
| 12633 case JS_API_OBJECT_TYPE: | 12642 case JS_API_OBJECT_TYPE: |
| 12634 case JS_ARRAY_BUFFER_TYPE: | 12643 case JS_ARRAY_BUFFER_TYPE: |
| 12635 case JS_ARRAY_TYPE: | 12644 case JS_ARRAY_TYPE: |
| 12636 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: | 12645 case JS_CONTEXT_EXTENSION_OBJECT_TYPE: |
| 12637 case JS_DATA_VIEW_TYPE: | 12646 case JS_DATA_VIEW_TYPE: |
| 12638 case JS_DATE_TYPE: | 12647 case JS_DATE_TYPE: |
| 12639 case JS_FUNCTION_TYPE: | 12648 case JS_FUNCTION_TYPE: |
| 12640 case JS_GENERATOR_OBJECT_TYPE: | 12649 case JS_GENERATOR_OBJECT_TYPE: |
| 12650 case JS_ASYNC_GENERATOR_OBJECT_TYPE: |
| 12651 case JS_ASYNC_FROM_SYNC_ITERATOR_TYPE: |
| 12641 case JS_MAP_ITERATOR_TYPE: | 12652 case JS_MAP_ITERATOR_TYPE: |
| 12642 case JS_MAP_TYPE: | 12653 case JS_MAP_TYPE: |
| 12643 case JS_MESSAGE_OBJECT_TYPE: | 12654 case JS_MESSAGE_OBJECT_TYPE: |
| 12644 case JS_OBJECT_TYPE: | 12655 case JS_OBJECT_TYPE: |
| 12645 case JS_ERROR_TYPE: | 12656 case JS_ERROR_TYPE: |
| 12646 case JS_ARGUMENTS_TYPE: | 12657 case JS_ARGUMENTS_TYPE: |
| 12647 case JS_PROMISE_TYPE: | 12658 case JS_PROMISE_TYPE: |
| 12648 case JS_REGEXP_TYPE: | 12659 case JS_REGEXP_TYPE: |
| 12649 case JS_SET_ITERATOR_TYPE: | 12660 case JS_SET_ITERATOR_TYPE: |
| 12650 case JS_SET_TYPE: | 12661 case JS_SET_TYPE: |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12704 Isolate* isolate = function->GetIsolate(); | 12715 Isolate* isolate = function->GetIsolate(); |
| 12705 | 12716 |
| 12706 // The constructor should be compiled for the optimization hints to be | 12717 // The constructor should be compiled for the optimization hints to be |
| 12707 // available. | 12718 // available. |
| 12708 Compiler::Compile(function, Compiler::CLEAR_EXCEPTION); | 12719 Compiler::Compile(function, Compiler::CLEAR_EXCEPTION); |
| 12709 | 12720 |
| 12710 // First create a new map with the size and number of in-object properties | 12721 // First create a new map with the size and number of in-object properties |
| 12711 // suggested by the function. | 12722 // suggested by the function. |
| 12712 InstanceType instance_type; | 12723 InstanceType instance_type; |
| 12713 if (IsResumableFunction(function->shared()->kind())) { | 12724 if (IsResumableFunction(function->shared()->kind())) { |
| 12714 instance_type = JS_GENERATOR_OBJECT_TYPE; | 12725 instance_type = IsAsyncGeneratorFunction(function->shared()->kind()) |
| 12726 ? JS_ASYNC_GENERATOR_OBJECT_TYPE |
| 12727 : JS_GENERATOR_OBJECT_TYPE; |
| 12715 } else { | 12728 } else { |
| 12716 instance_type = JS_OBJECT_TYPE; | 12729 instance_type = JS_OBJECT_TYPE; |
| 12717 } | 12730 } |
| 12718 int instance_size; | 12731 int instance_size; |
| 12719 int in_object_properties; | 12732 int in_object_properties; |
| 12720 function->CalculateInstanceSize(instance_type, 0, &instance_size, | 12733 function->CalculateInstanceSize(instance_type, 0, &instance_size, |
| 12721 &in_object_properties); | 12734 &in_object_properties); |
| 12722 | 12735 |
| 12723 Handle<Map> map = isolate->factory()->NewMap(instance_type, instance_size); | 12736 Handle<Map> map = isolate->factory()->NewMap(instance_type, instance_size); |
| 12724 | 12737 |
| (...skipping 7228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 19953 // depend on this. | 19966 // depend on this. |
| 19954 return DICTIONARY_ELEMENTS; | 19967 return DICTIONARY_ELEMENTS; |
| 19955 } | 19968 } |
| 19956 DCHECK_LE(kind, LAST_ELEMENTS_KIND); | 19969 DCHECK_LE(kind, LAST_ELEMENTS_KIND); |
| 19957 return kind; | 19970 return kind; |
| 19958 } | 19971 } |
| 19959 } | 19972 } |
| 19960 | 19973 |
| 19961 } // namespace internal | 19974 } // namespace internal |
| 19962 } // namespace v8 | 19975 } // namespace v8 |
| OLD | NEW |