OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_LOOKUP_H_ | 5 #ifndef V8_LOOKUP_H_ |
6 #define V8_LOOKUP_H_ | 6 #define V8_LOOKUP_H_ |
7 | 7 |
8 #include "src/factory.h" | 8 #include "src/factory.h" |
9 #include "src/isolate.h" | 9 #include "src/isolate.h" |
10 #include "src/objects.h" | 10 #include "src/objects.h" |
11 | 11 |
12 namespace v8 { | 12 namespace v8 { |
13 namespace internal { | 13 namespace internal { |
14 | 14 |
15 class LookupIterator FINAL BASE_EMBEDDED { | 15 class LookupIterator FINAL BASE_EMBEDDED { |
16 public: | 16 public: |
17 enum Configuration { | 17 enum Configuration { |
18 // Configuration bits. | 18 // Configuration bits. |
19 kAccessCheck = 1 << 0, | 19 kHidden = 1 << 0, |
20 kHidden = 1 << 1, | 20 kInterceptor = 1 << 1, |
21 kInterceptor = 1 << 2, | 21 kPrototypeChain = 1 << 2, |
22 kPrototypeChain = 1 << 3, | |
23 | 22 |
24 // Convience combinations of bits. | 23 // Convience combinations of bits. |
25 OWN_PROPERTY = 0, | 24 OWN_SKIP_INTERCEPTOR = 0, |
26 OWN_SKIP_INTERCEPTOR = kAccessCheck, | 25 OWN = kInterceptor, |
27 OWN = kAccessCheck | kInterceptor, | 26 HIDDEN_SKIP_INTERCEPTOR = kHidden, |
28 HIDDEN_PROPERTY = kHidden, | 27 HIDDEN = kHidden | kInterceptor, |
29 HIDDEN_SKIP_INTERCEPTOR = kAccessCheck | kHidden, | 28 PROTOTYPE_CHAIN_SKIP_INTERCEPTOR = kHidden | kPrototypeChain, |
30 HIDDEN = kAccessCheck | kHidden | kInterceptor, | 29 PROTOTYPE_CHAIN = kHidden | kPrototypeChain | kInterceptor |
31 PROTOTYPE_CHAIN_PROPERTY = kHidden | kPrototypeChain, | |
32 PROTOTYPE_CHAIN_SKIP_INTERCEPTOR = kAccessCheck | kHidden | kPrototypeChain, | |
33 PROTOTYPE_CHAIN = kAccessCheck | kHidden | kPrototypeChain | kInterceptor | |
34 }; | 30 }; |
35 | 31 |
36 enum State { | 32 enum State { |
37 ACCESS_CHECK, | 33 ACCESS_CHECK, |
38 INTERCEPTOR, | 34 INTERCEPTOR, |
39 JSPROXY, | 35 JSPROXY, |
40 NOT_FOUND, | 36 NOT_FOUND, |
41 PROPERTY, | 37 PROPERTY, |
42 TRANSITION, | 38 TRANSITION, |
43 // Set state_ to BEFORE_PROPERTY to ensure that the next lookup will be a | 39 // Set state_ to BEFORE_PROPERTY to ensure that the next lookup will be a |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 | 180 |
185 bool IsBootstrapping() const; | 181 bool IsBootstrapping() const; |
186 | 182 |
187 // Methods that fetch data from the holder ensure they always have a holder. | 183 // Methods that fetch data from the holder ensure they always have a holder. |
188 // This means the receiver needs to be present as opposed to just the receiver | 184 // This means the receiver needs to be present as opposed to just the receiver |
189 // map. Other objects in the prototype chain are transitively guaranteed to be | 185 // map. Other objects in the prototype chain are transitively guaranteed to be |
190 // present via the receiver map. | 186 // present via the receiver map. |
191 bool is_guaranteed_to_have_holder() const { | 187 bool is_guaranteed_to_have_holder() const { |
192 return !maybe_receiver_.is_null(); | 188 return !maybe_receiver_.is_null(); |
193 } | 189 } |
194 bool check_access_check() const { | |
195 return (configuration_ & kAccessCheck) != 0; | |
196 } | |
197 bool check_hidden() const { return (configuration_ & kHidden) != 0; } | 190 bool check_hidden() const { return (configuration_ & kHidden) != 0; } |
198 bool check_interceptor() const { | 191 bool check_interceptor() const { |
199 return !IsBootstrapping() && (configuration_ & kInterceptor) != 0; | 192 return !IsBootstrapping() && (configuration_ & kInterceptor) != 0; |
200 } | 193 } |
201 bool check_prototype_chain() const { | 194 bool check_prototype_chain() const { |
202 return (configuration_ & kPrototypeChain) != 0; | 195 return (configuration_ & kPrototypeChain) != 0; |
203 } | 196 } |
204 int descriptor_number() const { | 197 int descriptor_number() const { |
205 DCHECK(has_property_); | 198 DCHECK(has_property_); |
206 DCHECK_EQ(DESCRIPTOR, property_encoding_); | 199 DCHECK_EQ(DESCRIPTOR, property_encoding_); |
(...skipping 29 matching lines...) Expand all Loading... |
236 MaybeHandle<Object> maybe_receiver_; | 229 MaybeHandle<Object> maybe_receiver_; |
237 MaybeHandle<JSReceiver> maybe_holder_; | 230 MaybeHandle<JSReceiver> maybe_holder_; |
238 | 231 |
239 int number_; | 232 int number_; |
240 }; | 233 }; |
241 | 234 |
242 | 235 |
243 } } // namespace v8::internal | 236 } } // namespace v8::internal |
244 | 237 |
245 #endif // V8_LOOKUP_H_ | 238 #endif // V8_LOOKUP_H_ |
OLD | NEW |