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