Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_OBJECT_H_ | 5 #ifndef VM_OBJECT_H_ |
| 6 #define VM_OBJECT_H_ | 6 #define VM_OBJECT_H_ |
| 7 | 7 |
| 8 #include "include/dart_api.h" | 8 #include "include/dart_api.h" |
| 9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
| 10 #include "platform/utils.h" | 10 #include "platform/utils.h" |
| (...skipping 2579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2590 // malicious code. | 2590 // malicious code. |
| 2591 static const intptr_t kMaxHandlers = 1024 * 1024; | 2591 static const intptr_t kMaxHandlers = 1024 * 1024; |
| 2592 | 2592 |
| 2593 void set_handled_types_data(const Array& value) const; | 2593 void set_handled_types_data(const Array& value) const; |
| 2594 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExceptionHandlers, Object); | 2594 FINAL_HEAP_OBJECT_IMPLEMENTATION(ExceptionHandlers, Object); |
| 2595 friend class Class; | 2595 friend class Class; |
| 2596 }; | 2596 }; |
| 2597 | 2597 |
| 2598 | 2598 |
| 2599 // Holds deopt information at one deoptimization point. The information | 2599 // Holds deopt information at one deoptimization point. The information |
| 2600 // is a list of DeoptInstr objects, specifying transformation information | 2600 // is consists of two parts: |
|
srdjan
2013/05/07 23:11:45
remove 'is'
Vyacheslav Egorov (Google)
2013/05/07 23:28:21
Done.
| |
| 2601 // for each slot in unoptimized frame(s). | 2601 // - first a prefix consiting of kMaterializeObject instructions describing |
| 2602 // objects which had their allocation removed as part of AllocationSinking | |
| 2603 // pass and have to be materialized; | |
| 2604 // - followed by a list of DeoptInstr objects, specifying transformation | |
| 2605 // information for each slot in unoptimized frame(s). | |
| 2606 // Arguments for object materialization (class of instance to be allocated and | |
| 2607 // field-value pairs) are added as artificial slots to the expression stack | |
| 2608 // of the bottom-most frame. They are removed from the stack at the very end | |
| 2609 // of deoptimization by the deoptimization stub. | |
| 2602 class DeoptInfo : public Object { | 2610 class DeoptInfo : public Object { |
| 2603 private: | 2611 private: |
| 2604 // Describes the layout of deopt info data. The index of a deopt-info entry | 2612 // Describes the layout of deopt info data. The index of a deopt-info entry |
| 2605 // is implicitly the target slot in which the value is written into. | 2613 // is implicitly the target slot in which the value is written into. |
| 2606 enum { | 2614 enum { |
| 2607 kInstruction = 0, | 2615 kInstruction = 0, |
| 2608 kFromIndex, | 2616 kFromIndex, |
| 2609 kNumberOfEntries, | 2617 kNumberOfEntries, |
| 2610 }; | 2618 }; |
| 2611 | 2619 |
| 2612 public: | 2620 public: |
| 2613 // The number of instructions. | 2621 // The number of instructions. |
| 2614 intptr_t Length() const; | 2622 intptr_t Length() const; |
| 2615 | 2623 |
| 2616 // The number of real (non-suffix) instructions needed to execute the | 2624 // The number of real (non-suffix) instructions needed to execute the |
| 2617 // deoptimization translation. | 2625 // deoptimization translation. |
| 2618 intptr_t TranslationLength() const; | 2626 intptr_t TranslationLength() const; |
| 2619 | 2627 |
| 2628 // Size of the frame part of the translation not counting kMaterializeObject | |
| 2629 // instructions in the prefix. | |
| 2630 intptr_t FrameSize() const; | |
| 2631 | |
| 2620 static RawDeoptInfo* New(intptr_t num_commands); | 2632 static RawDeoptInfo* New(intptr_t num_commands); |
| 2621 | 2633 |
| 2622 static const intptr_t kBytesPerElement = (kNumberOfEntries * kWordSize); | 2634 static const intptr_t kBytesPerElement = (kNumberOfEntries * kWordSize); |
| 2623 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; | 2635 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; |
| 2624 | 2636 |
| 2625 static intptr_t InstanceSize() { | 2637 static intptr_t InstanceSize() { |
| 2626 ASSERT(sizeof(RawDeoptInfo) == OFFSET_OF(RawDeoptInfo, data_)); | 2638 ASSERT(sizeof(RawDeoptInfo) == OFFSET_OF(RawDeoptInfo, data_)); |
| 2627 return 0; | 2639 return 0; |
| 2628 } | 2640 } |
| 2629 | 2641 |
| (...skipping 3096 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5726 | 5738 |
| 5727 | 5739 |
| 5728 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, | 5740 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, |
| 5729 intptr_t index) { | 5741 intptr_t index) { |
| 5730 return array.At((index * kEntryLength) + kTargetFunctionIndex); | 5742 return array.At((index * kEntryLength) + kTargetFunctionIndex); |
| 5731 } | 5743 } |
| 5732 | 5744 |
| 5733 } // namespace dart | 5745 } // namespace dart |
| 5734 | 5746 |
| 5735 #endif // VM_OBJECT_H_ | 5747 #endif // VM_OBJECT_H_ |
| OLD | NEW |