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 3482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3493 TypeFeedbackId id) { | 3493 TypeFeedbackId id) { |
3494 if (js_type_feedback) { | 3494 if (js_type_feedback) { |
3495 js_type_feedback->Record(node, id); | 3495 js_type_feedback->Record(node, id); |
3496 } | 3496 } |
3497 return node; | 3497 return node; |
3498 } | 3498 } |
3499 | 3499 |
3500 | 3500 |
3501 Node* AstGraphBuilder::BuildKeyedLoad(Node* object, Node* key, | 3501 Node* AstGraphBuilder::BuildKeyedLoad(Node* object, Node* key, |
3502 const VectorSlotPair& feedback) { | 3502 const VectorSlotPair& feedback) { |
3503 const Operator* op = javascript()->LoadProperty(feedback); | 3503 const Operator* op = javascript()->LoadProperty(feedback, language_mode()); |
3504 Node* node = NewNode(op, object, key, BuildLoadFeedbackVector()); | 3504 Node* node = NewNode(op, object, key, BuildLoadFeedbackVector()); |
3505 return Record(js_type_feedback_, node, feedback.slot()); | 3505 return Record(js_type_feedback_, node, feedback.slot()); |
3506 } | 3506 } |
3507 | 3507 |
3508 | 3508 |
3509 Node* AstGraphBuilder::BuildNamedLoad(Node* object, Handle<Name> name, | 3509 Node* AstGraphBuilder::BuildNamedLoad(Node* object, Handle<Name> name, |
3510 const VectorSlotPair& feedback) { | 3510 const VectorSlotPair& feedback) { |
3511 const Operator* op = javascript()->LoadNamed(MakeUnique(name), feedback); | 3511 const Operator* op = |
| 3512 javascript()->LoadNamed(MakeUnique(name), feedback, language_mode()); |
3512 Node* node = NewNode(op, object, BuildLoadFeedbackVector()); | 3513 Node* node = NewNode(op, object, BuildLoadFeedbackVector()); |
3513 return Record(js_type_feedback_, node, feedback.slot()); | 3514 return Record(js_type_feedback_, node, feedback.slot()); |
3514 } | 3515 } |
3515 | 3516 |
3516 | 3517 |
3517 Node* AstGraphBuilder::BuildKeyedStore(Node* object, Node* key, Node* value, | 3518 Node* AstGraphBuilder::BuildKeyedStore(Node* object, Node* key, Node* value, |
3518 const VectorSlotPair& feedback, | 3519 const VectorSlotPair& feedback, |
3519 TypeFeedbackId id) { | 3520 TypeFeedbackId id) { |
3520 const Operator* op = javascript()->StoreProperty(language_mode(), feedback); | 3521 const Operator* op = javascript()->StoreProperty(language_mode(), feedback); |
3521 Node* node = NewNode(op, object, key, value, BuildLoadFeedbackVector()); | 3522 Node* node = NewNode(op, object, key, value, BuildLoadFeedbackVector()); |
(...skipping 15 matching lines...) Expand all Loading... |
3537 return Record(js_type_feedback_, node, feedback.slot()); | 3538 return Record(js_type_feedback_, node, feedback.slot()); |
3538 } | 3539 } |
3539 return Record(js_type_feedback_, node, id); | 3540 return Record(js_type_feedback_, node, id); |
3540 } | 3541 } |
3541 | 3542 |
3542 | 3543 |
3543 Node* AstGraphBuilder::BuildNamedSuperLoad(Node* receiver, Node* home_object, | 3544 Node* AstGraphBuilder::BuildNamedSuperLoad(Node* receiver, Node* home_object, |
3544 Handle<Name> name, | 3545 Handle<Name> name, |
3545 const VectorSlotPair& feedback) { | 3546 const VectorSlotPair& feedback) { |
3546 Node* name_node = jsgraph()->Constant(name); | 3547 Node* name_node = jsgraph()->Constant(name); |
3547 const Operator* op = javascript()->CallRuntime(Runtime::kLoadFromSuper, 3); | 3548 Node* language = jsgraph()->Constant(language_mode()); |
3548 Node* node = NewNode(op, receiver, home_object, name_node); | 3549 const Operator* op = javascript()->CallRuntime(Runtime::kLoadFromSuper, 4); |
| 3550 Node* node = NewNode(op, receiver, home_object, name_node, language); |
3549 return Record(js_type_feedback_, node, feedback.slot()); | 3551 return Record(js_type_feedback_, node, feedback.slot()); |
3550 } | 3552 } |
3551 | 3553 |
3552 | 3554 |
3553 Node* AstGraphBuilder::BuildKeyedSuperLoad(Node* receiver, Node* home_object, | 3555 Node* AstGraphBuilder::BuildKeyedSuperLoad(Node* receiver, Node* home_object, |
3554 Node* key, | 3556 Node* key, |
3555 const VectorSlotPair& feedback) { | 3557 const VectorSlotPair& feedback) { |
| 3558 Node* language = jsgraph()->Constant(language_mode()); |
3556 const Operator* op = | 3559 const Operator* op = |
3557 javascript()->CallRuntime(Runtime::kLoadKeyedFromSuper, 3); | 3560 javascript()->CallRuntime(Runtime::kLoadKeyedFromSuper, 4); |
3558 Node* node = NewNode(op, receiver, home_object, key); | 3561 Node* node = NewNode(op, receiver, home_object, key, language); |
3559 return Record(js_type_feedback_, node, feedback.slot()); | 3562 return Record(js_type_feedback_, node, feedback.slot()); |
3560 } | 3563 } |
3561 | 3564 |
3562 | 3565 |
3563 Node* AstGraphBuilder::BuildKeyedSuperStore(Node* receiver, Node* home_object, | 3566 Node* AstGraphBuilder::BuildKeyedSuperStore(Node* receiver, Node* home_object, |
3564 Node* key, Node* value, | 3567 Node* key, Node* value, |
3565 TypeFeedbackId id) { | 3568 TypeFeedbackId id) { |
3566 Runtime::FunctionId function_id = is_strict(language_mode()) | 3569 Runtime::FunctionId function_id = is_strict(language_mode()) |
3567 ? Runtime::kStoreKeyedToSuper_Strict | 3570 ? Runtime::kStoreKeyedToSuper_Strict |
3568 : Runtime::kStoreKeyedToSuper_Sloppy; | 3571 : Runtime::kStoreKeyedToSuper_Sloppy; |
(...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4174 // Phi does not exist yet, introduce one. | 4177 // Phi does not exist yet, introduce one. |
4175 value = NewPhi(inputs, value, control); | 4178 value = NewPhi(inputs, value, control); |
4176 value->ReplaceInput(inputs - 1, other); | 4179 value->ReplaceInput(inputs - 1, other); |
4177 } | 4180 } |
4178 return value; | 4181 return value; |
4179 } | 4182 } |
4180 | 4183 |
4181 } // namespace compiler | 4184 } // namespace compiler |
4182 } // namespace internal | 4185 } // namespace internal |
4183 } // namespace v8 | 4186 } // namespace v8 |
OLD | NEW |