| 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 739 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   750   static RawClass* literal_token_class_;     // Class of LiteralToken vm object. |   750   static RawClass* literal_token_class_;     // Class of LiteralToken vm object. | 
|   751   static RawClass* token_stream_class_;  // Class of the TokenStream vm object. |   751   static RawClass* token_stream_class_;  // Class of the TokenStream vm object. | 
|   752   static RawClass* script_class_;        // Class of the Script vm object. |   752   static RawClass* script_class_;        // Class of the Script vm object. | 
|   753   static RawClass* library_class_;       // Class of the Library vm object. |   753   static RawClass* library_class_;       // Class of the Library vm object. | 
|   754   static RawClass* namespace_class_;     // Class of Namespace vm object. |   754   static RawClass* namespace_class_;     // Class of Namespace vm object. | 
|   755   static RawClass* code_class_;          // Class of the Code vm object. |   755   static RawClass* code_class_;          // Class of the Code vm object. | 
|   756   static RawClass* instructions_class_;  // Class of the Instructions vm object. |   756   static RawClass* instructions_class_;  // Class of the Instructions vm object. | 
|   757   static RawClass* object_pool_class_;   // Class of the ObjectPool vm object. |   757   static RawClass* object_pool_class_;   // Class of the ObjectPool vm object. | 
|   758   static RawClass* pc_descriptors_class_;   // Class of PcDescriptors vm object. |   758   static RawClass* pc_descriptors_class_;   // Class of PcDescriptors vm object. | 
|   759   static RawClass* code_source_map_class_;  // Class of CodeSourceMap vm object. |   759   static RawClass* code_source_map_class_;  // Class of CodeSourceMap vm object. | 
|   760   static RawClass* stackmap_class_;         // Class of Stackmap vm object. |   760   static RawClass* stackmap_class_;         // Class of StackMap vm object. | 
|   761   static RawClass* var_descriptors_class_;  // Class of LocalVarDescriptors. |   761   static RawClass* var_descriptors_class_;  // Class of LocalVarDescriptors. | 
|   762   static RawClass* exception_handlers_class_;  // Class of ExceptionHandlers. |   762   static RawClass* exception_handlers_class_;  // Class of ExceptionHandlers. | 
|   763   static RawClass* deopt_info_class_;          // Class of DeoptInfo. |   763   static RawClass* deopt_info_class_;          // Class of DeoptInfo. | 
|   764   static RawClass* context_class_;        // Class of the Context vm object. |   764   static RawClass* context_class_;        // Class of the Context vm object. | 
|   765   static RawClass* context_scope_class_;  // Class of ContextScope vm object. |   765   static RawClass* context_scope_class_;  // Class of ContextScope vm object. | 
|   766   static RawClass* singletargetcache_class_;    // Class of SingleTargetCache. |   766   static RawClass* singletargetcache_class_;    // Class of SingleTargetCache. | 
|   767   static RawClass* unlinkedcall_class_;         // Class of UnlinkedCall. |   767   static RawClass* unlinkedcall_class_;         // Class of UnlinkedCall. | 
|   768   static RawClass* icdata_class_;               // Class of ICData. |   768   static RawClass* icdata_class_;               // Class of ICData. | 
|   769   static RawClass* megamorphic_cache_class_;    // Class of MegamorphiCache. |   769   static RawClass* megamorphic_cache_class_;    // Class of MegamorphiCache. | 
|   770   static RawClass* subtypetestcache_class_;     // Class of SubtypeTestCache. |   770   static RawClass* subtypetestcache_class_;     // Class of SubtypeTestCache. | 
| (...skipping 3625 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4396   intptr_t Length() const; |  4396   intptr_t Length() const; | 
|  4397   void SetLength(intptr_t value) const; |  4397   void SetLength(intptr_t value) const; | 
|  4398   void CopyData(GrowableArray<uint8_t>* data); |  4398   void CopyData(GrowableArray<uint8_t>* data); | 
|  4399  |  4399  | 
|  4400   FINAL_HEAP_OBJECT_IMPLEMENTATION(CodeSourceMap, Object); |  4400   FINAL_HEAP_OBJECT_IMPLEMENTATION(CodeSourceMap, Object); | 
|  4401   friend class Class; |  4401   friend class Class; | 
|  4402   friend class Object; |  4402   friend class Object; | 
|  4403 }; |  4403 }; | 
|  4404  |  4404  | 
|  4405  |  4405  | 
|  4406 class Stackmap : public Object { |  4406 class StackMap : public Object { | 
|  4407  public: |  4407  public: | 
|  4408   static const intptr_t kNoMaximum = -1; |  4408   static const intptr_t kNoMaximum = -1; | 
|  4409   static const intptr_t kNoMinimum = -1; |  4409   static const intptr_t kNoMinimum = -1; | 
|  4410  |  4410  | 
|  4411   bool IsObject(intptr_t index) const { |  4411   bool IsObject(intptr_t index) const { | 
|  4412     ASSERT(InRange(index)); |  4412     ASSERT(InRange(index)); | 
|  4413     return GetBit(index); |  4413     return GetBit(index); | 
|  4414   } |  4414   } | 
|  4415  |  4415  | 
|  4416   intptr_t Length() const { return raw_ptr()->length_; } |  4416   intptr_t Length() const { return raw_ptr()->length_; } | 
|  4417  |  4417  | 
|  4418   uint32_t PcOffset() const { return raw_ptr()->pc_offset_; } |  4418   uint32_t PcOffset() const { return raw_ptr()->pc_offset_; } | 
|  4419   void SetPcOffset(uint32_t value) const { |  4419   void SetPcOffset(uint32_t value) const { | 
|  4420     ASSERT(value <= kMaxUint32); |  4420     ASSERT(value <= kMaxUint32); | 
|  4421     StoreNonPointer(&raw_ptr()->pc_offset_, value); |  4421     StoreNonPointer(&raw_ptr()->pc_offset_, value); | 
|  4422   } |  4422   } | 
|  4423  |  4423  | 
|  4424   intptr_t SlowPathBitCount() const { return raw_ptr()->slow_path_bit_count_; } |  4424   intptr_t SlowPathBitCount() const { return raw_ptr()->slow_path_bit_count_; } | 
|  4425   void SetSlowPathBitCount(intptr_t bit_count) const { |  4425   void SetSlowPathBitCount(intptr_t bit_count) const { | 
|  4426     ASSERT(bit_count < kMaxInt32); |  4426     ASSERT(bit_count < kMaxInt32); | 
|  4427     StoreNonPointer(&raw_ptr()->slow_path_bit_count_, bit_count); |  4427     StoreNonPointer(&raw_ptr()->slow_path_bit_count_, bit_count); | 
|  4428   } |  4428   } | 
|  4429  |  4429  | 
|  4430   bool Equals(const Stackmap& other) const { |  4430   bool Equals(const StackMap& other) const { | 
|  4431     if (Length() != other.Length()) { |  4431     if (Length() != other.Length()) { | 
|  4432       return false; |  4432       return false; | 
|  4433     } |  4433     } | 
|  4434     NoSafepointScope no_safepoint; |  4434     NoSafepointScope no_safepoint; | 
|  4435     return memcmp(raw_ptr(), other.raw_ptr(), InstanceSize(Length())) == 0; |  4435     return memcmp(raw_ptr(), other.raw_ptr(), InstanceSize(Length())) == 0; | 
|  4436   } |  4436   } | 
|  4437  |  4437  | 
|  4438   static const intptr_t kMaxLengthInBytes = kSmiMax; |  4438   static const intptr_t kMaxLengthInBytes = kSmiMax; | 
|  4439  |  4439  | 
|  4440   static intptr_t InstanceSize() { |  4440   static intptr_t InstanceSize() { | 
|  4441     ASSERT(sizeof(RawStackmap) == OFFSET_OF_RETURNED_VALUE(RawStackmap, data)); |  4441     ASSERT(sizeof(RawStackMap) == OFFSET_OF_RETURNED_VALUE(RawStackMap, data)); | 
|  4442     return 0; |  4442     return 0; | 
|  4443   } |  4443   } | 
|  4444   static intptr_t InstanceSize(intptr_t length) { |  4444   static intptr_t InstanceSize(intptr_t length) { | 
|  4445     ASSERT(length >= 0); |  4445     ASSERT(length >= 0); | 
|  4446     // The stackmap payload is in an array of bytes. |  4446     // The stackmap payload is in an array of bytes. | 
|  4447     intptr_t payload_size = Utils::RoundUp(length, kBitsPerByte) / kBitsPerByte; |  4447     intptr_t payload_size = Utils::RoundUp(length, kBitsPerByte) / kBitsPerByte; | 
|  4448     return RoundedAllocationSize(sizeof(RawStackmap) + payload_size); |  4448     return RoundedAllocationSize(sizeof(RawStackMap) + payload_size); | 
|  4449   } |  4449   } | 
|  4450   static RawStackmap* New(intptr_t pc_offset, |  4450   static RawStackMap* New(intptr_t pc_offset, | 
|  4451                           BitmapBuilder* bmap, |  4451                           BitmapBuilder* bmap, | 
|  4452                           intptr_t register_bit_count); |  4452                           intptr_t register_bit_count); | 
|  4453  |  4453  | 
|  4454   static RawStackmap* New(intptr_t length, |  4454   static RawStackMap* New(intptr_t length, | 
|  4455                           intptr_t register_bit_count, |  4455                           intptr_t register_bit_count, | 
|  4456                           intptr_t pc_offset); |  4456                           intptr_t pc_offset); | 
|  4457  |  4457  | 
|  4458  private: |  4458  private: | 
|  4459   void SetLength(intptr_t length) const { |  4459   void SetLength(intptr_t length) const { | 
|  4460     StoreNonPointer(&raw_ptr()->length_, length); |  4460     StoreNonPointer(&raw_ptr()->length_, length); | 
|  4461   } |  4461   } | 
|  4462  |  4462  | 
|  4463   bool InRange(intptr_t index) const { return index < Length(); } |  4463   bool InRange(intptr_t index) const { return index < Length(); } | 
|  4464  |  4464  | 
|  4465   bool GetBit(intptr_t bit_index) const; |  4465   bool GetBit(intptr_t bit_index) const; | 
|  4466   void SetBit(intptr_t bit_index, bool value) const; |  4466   void SetBit(intptr_t bit_index, bool value) const; | 
|  4467  |  4467  | 
|  4468   FINAL_HEAP_OBJECT_IMPLEMENTATION(Stackmap, Object); |  4468   FINAL_HEAP_OBJECT_IMPLEMENTATION(StackMap, Object); | 
|  4469   friend class BitmapBuilder; |  4469   friend class BitmapBuilder; | 
|  4470   friend class Class; |  4470   friend class Class; | 
|  4471 }; |  4471 }; | 
|  4472  |  4472  | 
|  4473  |  4473  | 
|  4474 class ExceptionHandlers : public Object { |  4474 class ExceptionHandlers : public Object { | 
|  4475  public: |  4475  public: | 
|  4476   static const intptr_t kInvalidPcOffset = 0; |  4476   static const intptr_t kInvalidPcOffset = 0; | 
|  4477  |  4477  | 
|  4478   intptr_t num_entries() const; |  4478   intptr_t num_entries() const; | 
|  4479  |  4479  | 
|  4480   void GetHandlerInfo(intptr_t try_index, |  4480   void GetHandlerInfo(intptr_t try_index, | 
|  4481                       RawExceptionHandlers::HandlerInfo* info) const; |  4481                       RawExceptionHandlers::HandlerInfo* info) const; | 
|  4482  |  4482  | 
|  4483   uword HandlerPCOffset(intptr_t try_index) const; |  4483   uword HandlerPCOffset(intptr_t try_index) const; | 
|  4484   intptr_t OuterTryIndex(intptr_t try_index) const; |  4484   intptr_t OuterTryIndex(intptr_t try_index) const; | 
|  4485   bool NeedsStacktrace(intptr_t try_index) const; |  4485   bool NeedsStackTrace(intptr_t try_index) const; | 
|  4486  |  4486  | 
|  4487   void SetHandlerInfo(intptr_t try_index, |  4487   void SetHandlerInfo(intptr_t try_index, | 
|  4488                       intptr_t outer_try_index, |  4488                       intptr_t outer_try_index, | 
|  4489                       uword handler_pc_offset, |  4489                       uword handler_pc_offset, | 
|  4490                       bool needs_stacktrace, |  4490                       bool needs_stacktrace, | 
|  4491                       bool has_catch_all) const; |  4491                       bool has_catch_all) const; | 
|  4492  |  4492  | 
|  4493   RawArray* GetHandledTypes(intptr_t try_index) const; |  4493   RawArray* GetHandledTypes(intptr_t try_index) const; | 
|  4494   void SetHandledTypes(intptr_t try_index, const Array& handled_types) const; |  4494   void SetHandledTypes(intptr_t try_index, const Array& handled_types) const; | 
|  4495   bool HasCatchAll(intptr_t try_index) const; |  4495   bool HasCatchAll(intptr_t try_index) const; | 
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4673     UNREACHABLE(); |  4673     UNREACHABLE(); | 
|  4674     return NULL; |  4674     return NULL; | 
|  4675 #else |  4675 #else | 
|  4676     return raw_ptr()->deopt_info_array_; |  4676     return raw_ptr()->deopt_info_array_; | 
|  4677 #endif |  4677 #endif | 
|  4678   } |  4678   } | 
|  4679   void set_deopt_info_array(const Array& array) const; |  4679   void set_deopt_info_array(const Array& array) const; | 
|  4680  |  4680  | 
|  4681   RawArray* stackmaps() const { return raw_ptr()->stackmaps_; } |  4681   RawArray* stackmaps() const { return raw_ptr()->stackmaps_; } | 
|  4682   void set_stackmaps(const Array& maps) const; |  4682   void set_stackmaps(const Array& maps) const; | 
|  4683   RawStackmap* GetStackmap(uint32_t pc_offset, |  4683   RawStackMap* GetStackMap(uint32_t pc_offset, | 
|  4684                            Array* stackmaps, |  4684                            Array* stackmaps, | 
|  4685                            Stackmap* map) const; |  4685                            StackMap* map) const; | 
|  4686  |  4686  | 
|  4687   enum { |  4687   enum { | 
|  4688     kSCallTableOffsetEntry = 0, |  4688     kSCallTableOffsetEntry = 0, | 
|  4689     kSCallTableFunctionEntry = 1, |  4689     kSCallTableFunctionEntry = 1, | 
|  4690     kSCallTableCodeEntry = 2, |  4690     kSCallTableCodeEntry = 2, | 
|  4691     kSCallTableEntryLength = 3, |  4691     kSCallTableEntryLength = 3, | 
|  4692   }; |  4692   }; | 
|  4693  |  4693  | 
|  4694   void set_static_calls_target_table(const Array& value) const; |  4694   void set_static_calls_target_table(const Array& value) const; | 
|  4695   RawArray* static_calls_target_table() const { |  4695   RawArray* static_calls_target_table() const { | 
| (...skipping 3672 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  8368                           Dart_Port origin_id, |  8368                           Dart_Port origin_id, | 
|  8369                           Heap::Space space = Heap::kNew); |  8369                           Heap::Space space = Heap::kNew); | 
|  8370  |  8370  | 
|  8371  private: |  8371  private: | 
|  8372   FINAL_HEAP_OBJECT_IMPLEMENTATION(SendPort, Instance); |  8372   FINAL_HEAP_OBJECT_IMPLEMENTATION(SendPort, Instance); | 
|  8373   friend class Class; |  8373   friend class Class; | 
|  8374 }; |  8374 }; | 
|  8375  |  8375  | 
|  8376  |  8376  | 
|  8377 // Internal stacktrace object used in exceptions for printing stack traces. |  8377 // Internal stacktrace object used in exceptions for printing stack traces. | 
|  8378 class Stacktrace : public Instance { |  8378 class StackTrace : public Instance { | 
|  8379  public: |  8379  public: | 
|  8380   static const int kPreallocatedStackdepth = 30; |  8380   static const int kPreallocatedStackdepth = 30; | 
|  8381  |  8381  | 
|  8382   intptr_t Length() const; |  8382   intptr_t Length() const; | 
|  8383  |  8383  | 
|  8384   RawFunction* FunctionAtFrame(intptr_t frame_index) const; |  8384   RawFunction* FunctionAtFrame(intptr_t frame_index) const; | 
|  8385  |  8385  | 
|  8386   RawCode* CodeAtFrame(intptr_t frame_index) const; |  8386   RawCode* CodeAtFrame(intptr_t frame_index) const; | 
|  8387   void SetCodeAtFrame(intptr_t frame_index, const Code& code) const; |  8387   void SetCodeAtFrame(intptr_t frame_index, const Code& code) const; | 
|  8388  |  8388  | 
|  8389   RawSmi* PcOffsetAtFrame(intptr_t frame_index) const; |  8389   RawSmi* PcOffsetAtFrame(intptr_t frame_index) const; | 
|  8390   void SetPcOffsetAtFrame(intptr_t frame_index, const Smi& pc_offset) const; |  8390   void SetPcOffsetAtFrame(intptr_t frame_index, const Smi& pc_offset) const; | 
|  8391   void set_expand_inlined(bool value) const; |  8391   void set_expand_inlined(bool value) const; | 
|  8392  |  8392  | 
|  8393   static intptr_t InstanceSize() { |  8393   static intptr_t InstanceSize() { | 
|  8394     return RoundedAllocationSize(sizeof(RawStacktrace)); |  8394     return RoundedAllocationSize(sizeof(RawStackTrace)); | 
|  8395   } |  8395   } | 
|  8396   static RawStacktrace* New(const Array& code_array, |  8396   static RawStackTrace* New(const Array& code_array, | 
|  8397                             const Array& pc_offset_array, |  8397                             const Array& pc_offset_array, | 
|  8398                             Heap::Space space = Heap::kNew); |  8398                             Heap::Space space = Heap::kNew); | 
|  8399  |  8399  | 
|  8400   // The argument 'max_frames' limits the number of printed frames. |  8400   // The argument 'max_frames' limits the number of printed frames. | 
|  8401   const char* ToCStringInternal(intptr_t* frame_index, |  8401   const char* ToCStringInternal(intptr_t* frame_index, | 
|  8402                                 intptr_t max_frames = kMaxInt32) const; |  8402                                 intptr_t max_frames = kMaxInt32) const; | 
|  8403  |  8403  | 
|  8404  private: |  8404  private: | 
|  8405   void set_code_array(const Array& code_array) const; |  8405   void set_code_array(const Array& code_array) const; | 
|  8406   void set_pc_offset_array(const Array& pc_offset_array) const; |  8406   void set_pc_offset_array(const Array& pc_offset_array) const; | 
|  8407   bool expand_inlined() const; |  8407   bool expand_inlined() const; | 
|  8408  |  8408  | 
|  8409   FINAL_HEAP_OBJECT_IMPLEMENTATION(Stacktrace, Instance); |  8409   FINAL_HEAP_OBJECT_IMPLEMENTATION(StackTrace, Instance); | 
|  8410   friend class Class; |  8410   friend class Class; | 
|  8411   friend class Debugger; |  8411   friend class Debugger; | 
|  8412 }; |  8412 }; | 
|  8413  |  8413  | 
|  8414  |  8414  | 
|  8415 // Internal JavaScript regular expression object. |  8415 // Internal JavaScript regular expression object. | 
|  8416 class RegExp : public Instance { |  8416 class RegExp : public Instance { | 
|  8417  public: |  8417  public: | 
|  8418   // Meaning of RegExType: |  8418   // Meaning of RegExType: | 
|  8419   // kUninitialized: the type of th regexp has not been initialized yet. |  8419   // kUninitialized: the type of th regexp has not been initialized yet. | 
| (...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  8886  |  8886  | 
|  8887 inline void TypeArguments::SetHash(intptr_t value) const { |  8887 inline void TypeArguments::SetHash(intptr_t value) const { | 
|  8888   // This is only safe because we create a new Smi, which does not cause |  8888   // This is only safe because we create a new Smi, which does not cause | 
|  8889   // heap allocation. |  8889   // heap allocation. | 
|  8890   StoreSmi(&raw_ptr()->hash_, Smi::New(value)); |  8890   StoreSmi(&raw_ptr()->hash_, Smi::New(value)); | 
|  8891 } |  8891 } | 
|  8892  |  8892  | 
|  8893 }  // namespace dart |  8893 }  // namespace dart | 
|  8894  |  8894  | 
|  8895 #endif  // RUNTIME_VM_OBJECT_H_ |  8895 #endif  // RUNTIME_VM_OBJECT_H_ | 
| OLD | NEW |