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 RUNTIME_VM_OBJECT_H_ | 5 #ifndef RUNTIME_VM_OBJECT_H_ |
6 #define RUNTIME_VM_OBJECT_H_ | 6 #define RUNTIME_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 4877 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4888 // with the corresponding source positions. Note the token position for each | 4888 // with the corresponding source positions. Note the token position for each |
4889 // function except the top-of-stack is the position of the call to the next | 4889 // function except the top-of-stack is the position of the call to the next |
4890 // function. The stack will be empty if we lack the metadata to produce it, | 4890 // function. The stack will be empty if we lack the metadata to produce it, |
4891 // which happens for stub code. | 4891 // which happens for stub code. |
4892 // The pc offset is interpreted as an instruction address (as needed by the | 4892 // The pc offset is interpreted as an instruction address (as needed by the |
4893 // disassembler or the top frame of a profiler sample). | 4893 // disassembler or the top frame of a profiler sample). |
4894 void GetInlinedFunctionsAtInstruction( | 4894 void GetInlinedFunctionsAtInstruction( |
4895 intptr_t pc_offset, | 4895 intptr_t pc_offset, |
4896 GrowableArray<const Function*>* functions, | 4896 GrowableArray<const Function*>* functions, |
4897 GrowableArray<TokenPosition>* token_positions) const; | 4897 GrowableArray<TokenPosition>* token_positions) const; |
4898 // Same as above, expect the pc is intepreted as a return address (as needed | 4898 // Same as above, expect the pc is interpreted as a return address (as needed |
4899 // for a stack trace or the bottom frames of a profiler sample). | 4899 // for a stack trace or the bottom frames of a profiler sample). |
4900 void GetInlinedFunctionsAtReturnAddress( | 4900 void GetInlinedFunctionsAtReturnAddress( |
4901 intptr_t pc_offset, | 4901 intptr_t pc_offset, |
4902 GrowableArray<const Function*>* functions, | 4902 GrowableArray<const Function*>* functions, |
4903 GrowableArray<TokenPosition>* token_positions) const { | 4903 GrowableArray<TokenPosition>* token_positions) const { |
4904 GetInlinedFunctionsAtInstruction(pc_offset - 1, functions, token_positions); | 4904 GetInlinedFunctionsAtInstruction(pc_offset - 1, functions, token_positions); |
4905 } | 4905 } |
4906 | 4906 |
4907 NOT_IN_PRODUCT(void PrintJSONInlineIntervals(JSONObject* object) const); | 4907 NOT_IN_PRODUCT(void PrintJSONInlineIntervals(JSONObject* object) const); |
4908 void DumpInlineIntervals() const; | 4908 void DumpInlineIntervals() const; |
(...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5642 RawObject** NativeFieldsAddr() const { | 5642 RawObject** NativeFieldsAddr() const { |
5643 return FieldAddrAtOffset(sizeof(RawObject)); | 5643 return FieldAddrAtOffset(sizeof(RawObject)); |
5644 } | 5644 } |
5645 void SetFieldAtOffset(intptr_t offset, const Object& value) const { | 5645 void SetFieldAtOffset(intptr_t offset, const Object& value) const { |
5646 StorePointer(FieldAddrAtOffset(offset), value.raw()); | 5646 StorePointer(FieldAddrAtOffset(offset), value.raw()); |
5647 } | 5647 } |
5648 bool IsValidFieldOffset(intptr_t offset) const; | 5648 bool IsValidFieldOffset(intptr_t offset) const; |
5649 | 5649 |
5650 static intptr_t NextFieldOffset() { return sizeof(RawInstance); } | 5650 static intptr_t NextFieldOffset() { return sizeof(RawInstance); } |
5651 | 5651 |
5652 // The follwoing raw methods are used for morphing. | 5652 // The following raw methods are used for morphing. |
5653 // They are needed due to the extraction of the class in IsValidFieldOffset. | 5653 // They are needed due to the extraction of the class in IsValidFieldOffset. |
5654 RawObject** RawFieldAddrAtOffset(intptr_t offset) const { | 5654 RawObject** RawFieldAddrAtOffset(intptr_t offset) const { |
5655 return reinterpret_cast<RawObject**>(raw_value() - kHeapObjectTag + offset); | 5655 return reinterpret_cast<RawObject**>(raw_value() - kHeapObjectTag + offset); |
5656 } | 5656 } |
5657 RawObject* RawGetFieldAtOffset(intptr_t offset) const { | 5657 RawObject* RawGetFieldAtOffset(intptr_t offset) const { |
5658 return *RawFieldAddrAtOffset(offset); | 5658 return *RawFieldAddrAtOffset(offset); |
5659 } | 5659 } |
5660 void RawSetFieldAtOffset(intptr_t offset, const Object& value) const { | 5660 void RawSetFieldAtOffset(intptr_t offset, const Object& value) const { |
5661 StorePointer(RawFieldAddrAtOffset(offset), value.raw()); | 5661 StorePointer(RawFieldAddrAtOffset(offset), value.raw()); |
5662 } | 5662 } |
(...skipping 3388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9051 | 9051 |
9052 inline void TypeArguments::SetHash(intptr_t value) const { | 9052 inline void TypeArguments::SetHash(intptr_t value) const { |
9053 // This is only safe because we create a new Smi, which does not cause | 9053 // This is only safe because we create a new Smi, which does not cause |
9054 // heap allocation. | 9054 // heap allocation. |
9055 StoreSmi(&raw_ptr()->hash_, Smi::New(value)); | 9055 StoreSmi(&raw_ptr()->hash_, Smi::New(value)); |
9056 } | 9056 } |
9057 | 9057 |
9058 } // namespace dart | 9058 } // namespace dart |
9059 | 9059 |
9060 #endif // RUNTIME_VM_OBJECT_H_ | 9060 #endif // RUNTIME_VM_OBJECT_H_ |
OLD | NEW |