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 2124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2135 void set_guarded_list_length(intptr_t list_length) const; | 2135 void set_guarded_list_length(intptr_t list_length) const; |
2136 static intptr_t guarded_list_length_offset() { | 2136 static intptr_t guarded_list_length_offset() { |
2137 return OFFSET_OF(RawField, guarded_list_length_); | 2137 return OFFSET_OF(RawField, guarded_list_length_); |
2138 } | 2138 } |
2139 bool needs_length_check() const { | 2139 bool needs_length_check() const { |
2140 const bool r = guarded_list_length() >= Field::kUnknownFixedLength; | 2140 const bool r = guarded_list_length() >= Field::kUnknownFixedLength; |
2141 ASSERT(!r || is_final()); | 2141 ASSERT(!r || is_final()); |
2142 return r; | 2142 return r; |
2143 } | 2143 } |
2144 | 2144 |
2145 bool IsUnboxedField() const { | |
2146 return is_unboxing_candidate() | |
2147 && !is_final() | |
2148 && guarded_cid() == kDoubleCid && !is_nullable(); | |
srdjan
2013/12/13 18:13:17
APP
Florian Schneider
2013/12/16 13:08:09
Done.
| |
2149 } | |
2150 | |
2151 bool IsPotentialUnboxedField() const { | |
2152 return is_unboxing_candidate() | |
2153 && (IsUnboxedField() || | |
2154 (!is_final() && guarded_cid() == kIllegalCid)); | |
srdjan
2013/12/13 18:13:17
APP
Florian Schneider
2013/12/16 13:08:09
Done.
| |
2155 } | |
2156 | |
2157 bool is_unboxing_candidate() const { | |
2158 return UnboxingCandidateBit::decode(raw_ptr()->kind_bits_); | |
2159 } | |
2160 void set_is_unboxing_candidate(bool b) const { | |
2161 set_kind_bits(UnboxingCandidateBit::update(b, raw_ptr()->kind_bits_)); | |
2162 } | |
2163 | |
2145 static bool IsExternalizableCid(intptr_t cid) { | 2164 static bool IsExternalizableCid(intptr_t cid) { |
2146 return (cid == kOneByteStringCid) || (cid == kTwoByteStringCid); | 2165 return (cid == kOneByteStringCid) || (cid == kTwoByteStringCid); |
2147 } | 2166 } |
2148 | 2167 |
2149 enum { | 2168 enum { |
2150 kUnknownFixedLength = -1, | 2169 kUnknownFixedLength = -1, |
2151 kNoFixedLength = -2, | 2170 kNoFixedLength = -2, |
2152 }; | 2171 }; |
2153 // Returns false if any value read from this field is guaranteed to be | 2172 // Returns false if any value read from this field is guaranteed to be |
2154 // not null. | 2173 // not null. |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2199 // instance to be supplied here. | 2218 // instance to be supplied here. |
2200 virtual void PrintToJSONStreamWithInstance( | 2219 virtual void PrintToJSONStreamWithInstance( |
2201 JSONStream* stream, const Instance& instance, bool ref) const; | 2220 JSONStream* stream, const Instance& instance, bool ref) const; |
2202 | 2221 |
2203 private: | 2222 private: |
2204 enum { | 2223 enum { |
2205 kConstBit = 1, | 2224 kConstBit = 1, |
2206 kStaticBit, | 2225 kStaticBit, |
2207 kFinalBit, | 2226 kFinalBit, |
2208 kHasInitializerBit, | 2227 kHasInitializerBit, |
2228 kUnboxingCandidateBit | |
2209 }; | 2229 }; |
2210 class ConstBit : public BitField<bool, kConstBit, 1> {}; | 2230 class ConstBit : public BitField<bool, kConstBit, 1> {}; |
2211 class StaticBit : public BitField<bool, kStaticBit, 1> {}; | 2231 class StaticBit : public BitField<bool, kStaticBit, 1> {}; |
2212 class FinalBit : public BitField<bool, kFinalBit, 1> {}; | 2232 class FinalBit : public BitField<bool, kFinalBit, 1> {}; |
2213 class HasInitializerBit : public BitField<bool, kHasInitializerBit, 1> {}; | 2233 class HasInitializerBit : public BitField<bool, kHasInitializerBit, 1> {}; |
2234 class UnboxingCandidateBit : public BitField<bool, | |
2235 kUnboxingCandidateBit, 1> { | |
2236 }; | |
2214 | 2237 |
2215 // Update guarded class id and nullability of the field to reflect assignment | 2238 // Update guarded class id and nullability of the field to reflect assignment |
2216 // of the value with the given class id to this field. Returns true, if | 2239 // of the value with the given class id to this field. Returns true, if |
2217 // deoptimization of dependent code is required. | 2240 // deoptimization of dependent code is required. |
2218 bool UpdateCid(intptr_t cid) const; | 2241 bool UpdateCid(intptr_t cid) const; |
2219 | 2242 |
2220 // Update guarded class length of the field to reflect assignment of the | 2243 // Update guarded class length of the field to reflect assignment of the |
2221 // value with the given length. Returns true if deoptimization of dependent | 2244 // value with the given length. Returns true if deoptimization of dependent |
2222 // code is required. | 2245 // code is required. |
2223 bool UpdateLength(intptr_t length) const; | 2246 bool UpdateLength(intptr_t length) const; |
(...skipping 4289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6513 | 6536 |
6514 | 6537 |
6515 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, | 6538 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, |
6516 intptr_t index) { | 6539 intptr_t index) { |
6517 return array.At((index * kEntryLength) + kTargetFunctionIndex); | 6540 return array.At((index * kEntryLength) + kTargetFunctionIndex); |
6518 } | 6541 } |
6519 | 6542 |
6520 } // namespace dart | 6543 } // namespace dart |
6521 | 6544 |
6522 #endif // VM_OBJECT_H_ | 6545 #endif // VM_OBJECT_H_ |
OLD | NEW |