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 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 static RawClass* void_class() { return void_class_; } | 251 static RawClass* void_class() { return void_class_; } |
252 static RawClass* unresolved_class_class() { return unresolved_class_class_; } | 252 static RawClass* unresolved_class_class() { return unresolved_class_class_; } |
253 static RawClass* type_class() { return type_class_; } | 253 static RawClass* type_class() { return type_class_; } |
254 static RawClass* type_parameter_class() { return type_parameter_class_; } | 254 static RawClass* type_parameter_class() { return type_parameter_class_; } |
255 static RawClass* type_arguments_class() { return type_arguments_class_; } | 255 static RawClass* type_arguments_class() { return type_arguments_class_; } |
256 static RawClass* instantiated_type_arguments_class() { | 256 static RawClass* instantiated_type_arguments_class() { |
257 return instantiated_type_arguments_class_; | 257 return instantiated_type_arguments_class_; |
258 } | 258 } |
259 static RawClass* patch_class_class() { return patch_class_class_; } | 259 static RawClass* patch_class_class() { return patch_class_class_; } |
260 static RawClass* function_class() { return function_class_; } | 260 static RawClass* function_class() { return function_class_; } |
| 261 static RawClass* closure_data_class() { return closure_data_class_; } |
261 static RawClass* field_class() { return field_class_; } | 262 static RawClass* field_class() { return field_class_; } |
262 static RawClass* literal_token_class() { return literal_token_class_; } | 263 static RawClass* literal_token_class() { return literal_token_class_; } |
263 static RawClass* token_stream_class() { return token_stream_class_; } | 264 static RawClass* token_stream_class() { return token_stream_class_; } |
264 static RawClass* script_class() { return script_class_; } | 265 static RawClass* script_class() { return script_class_; } |
265 static RawClass* library_class() { return library_class_; } | 266 static RawClass* library_class() { return library_class_; } |
266 static RawClass* library_prefix_class() { return library_prefix_class_; } | 267 static RawClass* library_prefix_class() { return library_prefix_class_; } |
267 static RawClass* code_class() { return code_class_; } | 268 static RawClass* code_class() { return code_class_; } |
268 static RawClass* instructions_class() { return instructions_class_; } | 269 static RawClass* instructions_class() { return instructions_class_; } |
269 static RawClass* pc_descriptors_class() { return pc_descriptors_class_; } | 270 static RawClass* pc_descriptors_class() { return pc_descriptors_class_; } |
270 static RawClass* stackmap_class() { return stackmap_class_; } | 271 static RawClass* stackmap_class() { return stackmap_class_; } |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 static RawClass* dynamic_class_; // Class of the 'Dynamic' type. | 382 static RawClass* dynamic_class_; // Class of the 'Dynamic' type. |
382 static RawClass* void_class_; // Class of the 'void' type. | 383 static RawClass* void_class_; // Class of the 'void' type. |
383 static RawClass* unresolved_class_class_; // Class of UnresolvedClass. | 384 static RawClass* unresolved_class_class_; // Class of UnresolvedClass. |
384 static RawClass* type_class_; // Class of Type. | 385 static RawClass* type_class_; // Class of Type. |
385 static RawClass* type_parameter_class_; // Class of TypeParameter vm object. | 386 static RawClass* type_parameter_class_; // Class of TypeParameter vm object. |
386 // Class of the TypeArguments vm object. | 387 // Class of the TypeArguments vm object. |
387 static RawClass* type_arguments_class_; | 388 static RawClass* type_arguments_class_; |
388 static RawClass* instantiated_type_arguments_class_; // Class of Inst..ments. | 389 static RawClass* instantiated_type_arguments_class_; // Class of Inst..ments. |
389 static RawClass* patch_class_class_; // Class of the PatchClass vm object. | 390 static RawClass* patch_class_class_; // Class of the PatchClass vm object. |
390 static RawClass* function_class_; // Class of the Function vm object. | 391 static RawClass* function_class_; // Class of the Function vm object. |
| 392 static RawClass* closure_data_class_; // Class of ClosureData vm obj. |
391 static RawClass* field_class_; // Class of the Field vm object. | 393 static RawClass* field_class_; // Class of the Field vm object. |
392 static RawClass* literal_token_class_; // Class of LiteralToken vm object. | 394 static RawClass* literal_token_class_; // Class of LiteralToken vm object. |
393 static RawClass* token_stream_class_; // Class of the TokenStream vm object. | 395 static RawClass* token_stream_class_; // Class of the TokenStream vm object. |
394 static RawClass* script_class_; // Class of the Script vm object. | 396 static RawClass* script_class_; // Class of the Script vm object. |
395 static RawClass* library_class_; // Class of the Library vm object. | 397 static RawClass* library_class_; // Class of the Library vm object. |
396 static RawClass* library_prefix_class_; // Class of Library prefix vm object. | 398 static RawClass* library_prefix_class_; // Class of Library prefix vm object. |
397 static RawClass* code_class_; // Class of the Code vm object. | 399 static RawClass* code_class_; // Class of the Code vm object. |
398 static RawClass* instructions_class_; // Class of the Instructions vm object. | 400 static RawClass* instructions_class_; // Class of the Instructions vm object. |
399 static RawClass* pc_descriptors_class_; // Class of PcDescriptors vm object. | 401 static RawClass* pc_descriptors_class_; // Class of PcDescriptors vm object. |
400 static RawClass* stackmap_class_; // Class of Stackmap vm object. | 402 static RawClass* stackmap_class_; // Class of Stackmap vm object. |
(...skipping 981 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1382 | 1384 |
1383 // Return the most recently compiled and installed code for this function. | 1385 // Return the most recently compiled and installed code for this function. |
1384 // It is not the only Code object that points to this function. | 1386 // It is not the only Code object that points to this function. |
1385 RawCode* CurrentCode() const { return raw_ptr()->code_; } | 1387 RawCode* CurrentCode() const { return raw_ptr()->code_; } |
1386 | 1388 |
1387 RawCode* unoptimized_code() const { return raw_ptr()->unoptimized_code_; } | 1389 RawCode* unoptimized_code() const { return raw_ptr()->unoptimized_code_; } |
1388 void set_unoptimized_code(const Code& value) const; | 1390 void set_unoptimized_code(const Code& value) const; |
1389 static intptr_t code_offset() { return OFFSET_OF(RawFunction, code_); } | 1391 static intptr_t code_offset() { return OFFSET_OF(RawFunction, code_); } |
1390 inline bool HasCode() const; | 1392 inline bool HasCode() const; |
1391 | 1393 |
1392 RawContextScope* context_scope() const { return raw_ptr()->context_scope_; } | 1394 RawContextScope* context_scope() const; |
1393 void set_context_scope(const ContextScope& value) const; | 1395 void set_context_scope(const ContextScope& value) const; |
1394 | 1396 |
1395 // Enclosing function of this local function. | 1397 // Enclosing function of this local function. |
1396 RawFunction* parent_function() const { return raw_ptr()->parent_function_; } | 1398 RawFunction* parent_function() const; |
1397 | 1399 |
1398 // Signature class of this closure function or signature function. | 1400 // Signature class of this closure function or signature function. |
1399 RawClass* signature_class() const { return raw_ptr()->signature_class_; } | 1401 RawClass* signature_class() const; |
1400 void set_signature_class(const Class& value) const; | 1402 void set_signature_class(const Class& value) const; |
1401 | 1403 |
1402 RawCode* closure_allocation_stub() const { | 1404 RawCode* closure_allocation_stub() const; |
1403 return raw_ptr()->closure_allocation_stub_; | |
1404 } | |
1405 void set_closure_allocation_stub(const Code& value) const; | 1405 void set_closure_allocation_stub(const Code& value) const; |
1406 | 1406 |
1407 // Return the closure function implicitly created for this function. | 1407 // Return the closure function implicitly created for this function. |
1408 // If none exists yet, create one and remember it. | 1408 // If none exists yet, create one and remember it. |
1409 RawFunction* ImplicitClosureFunction() const; | 1409 RawFunction* ImplicitClosureFunction() const; |
1410 | 1410 |
1411 RawFunction::Kind kind() const { | 1411 RawFunction::Kind kind() const { |
1412 return KindBits::decode(raw_ptr()->kind_tag_); | 1412 return KindBits::decode(raw_ptr()->kind_tag_); |
1413 } | 1413 } |
1414 | 1414 |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1672 public BitField<RawFunction::Kind, kKindTagBit, kKindTagSize> {}; // NOLINT | 1672 public BitField<RawFunction::Kind, kKindTagBit, kKindTagSize> {}; // NOLINT |
1673 | 1673 |
1674 void set_name(const String& value) const; | 1674 void set_name(const String& value) const; |
1675 void set_kind(RawFunction::Kind value) const; | 1675 void set_kind(RawFunction::Kind value) const; |
1676 void set_is_static(bool value) const; | 1676 void set_is_static(bool value) const; |
1677 void set_is_const(bool value) const; | 1677 void set_is_const(bool value) const; |
1678 void set_is_external(bool value) const; | 1678 void set_is_external(bool value) const; |
1679 void set_parent_function(const Function& value) const; | 1679 void set_parent_function(const Function& value) const; |
1680 void set_owner(const Object& value) const; | 1680 void set_owner(const Object& value) const; |
1681 void set_token_pos(intptr_t value) const; | 1681 void set_token_pos(intptr_t value) const; |
| 1682 RawFunction* implicit_closure_function() const; |
1682 void set_implicit_closure_function(const Function& value) const; | 1683 void set_implicit_closure_function(const Function& value) const; |
1683 void set_kind_tag(intptr_t value) const; | 1684 void set_kind_tag(intptr_t value) const; |
| 1685 void set_data(const Object& value) const; |
1684 static RawFunction* New(); | 1686 static RawFunction* New(); |
1685 | 1687 |
1686 RawString* BuildSignature(bool instantiate, | 1688 RawString* BuildSignature(bool instantiate, |
1687 NameVisibility name_visibility, | 1689 NameVisibility name_visibility, |
1688 const AbstractTypeArguments& instantiator) const; | 1690 const AbstractTypeArguments& instantiator) const; |
1689 | 1691 |
1690 // Check the subtype or 'more specific' relationship. | 1692 // Check the subtype or 'more specific' relationship. |
1691 bool TypeTest(TypeTestKind test_kind, | 1693 bool TypeTest(TypeTestKind test_kind, |
1692 const AbstractTypeArguments& type_arguments, | 1694 const AbstractTypeArguments& type_arguments, |
1693 const Function& other, | 1695 const Function& other, |
1694 const AbstractTypeArguments& other_type_arguments, | 1696 const AbstractTypeArguments& other_type_arguments, |
1695 Error* malformed_error) const; | 1697 Error* malformed_error) const; |
1696 | 1698 |
1697 // Checks the type of the formal parameter at the given position for | 1699 // Checks the type of the formal parameter at the given position for |
1698 // subtyping or 'more specific' relationship between the type of this function | 1700 // subtyping or 'more specific' relationship between the type of this function |
1699 // and the type of the other function. | 1701 // and the type of the other function. |
1700 bool TestParameterType(TypeTestKind test_kind, | 1702 bool TestParameterType(TypeTestKind test_kind, |
1701 intptr_t parameter_position, | 1703 intptr_t parameter_position, |
1702 intptr_t other_parameter_position, | 1704 intptr_t other_parameter_position, |
1703 const AbstractTypeArguments& type_arguments, | 1705 const AbstractTypeArguments& type_arguments, |
1704 const Function& other, | 1706 const Function& other, |
1705 const AbstractTypeArguments& other_type_arguments, | 1707 const AbstractTypeArguments& other_type_arguments, |
1706 Error* malformed_error) const; | 1708 Error* malformed_error) const; |
1707 | 1709 |
1708 HEAP_OBJECT_IMPLEMENTATION(Function, Object); | 1710 HEAP_OBJECT_IMPLEMENTATION(Function, Object); |
1709 friend class Class; | 1711 friend class Class; |
1710 }; | 1712 }; |
1711 | 1713 |
1712 | 1714 |
| 1715 class ClosureData: public Object { |
| 1716 public: |
| 1717 static intptr_t InstanceSize() { |
| 1718 return RoundedAllocationSize(sizeof(RawClosureData)); |
| 1719 } |
| 1720 |
| 1721 private: |
| 1722 RawContextScope* context_scope() const { return raw_ptr()->context_scope_; } |
| 1723 void set_context_scope(const ContextScope& value) const; |
| 1724 |
| 1725 // Enclosing function of this local function. |
| 1726 RawFunction* parent_function() const { return raw_ptr()->parent_function_; } |
| 1727 void set_parent_function(const Function& value) const; |
| 1728 |
| 1729 // Signature class of this closure function or signature function. |
| 1730 RawClass* signature_class() const { return raw_ptr()->signature_class_; } |
| 1731 void set_signature_class(const Class& value) const; |
| 1732 |
| 1733 RawCode* closure_allocation_stub() const { |
| 1734 return raw_ptr()->closure_allocation_stub_; |
| 1735 } |
| 1736 void set_closure_allocation_stub(const Code& value) const; |
| 1737 |
| 1738 static RawClosureData* New(); |
| 1739 |
| 1740 HEAP_OBJECT_IMPLEMENTATION(ClosureData, Object); |
| 1741 friend class Class; |
| 1742 friend class Function; |
| 1743 friend class HeapProfiler; |
| 1744 }; |
| 1745 |
| 1746 |
1713 class Field : public Object { | 1747 class Field : public Object { |
1714 public: | 1748 public: |
1715 RawString* name() const { return raw_ptr()->name_; } | 1749 RawString* name() const { return raw_ptr()->name_; } |
1716 RawString* UserVisibleName() const; | 1750 RawString* UserVisibleName() const; |
1717 | 1751 |
1718 bool is_static() const { return StaticBit::decode(raw_ptr()->kind_bits_); } | 1752 bool is_static() const { return StaticBit::decode(raw_ptr()->kind_bits_); } |
1719 bool is_final() const { return FinalBit::decode(raw_ptr()->kind_bits_); } | 1753 bool is_final() const { return FinalBit::decode(raw_ptr()->kind_bits_); } |
1720 bool is_const() const { return ConstBit::decode(raw_ptr()->kind_bits_); } | 1754 bool is_const() const { return ConstBit::decode(raw_ptr()->kind_bits_); } |
1721 | 1755 |
1722 inline intptr_t Offset() const; | 1756 inline intptr_t Offset() const; |
(...skipping 3852 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5575 if (this->CharAt(i) != str.CharAt(begin_index + i)) { | 5609 if (this->CharAt(i) != str.CharAt(begin_index + i)) { |
5576 return false; | 5610 return false; |
5577 } | 5611 } |
5578 } | 5612 } |
5579 return true; | 5613 return true; |
5580 } | 5614 } |
5581 | 5615 |
5582 } // namespace dart | 5616 } // namespace dart |
5583 | 5617 |
5584 #endif // VM_OBJECT_H_ | 5618 #endif // VM_OBJECT_H_ |
OLD | NEW |