Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(784)

Side by Side Diff: runtime/vm/raw_object.h

Issue 1644793002: Replace intptr_t with TokenDescriptor (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_RAW_OBJECT_H_ 5 #ifndef VM_RAW_OBJECT_H_
6 #define VM_RAW_OBJECT_H_ 6 #define VM_RAW_OBJECT_H_
7 7
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/atomic.h" 9 #include "vm/atomic.h"
10 #include "vm/globals.h" 10 #include "vm/globals.h"
11 #include "vm/snapshot.h" 11 #include "vm/snapshot.h"
12 #include "vm/token.h" 12 #include "vm/token.h"
13 #include "vm/token_descriptor.h"
13 #include "vm/verified_memory.h" 14 #include "vm/verified_memory.h"
14 15
15 namespace dart { 16 namespace dart {
16 17
17 // Macrobatics to define the Object hierarchy of VM implementation classes. 18 // Macrobatics to define the Object hierarchy of VM implementation classes.
18 #define CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY(V) \ 19 #define CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY(V) \
19 V(Class) \ 20 V(Class) \
20 V(UnresolvedClass) \ 21 V(UnresolvedClass) \
21 V(TypeArguments) \ 22 V(TypeArguments) \
22 V(PatchClass) \ 23 V(PatchClass) \
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 RawObject* canonical_types_; // An array of canonicalized types of this class 669 RawObject* canonical_types_; // An array of canonicalized types of this class
669 // or the canonical type. 670 // or the canonical type.
670 RawArray* invocation_dispatcher_cache_; // Cache for dispatcher functions. 671 RawArray* invocation_dispatcher_cache_; // Cache for dispatcher functions.
671 RawArray* cha_codes_; // CHA optimized codes. 672 RawArray* cha_codes_; // CHA optimized codes.
672 RawCode* allocation_stub_; // Stub code for allocation of instances. 673 RawCode* allocation_stub_; // Stub code for allocation of instances.
673 RawObject** to() { 674 RawObject** to() {
674 return reinterpret_cast<RawObject**>(&ptr()->allocation_stub_); 675 return reinterpret_cast<RawObject**>(&ptr()->allocation_stub_);
675 } 676 }
676 677
677 cpp_vtable handle_vtable_; 678 cpp_vtable handle_vtable_;
678 int32_t token_pos_; 679 TokenDescriptor token_pos_;
679 int32_t instance_size_in_words_; // Size if fixed len or 0 if variable len. 680 int32_t instance_size_in_words_; // Size if fixed len or 0 if variable len.
680 int32_t type_arguments_field_offset_in_words_; // Offset of type args fld. 681 int32_t type_arguments_field_offset_in_words_; // Offset of type args fld.
681 int32_t next_field_offset_in_words_; // Offset of the next instance field. 682 int32_t next_field_offset_in_words_; // Offset of the next instance field.
682 classid_t id_; // Class Id, also index in the class table. 683 classid_t id_; // Class Id, also index in the class table.
683 int16_t num_type_arguments_; // Number of type arguments in flattened vector. 684 int16_t num_type_arguments_; // Number of type arguments in flattened vector.
684 int16_t num_own_type_arguments_; // Number of non-overlapping type arguments. 685 int16_t num_own_type_arguments_; // Number of non-overlapping type arguments.
685 uint16_t num_native_fields_; // Number of native fields in class. 686 uint16_t num_native_fields_; // Number of native fields in class.
686 uint16_t state_bits_; 687 uint16_t state_bits_;
687 688
688 friend class Instance; 689 friend class Instance;
689 friend class Object; 690 friend class Object;
690 friend class RawInstance; 691 friend class RawInstance;
691 friend class RawInstructions; 692 friend class RawInstructions;
692 friend class SnapshotReader; 693 friend class SnapshotReader;
693 }; 694 };
694 695
695 696
696 class RawUnresolvedClass : public RawObject { 697 class RawUnresolvedClass : public RawObject {
697 RAW_HEAP_OBJECT_IMPLEMENTATION(UnresolvedClass); 698 RAW_HEAP_OBJECT_IMPLEMENTATION(UnresolvedClass);
698 699
699 RawObject** from() { 700 RawObject** from() {
700 return reinterpret_cast<RawObject**>(&ptr()->library_prefix_); 701 return reinterpret_cast<RawObject**>(&ptr()->library_prefix_);
701 } 702 }
702 RawLibraryPrefix* library_prefix_; // Library prefix qualifier for the ident. 703 RawLibraryPrefix* library_prefix_; // Library prefix qualifier for the ident.
703 RawString* ident_; // Name of the unresolved identifier. 704 RawString* ident_; // Name of the unresolved identifier.
704 RawObject** to() { 705 RawObject** to() {
705 return reinterpret_cast<RawObject**>(&ptr()->ident_); 706 return reinterpret_cast<RawObject**>(&ptr()->ident_);
706 } 707 }
707 int32_t token_pos_; 708 TokenDescriptor token_pos_;
708 }; 709 };
709 710
710 711
711 class RawTypeArguments : public RawObject { 712 class RawTypeArguments : public RawObject {
712 private: 713 private:
713 RAW_HEAP_OBJECT_IMPLEMENTATION(TypeArguments); 714 RAW_HEAP_OBJECT_IMPLEMENTATION(TypeArguments);
714 715
715 RawObject** from() { 716 RawObject** from() {
716 return reinterpret_cast<RawObject**>(&ptr()->instantiations_); 717 return reinterpret_cast<RawObject**>(&ptr()->instantiations_);
717 } 718 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 RawObject** to_no_code() { 807 RawObject** to_no_code() {
807 return reinterpret_cast<RawObject**>(&ptr()->ic_data_array_); 808 return reinterpret_cast<RawObject**>(&ptr()->ic_data_array_);
808 } 809 }
809 RawCode* code_; // Currently active code. 810 RawCode* code_; // Currently active code.
810 RawCode* unoptimized_code_; // Unoptimized code, keep it after optimization. 811 RawCode* unoptimized_code_; // Unoptimized code, keep it after optimization.
811 RawObject** to() { 812 RawObject** to() {
812 return reinterpret_cast<RawObject**>(&ptr()->unoptimized_code_); 813 return reinterpret_cast<RawObject**>(&ptr()->unoptimized_code_);
813 } 814 }
814 uword entry_point_; 815 uword entry_point_;
815 816
816 int32_t token_pos_; 817 TokenDescriptor token_pos_;
817 int32_t end_token_pos_; 818 TokenDescriptor end_token_pos_;
818 int32_t usage_counter_; // Incremented while function is running. 819 int32_t usage_counter_; // Incremented while function is running.
819 int16_t num_fixed_parameters_; 820 int16_t num_fixed_parameters_;
820 int16_t num_optional_parameters_; // > 0: positional; < 0: named. 821 int16_t num_optional_parameters_; // > 0: positional; < 0: named.
821 int16_t deoptimization_counter_; 822 int16_t deoptimization_counter_;
822 uint32_t kind_tag_; // See Function::KindTagBits. 823 uint32_t kind_tag_; // See Function::KindTagBits.
823 uint16_t optimized_instruction_count_; 824 uint16_t optimized_instruction_count_;
824 uint16_t optimized_call_site_count_; 825 uint16_t optimized_call_site_count_;
825 }; 826 };
826 827
827 828
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 } initializer_; 884 } initializer_;
884 RawObject** to_precompiled_snapshot() { 885 RawObject** to_precompiled_snapshot() {
885 return reinterpret_cast<RawObject**>(&ptr()->initializer_); 886 return reinterpret_cast<RawObject**>(&ptr()->initializer_);
886 } 887 }
887 RawArray* dependent_code_; 888 RawArray* dependent_code_;
888 RawSmi* guarded_list_length_; 889 RawSmi* guarded_list_length_;
889 RawObject** to() { 890 RawObject** to() {
890 return reinterpret_cast<RawObject**>(&ptr()->guarded_list_length_); 891 return reinterpret_cast<RawObject**>(&ptr()->guarded_list_length_);
891 } 892 }
892 893
893 int32_t token_pos_; 894 TokenDescriptor token_pos_;
894 classid_t guarded_cid_; 895 classid_t guarded_cid_;
895 classid_t is_nullable_; // kNullCid if field can contain null value and 896 classid_t is_nullable_; // kNullCid if field can contain null value and
896 // any other value otherwise. 897 // any other value otherwise.
897 // Offset to the guarded length field inside an instance of class matching 898 // Offset to the guarded length field inside an instance of class matching
898 // guarded_cid_. Stored corrected by -kHeapObjectTag to simplify code 899 // guarded_cid_. Stored corrected by -kHeapObjectTag to simplify code
899 // generated on platforms with weak addressing modes (ARM, MIPS). 900 // generated on platforms with weak addressing modes (ARM, MIPS).
900 int8_t guarded_list_length_in_object_offset_; 901 int8_t guarded_list_length_in_object_offset_;
901 902
902 uint8_t kind_bits_; // static, final, const, has initializer.... 903 uint8_t kind_bits_; // static, final, const, has initializer....
903 }; 904 };
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
1269 kIndexBias = 1 << (kIndexSize - 1), 1270 kIndexBias = 1 << (kIndexSize - 1),
1270 kMaxIndex = (1 << (kIndexSize - 1)) - 1, 1271 kMaxIndex = (1 << (kIndexSize - 1)) - 1,
1271 }; 1272 };
1272 1273
1273 class IndexBits : public BitField<int32_t, kIndexPos, kIndexSize> {}; 1274 class IndexBits : public BitField<int32_t, kIndexPos, kIndexSize> {};
1274 class KindBits : public BitField<int8_t, kKindPos, kKindSize>{}; 1275 class KindBits : public BitField<int8_t, kKindPos, kKindSize>{};
1275 1276
1276 struct VarInfo { 1277 struct VarInfo {
1277 int32_t index_kind; // Bitfield for slot index on stack or in context, 1278 int32_t index_kind; // Bitfield for slot index on stack or in context,
1278 // and Entry kind of type VarInfoKind. 1279 // and Entry kind of type VarInfoKind.
1279 int32_t begin_pos; // Token position of scope start. 1280 TokenDescriptor begin_pos; // Token position of scope start.
1280 int32_t end_pos; // Token position of scope end. 1281 TokenDescriptor end_pos; // Token position of scope end.
1281 int16_t scope_id; // Scope to which the variable belongs. 1282 int16_t scope_id; // Scope to which the variable belongs.
1282 1283
1283 VarInfoKind kind() const { 1284 VarInfoKind kind() const {
1284 return static_cast<VarInfoKind>(KindBits::decode(index_kind)); 1285 return static_cast<VarInfoKind>(KindBits::decode(index_kind));
1285 } 1286 }
1286 void set_kind(VarInfoKind kind) { 1287 void set_kind(VarInfoKind kind) {
1287 index_kind = KindBits::update(kind, index_kind); 1288 index_kind = KindBits::update(kind, index_kind);
1288 } 1289 }
1289 int32_t index() const { 1290 int32_t index() const {
1290 return IndexBits::decode(index_kind) - kIndexBias; 1291 return IndexBits::decode(index_kind) - kIndexBias;
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
1485 RawObject** from() { 1486 RawObject** from() {
1486 return reinterpret_cast<RawObject**>(&ptr()->previous_error_); 1487 return reinterpret_cast<RawObject**>(&ptr()->previous_error_);
1487 } 1488 }
1488 RawError* previous_error_; // May be null. 1489 RawError* previous_error_; // May be null.
1489 RawScript* script_; 1490 RawScript* script_;
1490 RawString* message_; 1491 RawString* message_;
1491 RawString* formatted_message_; // Incl. previous error's formatted message. 1492 RawString* formatted_message_; // Incl. previous error's formatted message.
1492 RawObject** to() { 1493 RawObject** to() {
1493 return reinterpret_cast<RawObject**>(&ptr()->formatted_message_); 1494 return reinterpret_cast<RawObject**>(&ptr()->formatted_message_);
1494 } 1495 }
1495 int32_t token_pos_; // Source position in script_. 1496 TokenDescriptor token_pos_; // Source position in script_.
1496 bool report_after_token_; // Report message at or after the token. 1497 bool report_after_token_; // Report message at or after the token.
1497 int8_t kind_; // Of type LanguageError::Kind. 1498 int8_t kind_; // Of type LanguageError::Kind.
1498 }; 1499 };
1499 1500
1500 1501
1501 class RawUnhandledException : public RawError { 1502 class RawUnhandledException : public RawError {
1502 RAW_HEAP_OBJECT_IMPLEMENTATION(UnhandledException); 1503 RAW_HEAP_OBJECT_IMPLEMENTATION(UnhandledException);
1503 1504
1504 RawObject** from() { 1505 RawObject** from() {
1505 return reinterpret_cast<RawObject**>(&ptr()->exception_); 1506 return reinterpret_cast<RawObject**>(&ptr()->exception_);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1573 1574
1574 RawObject** from() { 1575 RawObject** from() {
1575 return reinterpret_cast<RawObject**>(&ptr()->type_class_); 1576 return reinterpret_cast<RawObject**>(&ptr()->type_class_);
1576 } 1577 }
1577 RawObject* type_class_; // Either resolved class or unresolved class. 1578 RawObject* type_class_; // Either resolved class or unresolved class.
1578 RawTypeArguments* arguments_; 1579 RawTypeArguments* arguments_;
1579 RawLanguageError* error_; // Error object if type is malformed or malbounded. 1580 RawLanguageError* error_; // Error object if type is malformed or malbounded.
1580 RawObject** to() { 1581 RawObject** to() {
1581 return reinterpret_cast<RawObject**>(&ptr()->error_); 1582 return reinterpret_cast<RawObject**>(&ptr()->error_);
1582 } 1583 }
1583 int32_t token_pos_; 1584 TokenDescriptor token_pos_;
1584 int8_t type_state_; 1585 int8_t type_state_;
1585 }; 1586 };
1586 1587
1587 1588
1588 class RawFunctionType : public RawAbstractType { 1589 class RawFunctionType : public RawAbstractType {
1589 private: 1590 private:
1590 RAW_HEAP_OBJECT_IMPLEMENTATION(FunctionType); 1591 RAW_HEAP_OBJECT_IMPLEMENTATION(FunctionType);
1591 1592
1592 RawObject** from() { 1593 RawObject** from() {
1593 return reinterpret_cast<RawObject**>(&ptr()->scope_class_); 1594 return reinterpret_cast<RawObject**>(&ptr()->scope_class_);
1594 } 1595 }
1595 RawClass* scope_class_; 1596 RawClass* scope_class_;
1596 RawTypeArguments* arguments_; 1597 RawTypeArguments* arguments_;
1597 RawFunction* signature_; 1598 RawFunction* signature_;
1598 RawLanguageError* error_; // Error object if type is malformed or malbounded. 1599 RawLanguageError* error_; // Error object if type is malformed or malbounded.
1599 RawObject** to() { 1600 RawObject** to() {
1600 return reinterpret_cast<RawObject**>(&ptr()->error_); 1601 return reinterpret_cast<RawObject**>(&ptr()->error_);
1601 } 1602 }
1602 int32_t token_pos_; 1603 TokenDescriptor token_pos_;
1603 int8_t type_state_; 1604 int8_t type_state_;
1604 }; 1605 };
1605 1606
1606 1607
1607 class RawTypeRef : public RawAbstractType { 1608 class RawTypeRef : public RawAbstractType {
1608 private: 1609 private:
1609 RAW_HEAP_OBJECT_IMPLEMENTATION(TypeRef); 1610 RAW_HEAP_OBJECT_IMPLEMENTATION(TypeRef);
1610 1611
1611 RawObject** from() { 1612 RawObject** from() {
1612 return reinterpret_cast<RawObject**>(&ptr()->type_); 1613 return reinterpret_cast<RawObject**>(&ptr()->type_);
1613 } 1614 }
1614 RawAbstractType* type_; // The referenced type. 1615 RawAbstractType* type_; // The referenced type.
1615 RawObject** to() { 1616 RawObject** to() {
1616 return reinterpret_cast<RawObject**>(&ptr()->type_); 1617 return reinterpret_cast<RawObject**>(&ptr()->type_);
1617 } 1618 }
1618 }; 1619 };
1619 1620
1620 1621
1621 class RawTypeParameter : public RawAbstractType { 1622 class RawTypeParameter : public RawAbstractType {
1622 private: 1623 private:
1623 RAW_HEAP_OBJECT_IMPLEMENTATION(TypeParameter); 1624 RAW_HEAP_OBJECT_IMPLEMENTATION(TypeParameter);
1624 1625
1625 RawObject** from() { 1626 RawObject** from() {
1626 return reinterpret_cast<RawObject**>(&ptr()->parameterized_class_); 1627 return reinterpret_cast<RawObject**>(&ptr()->parameterized_class_);
1627 } 1628 }
1628 RawClass* parameterized_class_; 1629 RawClass* parameterized_class_;
1629 RawString* name_; 1630 RawString* name_;
1630 RawAbstractType* bound_; // ObjectType if no explicit bound specified. 1631 RawAbstractType* bound_; // ObjectType if no explicit bound specified.
1631 RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->bound_); } 1632 RawObject** to() { return reinterpret_cast<RawObject**>(&ptr()->bound_); }
1632 int32_t token_pos_; 1633 TokenDescriptor token_pos_;
1633 int16_t index_; 1634 int16_t index_;
1634 int8_t type_state_; 1635 int8_t type_state_;
1635 }; 1636 };
1636 1637
1637 1638
1638 class RawBoundedType : public RawAbstractType { 1639 class RawBoundedType : public RawAbstractType {
1639 private: 1640 private:
1640 RAW_HEAP_OBJECT_IMPLEMENTATION(BoundedType); 1641 RAW_HEAP_OBJECT_IMPLEMENTATION(BoundedType);
1641 1642
1642 RawObject** from() { 1643 RawObject** from() {
(...skipping 687 matching lines...) Expand 10 before | Expand all | Expand 10 after
2330 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid == 2331 COMPILE_ASSERT(kExternalTypedDataInt8ArrayCid ==
2331 kTypedDataInt8ArrayViewCid + 15); 2332 kTypedDataInt8ArrayViewCid + 15);
2332 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14); 2333 COMPILE_ASSERT(kByteBufferCid == kExternalTypedDataInt8ArrayCid + 14);
2333 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1); 2334 COMPILE_ASSERT(kNullCid == kByteBufferCid + 1);
2334 return (kNullCid - kTypedDataInt8ArrayCid); 2335 return (kNullCid - kTypedDataInt8ArrayCid);
2335 } 2336 }
2336 2337
2337 } // namespace dart 2338 } // namespace dart
2338 2339
2339 #endif // VM_RAW_OBJECT_H_ 2340 #endif // VM_RAW_OBJECT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698