OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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_TOKEN_POSITION_H_ | 5 #ifndef RUNTIME_VM_TOKEN_POSITION_H_ |
6 #define RUNTIME_VM_TOKEN_POSITION_H_ | 6 #define RUNTIME_VM_TOKEN_POSITION_H_ |
7 | 7 |
8 #include "platform/utils.h" | 8 #include "platform/utils.h" |
9 #include "vm/allocation.h" | 9 #include "vm/allocation.h" |
10 | 10 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 return !(*this > b); | 72 return !(*this > b); |
73 } | 73 } |
74 | 74 |
75 bool operator>=(const TokenPosition& b) { | 75 bool operator>=(const TokenPosition& b) { |
76 // TODO(johnmccutchan): Assert that this is a source position. | 76 // TODO(johnmccutchan): Assert that this is a source position. |
77 return !(*this < b); | 77 return !(*this < b); |
78 } | 78 } |
79 | 79 |
80 static const intptr_t kMaxSentinelDescriptors = 64; | 80 static const intptr_t kMaxSentinelDescriptors = 64; |
81 | 81 |
82 #define DECLARE_VALUES(name, value) static const TokenPosition k##name; | 82 #define DECLARE_VALUES(name, value) \ |
| 83 static const intptr_t k##name##Pos = value; \ |
| 84 static const TokenPosition k##name; |
83 SENTINEL_TOKEN_DESCRIPTORS(DECLARE_VALUES); | 85 SENTINEL_TOKEN_DESCRIPTORS(DECLARE_VALUES); |
84 #undef DECLARE_VALUES | 86 #undef DECLARE_VALUES |
| 87 static const intptr_t kMinSourcePos = 0; |
85 static const TokenPosition kMinSource; | 88 static const TokenPosition kMinSource; |
| 89 static const intptr_t kMaxSourcePos = kSmiMax32 - kMaxSentinelDescriptors - 2; |
86 static const TokenPosition kMaxSource; | 90 static const TokenPosition kMaxSource; |
87 | 91 |
88 // Decode from a snapshot. | 92 // Decode from a snapshot. |
89 static TokenPosition SnapshotDecode(int32_t value); | 93 static TokenPosition SnapshotDecode(int32_t value); |
90 | 94 |
91 // Encode for writing into a snapshot. | 95 // Encode for writing into a snapshot. |
92 int32_t SnapshotEncode(); | 96 int32_t SnapshotEncode(); |
93 | 97 |
94 // Increment the token position. | 98 // Increment the token position. |
95 TokenPosition Next() { | 99 TokenPosition Next() { |
96 ASSERT(IsReal()); | 100 ASSERT(IsReal()); |
97 value_++; | 101 value_++; |
98 return *this; | 102 return *this; |
99 } | 103 } |
100 | 104 |
101 // The raw value. | 105 // The raw value. |
102 // TODO(johnmccutchan): Make this private. | 106 // TODO(johnmccutchan): Make this private. |
103 intptr_t value() const { return value_; } | 107 intptr_t value() const { return value_; } |
104 | 108 |
105 // Return the source position. | 109 // Return the source position. |
106 intptr_t Pos() const { | 110 intptr_t Pos() const { |
107 if (IsSynthetic()) { | 111 if (IsSynthetic()) { |
108 return FromSynthetic().Pos(); | 112 return FromSynthetic().Pos(); |
109 } | 113 } |
110 return value_; | 114 return value_; |
111 } | 115 } |
112 | 116 |
113 // Token position constants. | |
114 static const intptr_t kNoSourcePos = -1; | |
115 static const intptr_t kMinSourcePos = 0; | |
116 static const intptr_t kMaxSourcePos = kSmiMax32 - kMaxSentinelDescriptors - 2; | |
117 | |
118 // Is |this| a classifying sentinel source position? | 117 // Is |this| a classifying sentinel source position? |
119 // Classifying positions are used by the profiler to group instructions whose | 118 // Classifying positions are used by the profiler to group instructions whose |
120 // cost isn't naturally attributable to a source location. | 119 // cost isn't naturally attributable to a source location. |
121 bool IsClassifying() const { | 120 bool IsClassifying() const { |
122 return (value_ >= kBox.value()) && (value_ <= kLast.value()); | 121 return (value_ >= kBox.value()) && (value_ <= kLast.value()); |
123 } | 122 } |
124 | 123 |
125 // Is |this| the no source position sentinel? | 124 // Is |this| the no source position sentinel? |
126 bool IsNoSource() const { return *this == kNoSource; } | 125 bool IsNoSource() const { return *this == kNoSource; } |
127 | 126 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 | 185 |
187 private: | 186 private: |
188 int32_t value_; | 187 int32_t value_; |
189 | 188 |
190 DISALLOW_ALLOCATION(); | 189 DISALLOW_ALLOCATION(); |
191 }; | 190 }; |
192 | 191 |
193 } // namespace dart | 192 } // namespace dart |
194 | 193 |
195 #endif // RUNTIME_VM_TOKEN_POSITION_H_ | 194 #endif // RUNTIME_VM_TOKEN_POSITION_H_ |
OLD | NEW |