Chromium Code Reviews| 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 #include "src/compiler/ast-graph-builder.h" | 5 #include "src/compiler/ast-graph-builder.h" |
| 6 | 6 |
| 7 #include "src/compiler.h" | 7 #include "src/compiler.h" |
| 8 #include "src/compiler/ast-loop-assignment-analyzer.h" | 8 #include "src/compiler/ast-loop-assignment-analyzer.h" |
| 9 #include "src/compiler/control-builders.h" | 9 #include "src/compiler/control-builders.h" |
| 10 #include "src/compiler/js-type-feedback.h" | 10 #include "src/compiler/js-type-feedback.h" |
| (...skipping 1815 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1826 for (AccessorTable::Iterator it = accessor_table.begin(); | 1826 for (AccessorTable::Iterator it = accessor_table.begin(); |
| 1827 it != accessor_table.end(); ++it) { | 1827 it != accessor_table.end(); ++it) { |
| 1828 VisitForValue(it->first); | 1828 VisitForValue(it->first); |
| 1829 VisitForValueOrNull(it->second->getter); | 1829 VisitForValueOrNull(it->second->getter); |
| 1830 VectorSlotPair feedback_getter = CreateVectorSlotPair( | 1830 VectorSlotPair feedback_getter = CreateVectorSlotPair( |
| 1831 expr->SlotForHomeObject(it->second->getter, &store_slot_index)); | 1831 expr->SlotForHomeObject(it->second->getter, &store_slot_index)); |
| 1832 BuildSetHomeObject(environment()->Top(), literal, it->second->getter, | 1832 BuildSetHomeObject(environment()->Top(), literal, it->second->getter, |
| 1833 feedback_getter); | 1833 feedback_getter); |
| 1834 VisitForValueOrNull(it->second->setter); | 1834 VisitForValueOrNull(it->second->setter); |
| 1835 VectorSlotPair feedback_setter = CreateVectorSlotPair( | 1835 VectorSlotPair feedback_setter = CreateVectorSlotPair( |
| 1836 expr->SlotForHomeObject(it->second->getter, &store_slot_index)); | 1836 expr->SlotForHomeObject(it->second->setter, &store_slot_index)); |
|
Michael Starzinger
2015/06/23 08:31:14
Nice catch! :)
| |
| 1837 BuildSetHomeObject(environment()->Top(), literal, it->second->setter, | 1837 BuildSetHomeObject(environment()->Top(), literal, it->second->setter, |
| 1838 feedback_setter); | 1838 feedback_setter); |
| 1839 Node* setter = environment()->Pop(); | 1839 Node* setter = environment()->Pop(); |
| 1840 Node* getter = environment()->Pop(); | 1840 Node* getter = environment()->Pop(); |
| 1841 Node* name = environment()->Pop(); | 1841 Node* name = environment()->Pop(); |
| 1842 Node* attr = jsgraph()->Constant(NONE); | 1842 Node* attr = jsgraph()->Constant(NONE); |
| 1843 const Operator* op = | 1843 const Operator* op = |
| 1844 javascript()->CallRuntime(Runtime::kDefineAccessorPropertyUnchecked, 5); | 1844 javascript()->CallRuntime(Runtime::kDefineAccessorPropertyUnchecked, 5); |
| 1845 Node* call = NewNode(op, literal, name, getter, setter, attr); | 1845 Node* call = NewNode(op, literal, name, getter, setter, attr); |
| 1846 // This should not lazy deopt on a new literal. | 1846 // This should not lazy deopt on a new literal. |
| (...skipping 1656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3503 javascript()->LoadNamed(MakeUnique(name), feedback, mode); | 3503 javascript()->LoadNamed(MakeUnique(name), feedback, mode); |
| 3504 return Record(js_type_feedback_, NewNode(op, object, GetFeedbackVector()), | 3504 return Record(js_type_feedback_, NewNode(op, object, GetFeedbackVector()), |
| 3505 feedback.slot()); | 3505 feedback.slot()); |
| 3506 } | 3506 } |
| 3507 | 3507 |
| 3508 | 3508 |
| 3509 Node* AstGraphBuilder::BuildKeyedStore(Node* object, Node* key, Node* value, | 3509 Node* AstGraphBuilder::BuildKeyedStore(Node* object, Node* key, Node* value, |
| 3510 const VectorSlotPair& feedback, | 3510 const VectorSlotPair& feedback, |
| 3511 TypeFeedbackId id) { | 3511 TypeFeedbackId id) { |
| 3512 const Operator* op = javascript()->StoreProperty(language_mode(), feedback); | 3512 const Operator* op = javascript()->StoreProperty(language_mode(), feedback); |
| 3513 return Record(js_type_feedback_, NewNode(op, object, key, value), id); | 3513 Node* node = NewNode(op, object, key, value, GetFeedbackVector()); |
| 3514 if (FLAG_vector_stores) { | |
| 3515 return Record(js_type_feedback_, node, feedback.slot()); | |
| 3516 } | |
| 3517 return Record(js_type_feedback_, node, id); | |
| 3514 } | 3518 } |
| 3515 | 3519 |
| 3516 | 3520 |
| 3517 Node* AstGraphBuilder::BuildNamedStore(Node* object, Handle<Name> name, | 3521 Node* AstGraphBuilder::BuildNamedStore(Node* object, Handle<Name> name, |
| 3518 Node* value, | 3522 Node* value, |
| 3519 const VectorSlotPair& feedback, | 3523 const VectorSlotPair& feedback, |
| 3520 TypeFeedbackId id) { | 3524 TypeFeedbackId id) { |
| 3521 const Operator* op = | 3525 const Operator* op = |
| 3522 javascript()->StoreNamed(language_mode(), MakeUnique(name), feedback); | 3526 javascript()->StoreNamed(language_mode(), MakeUnique(name), feedback); |
| 3523 return Record(js_type_feedback_, NewNode(op, object, value), id); | 3527 Node* node = NewNode(op, object, value, GetFeedbackVector()); |
| 3528 if (FLAG_vector_stores) { | |
| 3529 return Record(js_type_feedback_, node, feedback.slot()); | |
| 3530 } | |
| 3531 return Record(js_type_feedback_, node, id); | |
| 3524 } | 3532 } |
| 3525 | 3533 |
| 3526 | 3534 |
| 3527 Node* AstGraphBuilder::BuildNamedSuperLoad(Node* receiver, Node* home_object, | 3535 Node* AstGraphBuilder::BuildNamedSuperLoad(Node* receiver, Node* home_object, |
| 3528 Handle<Name> name, | 3536 Handle<Name> name, |
| 3529 const VectorSlotPair& feedback) { | 3537 const VectorSlotPair& feedback) { |
| 3530 Node* name_node = jsgraph()->Constant(name); | 3538 Node* name_node = jsgraph()->Constant(name); |
| 3531 const Operator* op = javascript()->CallRuntime(Runtime::kLoadFromSuper, 3); | 3539 const Operator* op = javascript()->CallRuntime(Runtime::kLoadFromSuper, 3); |
| 3532 Node* value = NewNode(op, receiver, home_object, name_node); | 3540 Node* value = NewNode(op, receiver, home_object, name_node); |
| 3533 return Record(js_type_feedback_, value, feedback.slot()); | 3541 return Record(js_type_feedback_, value, feedback.slot()); |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4112 // Phi does not exist yet, introduce one. | 4120 // Phi does not exist yet, introduce one. |
| 4113 value = NewPhi(inputs, value, control); | 4121 value = NewPhi(inputs, value, control); |
| 4114 value->ReplaceInput(inputs - 1, other); | 4122 value->ReplaceInput(inputs - 1, other); |
| 4115 } | 4123 } |
| 4116 return value; | 4124 return value; |
| 4117 } | 4125 } |
| 4118 | 4126 |
| 4119 } // namespace compiler | 4127 } // namespace compiler |
| 4120 } // namespace internal | 4128 } // namespace internal |
| 4121 } // namespace v8 | 4129 } // namespace v8 |
| OLD | NEW |