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" |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 inline Handle<InterceptorInfo> GetInterceptor() const { | 256 inline Handle<InterceptorInfo> GetInterceptor() const { |
257 DCHECK_EQ(INTERCEPTOR, state_); | 257 DCHECK_EQ(INTERCEPTOR, state_); |
258 InterceptorInfo* result = | 258 InterceptorInfo* result = |
259 IsElement() ? GetInterceptor<true>(JSObject::cast(*holder_)) | 259 IsElement() ? GetInterceptor<true>(JSObject::cast(*holder_)) |
260 : GetInterceptor<false>(JSObject::cast(*holder_)); | 260 : GetInterceptor<false>(JSObject::cast(*holder_)); |
261 return handle(result, isolate_); | 261 return handle(result, isolate_); |
262 } | 262 } |
263 Handle<Object> GetDataValue() const; | 263 Handle<Object> GetDataValue() const; |
264 void WriteDataValue(Handle<Object> value); | 264 void WriteDataValue(Handle<Object> value); |
265 inline void UpdateProtector() { | 265 inline void UpdateProtector() { |
266 if (FLAG_harmony_species && !IsElement() && | 266 if (IsElement()) return; |
267 (*name_ == heap()->constructor_string() || | 267 if (*name_ == heap()->is_concat_spreadable_symbol() || |
268 *name_ == heap()->species_symbol())) { | 268 (FLAG_harmony_species && (*name_ == heap()->constructor_string() || |
| 269 *name_ == heap()->species_symbol()))) { |
269 InternalUpdateProtector(); | 270 InternalUpdateProtector(); |
270 } | 271 } |
271 } | 272 } |
272 | 273 |
273 private: | 274 private: |
274 void InternalUpdateProtector(); | 275 void InternalUpdateProtector(); |
275 | 276 |
276 enum class InterceptorState { | 277 enum class InterceptorState { |
277 kUninitialized, | 278 kUninitialized, |
278 kSkipNonMasking, | 279 kSkipNonMasking, |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 Isolate* isolate, Handle<Object> receiver, uint32_t index = kMaxUInt32); | 347 Isolate* isolate, Handle<Object> receiver, uint32_t index = kMaxUInt32); |
347 inline static Handle<JSReceiver> GetRoot(Isolate* isolate, | 348 inline static Handle<JSReceiver> GetRoot(Isolate* isolate, |
348 Handle<Object> receiver, | 349 Handle<Object> receiver, |
349 uint32_t index = kMaxUInt32) { | 350 uint32_t index = kMaxUInt32) { |
350 if (receiver->IsJSReceiver()) return Handle<JSReceiver>::cast(receiver); | 351 if (receiver->IsJSReceiver()) return Handle<JSReceiver>::cast(receiver); |
351 return GetRootForNonJSReceiver(isolate, receiver, index); | 352 return GetRootForNonJSReceiver(isolate, receiver, index); |
352 } | 353 } |
353 | 354 |
354 State NotFound(JSReceiver* const holder) const; | 355 State NotFound(JSReceiver* const holder) const; |
355 | 356 |
356 bool HolderIsInContextIndex(uint32_t index) const; | |
357 | |
358 // If configuration_ becomes mutable, update | 357 // If configuration_ becomes mutable, update |
359 // HolderIsReceiverOrHiddenPrototype. | 358 // HolderIsReceiverOrHiddenPrototype. |
360 const Configuration configuration_; | 359 const Configuration configuration_; |
361 State state_; | 360 State state_; |
362 bool has_property_; | 361 bool has_property_; |
363 InterceptorState interceptor_state_; | 362 InterceptorState interceptor_state_; |
364 PropertyDetails property_details_; | 363 PropertyDetails property_details_; |
365 Isolate* const isolate_; | 364 Isolate* const isolate_; |
366 Handle<Name> name_; | 365 Handle<Name> name_; |
367 Handle<Object> transition_; | 366 Handle<Object> transition_; |
368 const Handle<Object> receiver_; | 367 const Handle<Object> receiver_; |
369 Handle<JSReceiver> holder_; | 368 Handle<JSReceiver> holder_; |
370 const Handle<JSReceiver> initial_holder_; | 369 const Handle<JSReceiver> initial_holder_; |
371 const uint32_t index_; | 370 const uint32_t index_; |
372 uint32_t number_; | 371 uint32_t number_; |
373 }; | 372 }; |
374 | 373 |
375 | 374 |
376 } // namespace internal | 375 } // namespace internal |
377 } // namespace v8 | 376 } // namespace v8 |
378 | 377 |
379 #endif // V8_LOOKUP_H_ | 378 #endif // V8_LOOKUP_H_ |
OLD | NEW |