| 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 3943 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3954 | 3954 |
| 3955 // New is a private method as RawInstruction and RawCode objects should | 3955 // New is a private method as RawInstruction and RawCode objects should |
| 3956 // only be created using the Code::FinalizeCode method. This method creates | 3956 // only be created using the Code::FinalizeCode method. This method creates |
| 3957 // the RawInstruction and RawCode objects, sets up the pointer offsets | 3957 // the RawInstruction and RawCode objects, sets up the pointer offsets |
| 3958 // and links the two in a GC safe manner. | 3958 // and links the two in a GC safe manner. |
| 3959 static RawInstructions* New(intptr_t size); | 3959 static RawInstructions* New(intptr_t size); |
| 3960 | 3960 |
| 3961 FINAL_HEAP_OBJECT_IMPLEMENTATION(Instructions, Object); | 3961 FINAL_HEAP_OBJECT_IMPLEMENTATION(Instructions, Object); |
| 3962 friend class Class; | 3962 friend class Class; |
| 3963 friend class Code; | 3963 friend class Code; |
| 3964 friend class InstructionsWriter; | 3964 friend class AssemblyInstructionsWriter; |
| 3965 friend class BlobInstructionsWriter; |
| 3965 }; | 3966 }; |
| 3966 | 3967 |
| 3967 | 3968 |
| 3968 class LocalVarDescriptors : public Object { | 3969 class LocalVarDescriptors : public Object { |
| 3969 public: | 3970 public: |
| 3970 intptr_t Length() const; | 3971 intptr_t Length() const; |
| 3971 | 3972 |
| 3972 RawString* GetName(intptr_t var_index) const; | 3973 RawString* GetName(intptr_t var_index) const; |
| 3973 | 3974 |
| 3974 void SetVar(intptr_t var_index, | 3975 void SetVar(intptr_t var_index, |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4367 private: | 4368 private: |
| 4368 static void UnpackInto(const Array& table, | 4369 static void UnpackInto(const Array& table, |
| 4369 const TypedData& packed, | 4370 const TypedData& packed, |
| 4370 GrowableArray<DeoptInstr*>* instructions, | 4371 GrowableArray<DeoptInstr*>* instructions, |
| 4371 intptr_t length); | 4372 intptr_t length); |
| 4372 }; | 4373 }; |
| 4373 | 4374 |
| 4374 | 4375 |
| 4375 class Code : public Object { | 4376 class Code : public Object { |
| 4376 public: | 4377 public: |
| 4377 uword active_entry_point() const { return raw_ptr()->entry_point_; } | 4378 RawInstructions* active_instructions() const { |
| 4379 return raw_ptr()->active_instructions_; |
| 4380 } |
| 4378 | 4381 |
| 4379 RawInstructions* instructions() const { return raw_ptr()->instructions_; } | 4382 RawInstructions* instructions() const { return raw_ptr()->instructions_; } |
| 4380 | 4383 |
| 4381 static intptr_t saved_instructions_offset() { | 4384 static intptr_t saved_instructions_offset() { |
| 4382 return OFFSET_OF(RawCode, instructions_); | 4385 return OFFSET_OF(RawCode, instructions_); |
| 4383 } | 4386 } |
| 4384 | 4387 |
| 4385 static intptr_t entry_point_offset() { | 4388 static intptr_t entry_point_offset() { |
| 4386 return OFFSET_OF(RawCode, entry_point_); | 4389 return OFFSET_OF(RawCode, entry_point_); |
| 4387 } | 4390 } |
| 4388 | 4391 |
| 4389 RawObjectPool* object_pool() const { return raw_ptr()->object_pool_; } | 4392 RawObjectPool* object_pool() const { return raw_ptr()->object_pool_; } |
| 4390 static intptr_t object_pool_offset() { | 4393 static intptr_t object_pool_offset() { |
| 4391 return OFFSET_OF(RawCode, object_pool_); | 4394 return OFFSET_OF(RawCode, object_pool_); |
| 4392 } | 4395 } |
| 4393 | 4396 |
| 4394 intptr_t pointer_offsets_length() const { | 4397 intptr_t pointer_offsets_length() const { |
| 4395 return PtrOffBits::decode(raw_ptr()->state_bits_); | 4398 return PtrOffBits::decode(raw_ptr()->state_bits_); |
| 4396 } | 4399 } |
| 4397 | 4400 |
| 4398 bool is_optimized() const { | 4401 bool is_optimized() const { |
| 4399 return OptimizedBit::decode(raw_ptr()->state_bits_); | 4402 return OptimizedBit::decode(raw_ptr()->state_bits_); |
| 4400 } | 4403 } |
| 4401 void set_is_optimized(bool value) const; | 4404 void set_is_optimized(bool value) const; |
| 4402 bool is_alive() const { | 4405 bool is_alive() const { |
| 4403 return AliveBit::decode(raw_ptr()->state_bits_); | 4406 return AliveBit::decode(raw_ptr()->state_bits_); |
| 4404 } | 4407 } |
| 4405 void set_is_alive(bool value) const; | 4408 void set_is_alive(bool value) const; |
| 4406 | 4409 |
| 4407 uword EntryPoint() const; | 4410 uword EntryPoint() const { |
| 4408 intptr_t Size() const; | 4411 return Instructions::Handle(instructions()).EntryPoint(); |
| 4409 | 4412 } |
| 4413 intptr_t Size() const { |
| 4414 const Instructions& instr = Instructions::Handle(instructions()); |
| 4415 return instr.size(); |
| 4416 } |
| 4410 RawObjectPool* GetObjectPool() const { | 4417 RawObjectPool* GetObjectPool() const { |
| 4411 return object_pool(); | 4418 return object_pool(); |
| 4412 } | 4419 } |
| 4413 bool ContainsInstructionAt(uword addr) const { | 4420 bool ContainsInstructionAt(uword addr) const { |
| 4414 const uword offset = addr - EntryPoint(); | 4421 const Instructions& instr = Instructions::Handle(instructions()); |
| 4415 return offset < static_cast<uword>(Size()); | 4422 const uword offset = addr - instr.EntryPoint(); |
| 4423 return offset < static_cast<uword>(instr.size()); |
| 4416 } | 4424 } |
| 4417 | 4425 |
| 4418 // Returns true if there is a debugger breakpoint set in this code object. | 4426 // Returns true if there is a debugger breakpoint set in this code object. |
| 4419 bool HasBreakpoint() const; | 4427 bool HasBreakpoint() const; |
| 4420 | 4428 |
| 4421 RawPcDescriptors* pc_descriptors() const { | 4429 RawPcDescriptors* pc_descriptors() const { |
| 4422 return raw_ptr()->pc_descriptors_; | 4430 return raw_ptr()->pc_descriptors_; |
| 4423 } | 4431 } |
| 4424 void set_pc_descriptors(const PcDescriptors& descriptors) const { | 4432 void set_pc_descriptors(const PcDescriptors& descriptors) const { |
| 4425 ASSERT(descriptors.IsOld()); | 4433 ASSERT(descriptors.IsOld()); |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4644 bool IsStubCode() const; | 4652 bool IsStubCode() const; |
| 4645 bool IsFunctionCode() const; | 4653 bool IsFunctionCode() const; |
| 4646 | 4654 |
| 4647 void DisableDartCode() const; | 4655 void DisableDartCode() const; |
| 4648 | 4656 |
| 4649 void DisableStubCode() const; | 4657 void DisableStubCode() const; |
| 4650 | 4658 |
| 4651 void Enable() const { | 4659 void Enable() const { |
| 4652 if (!IsDisabled()) return; | 4660 if (!IsDisabled()) return; |
| 4653 ASSERT(Thread::Current()->IsMutatorThread()); | 4661 ASSERT(Thread::Current()->IsMutatorThread()); |
| 4662 ASSERT(instructions() != active_instructions()); |
| 4654 SetActiveInstructions(instructions()); | 4663 SetActiveInstructions(instructions()); |
| 4655 } | 4664 } |
| 4656 | 4665 |
| 4657 bool IsDisabled() const { | 4666 bool IsDisabled() const { |
| 4658 return active_entry_point() != EntryPoint(); | 4667 return instructions() != active_instructions(); |
| 4659 } | 4668 } |
| 4660 | 4669 |
| 4661 private: | 4670 private: |
| 4662 void set_state_bits(intptr_t bits) const; | 4671 void set_state_bits(intptr_t bits) const; |
| 4663 | 4672 |
| 4664 void set_object_pool(RawObjectPool* object_pool) const { | 4673 void set_object_pool(RawObjectPool* object_pool) const { |
| 4665 StorePointer(&raw_ptr()->object_pool_, object_pool); | 4674 StorePointer(&raw_ptr()->object_pool_, object_pool); |
| 4666 } | 4675 } |
| 4667 | 4676 |
| 4668 friend class RawObject; // For RawObject::SizeFromClass(). | 4677 friend class RawObject; // For RawObject::SizeFromClass(). |
| (...skipping 3838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8507 | 8516 |
| 8508 | 8517 |
| 8509 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, | 8518 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, |
| 8510 intptr_t index) { | 8519 intptr_t index) { |
| 8511 return array.At((index * kEntryLength) + kTargetFunctionIndex); | 8520 return array.At((index * kEntryLength) + kTargetFunctionIndex); |
| 8512 } | 8521 } |
| 8513 | 8522 |
| 8514 } // namespace dart | 8523 } // namespace dart |
| 8515 | 8524 |
| 8516 #endif // VM_OBJECT_H_ | 8525 #endif // VM_OBJECT_H_ |
| OLD | NEW |