OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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_CRANKSHAFT_HYDROGEN_H_ | 5 #ifndef V8_CRANKSHAFT_HYDROGEN_H_ |
6 #define V8_CRANKSHAFT_HYDROGEN_H_ | 6 #define V8_CRANKSHAFT_HYDROGEN_H_ |
7 | 7 |
8 #include "src/accessors.h" | 8 #include "src/accessors.h" |
9 #include "src/allocation.h" | 9 #include "src/allocation.h" |
10 #include "src/ast/ast-type-bounds.h" | 10 #include "src/ast/ast-type-bounds.h" |
(...skipping 2438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2449 PropertyAccessInfo(HOptimizedGraphBuilder* builder, | 2449 PropertyAccessInfo(HOptimizedGraphBuilder* builder, |
2450 PropertyAccessType access_type, Handle<Map> map, | 2450 PropertyAccessType access_type, Handle<Map> map, |
2451 Handle<Name> name) | 2451 Handle<Name> name) |
2452 : builder_(builder), | 2452 : builder_(builder), |
2453 access_type_(access_type), | 2453 access_type_(access_type), |
2454 map_(map), | 2454 map_(map), |
2455 name_(isolate()->factory()->InternalizeName(name)), | 2455 name_(isolate()->factory()->InternalizeName(name)), |
2456 field_type_(HType::Tagged()), | 2456 field_type_(HType::Tagged()), |
2457 access_(HObjectAccess::ForMap()), | 2457 access_(HObjectAccess::ForMap()), |
2458 lookup_type_(NOT_FOUND), | 2458 lookup_type_(NOT_FOUND), |
2459 details_(PropertyDetails::Empty()) {} | 2459 details_(PropertyDetails::Empty()), |
| 2460 store_mode_(STORE_TO_INITIALIZED_ENTRY) {} |
| 2461 |
| 2462 // Ensure the full store is performed. |
| 2463 void MarkAsInitializingStore(); |
| 2464 |
| 2465 StoreFieldOrKeyedMode StoreMode(); |
2460 | 2466 |
2461 // Checkes whether this PropertyAccessInfo can be handled as a monomorphic | 2467 // Checkes whether this PropertyAccessInfo can be handled as a monomorphic |
2462 // load named. It additionally fills in the fields necessary to generate the | 2468 // load named. It additionally fills in the fields necessary to generate the |
2463 // lookup code. | 2469 // lookup code. |
2464 bool CanAccessMonomorphic(); | 2470 bool CanAccessMonomorphic(); |
2465 | 2471 |
2466 // Checks whether all types behave uniform when loading name. If all maps | 2472 // Checks whether all types behave uniform when loading name. If all maps |
2467 // behave the same, a single monomorphic load instruction can be emitted, | 2473 // behave the same, a single monomorphic load instruction can be emitted, |
2468 // guarded by a single map-checks instruction that whether the receiver is | 2474 // guarded by a single map-checks instruction that whether the receiver is |
2469 // an instance of any of the types. | 2475 // an instance of any of the types. |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2611 Handle<JSObject> api_holder_; | 2617 Handle<JSObject> api_holder_; |
2612 Handle<Object> constant_; | 2618 Handle<Object> constant_; |
2613 SmallMapList field_maps_; | 2619 SmallMapList field_maps_; |
2614 HType field_type_; | 2620 HType field_type_; |
2615 HObjectAccess access_; | 2621 HObjectAccess access_; |
2616 | 2622 |
2617 enum { NOT_FOUND, DESCRIPTOR_TYPE, TRANSITION_TYPE } lookup_type_; | 2623 enum { NOT_FOUND, DESCRIPTOR_TYPE, TRANSITION_TYPE } lookup_type_; |
2618 Handle<Map> transition_; | 2624 Handle<Map> transition_; |
2619 int number_; | 2625 int number_; |
2620 PropertyDetails details_; | 2626 PropertyDetails details_; |
| 2627 StoreFieldOrKeyedMode store_mode_; |
2621 }; | 2628 }; |
2622 | 2629 |
2623 HValue* BuildMonomorphicAccess(PropertyAccessInfo* info, HValue* object, | 2630 HValue* BuildMonomorphicAccess(PropertyAccessInfo* info, HValue* object, |
2624 HValue* checked_object, HValue* value, | 2631 HValue* checked_object, HValue* value, |
2625 BailoutId ast_id, BailoutId return_id, | 2632 BailoutId ast_id, BailoutId return_id, |
2626 bool can_inline_accessor = true); | 2633 bool can_inline_accessor = true); |
2627 | 2634 |
2628 HValue* BuildNamedAccess(PropertyAccessType access, BailoutId ast_id, | 2635 HValue* BuildNamedAccess(PropertyAccessType access, BailoutId ast_id, |
2629 BailoutId reutrn_id, Expression* expr, | 2636 BailoutId reutrn_id, Expression* expr, |
2630 FeedbackVectorSlot slot, HValue* object, | 2637 FeedbackVectorSlot slot, HValue* object, |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2982 } | 2989 } |
2983 | 2990 |
2984 private: | 2991 private: |
2985 HOptimizedGraphBuilder* builder_; | 2992 HOptimizedGraphBuilder* builder_; |
2986 }; | 2993 }; |
2987 | 2994 |
2988 } // namespace internal | 2995 } // namespace internal |
2989 } // namespace v8 | 2996 } // namespace v8 |
2990 | 2997 |
2991 #endif // V8_CRANKSHAFT_HYDROGEN_H_ | 2998 #endif // V8_CRANKSHAFT_HYDROGEN_H_ |
OLD | NEW |