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 3448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3459 TypeFeedbackId id) { | 3459 TypeFeedbackId id) { |
3460 if (js_type_feedback) { | 3460 if (js_type_feedback) { |
3461 js_type_feedback->Record(node, id); | 3461 js_type_feedback->Record(node, id); |
3462 } | 3462 } |
3463 return node; | 3463 return node; |
3464 } | 3464 } |
3465 | 3465 |
3466 | 3466 |
3467 Node* AstGraphBuilder::BuildKeyedLoad(Node* object, Node* key, | 3467 Node* AstGraphBuilder::BuildKeyedLoad(Node* object, Node* key, |
3468 const ResolvedFeedbackSlot& feedback) { | 3468 const ResolvedFeedbackSlot& feedback) { |
3469 const Operator* op = javascript()->LoadProperty(feedback); | 3469 const Operator* op = javascript()->LoadProperty(feedback, language_mode()); |
3470 return Record(js_type_feedback_, | 3470 return Record(js_type_feedback_, |
3471 NewNode(op, object, key, GetFeedbackVector()), feedback.slot()); | 3471 NewNode(op, object, key, GetFeedbackVector()), feedback.slot()); |
3472 } | 3472 } |
3473 | 3473 |
3474 | 3474 |
3475 Node* AstGraphBuilder::BuildNamedLoad(Node* object, Handle<Name> name, | 3475 Node* AstGraphBuilder::BuildNamedLoad(Node* object, Handle<Name> name, |
3476 const ResolvedFeedbackSlot& feedback, | 3476 const ResolvedFeedbackSlot& feedback, |
3477 ContextualMode mode) { | 3477 ContextualMode mode) { |
3478 const Operator* op = | 3478 const Operator* op = javascript()->LoadNamed(MakeUnique(name), feedback, |
3479 javascript()->LoadNamed(MakeUnique(name), feedback, mode); | 3479 language_mode(), mode); |
3480 return Record(js_type_feedback_, NewNode(op, object, GetFeedbackVector()), | 3480 return Record(js_type_feedback_, NewNode(op, object, GetFeedbackVector()), |
3481 feedback.slot()); | 3481 feedback.slot()); |
3482 } | 3482 } |
3483 | 3483 |
3484 | 3484 |
3485 Node* AstGraphBuilder::BuildKeyedStore(Node* object, Node* key, Node* value, | 3485 Node* AstGraphBuilder::BuildKeyedStore(Node* object, Node* key, Node* value, |
3486 TypeFeedbackId id) { | 3486 TypeFeedbackId id) { |
3487 const Operator* op = javascript()->StoreProperty(language_mode()); | 3487 const Operator* op = javascript()->StoreProperty(language_mode()); |
3488 return Record(js_type_feedback_, NewNode(op, object, key, value), id); | 3488 return Record(js_type_feedback_, NewNode(op, object, key, value), id); |
3489 } | 3489 } |
3490 | 3490 |
3491 | 3491 |
3492 Node* AstGraphBuilder::BuildNamedStore(Node* object, Handle<Name> name, | 3492 Node* AstGraphBuilder::BuildNamedStore(Node* object, Handle<Name> name, |
3493 Node* value, TypeFeedbackId id) { | 3493 Node* value, TypeFeedbackId id) { |
3494 const Operator* op = | 3494 const Operator* op = |
3495 javascript()->StoreNamed(language_mode(), MakeUnique(name)); | 3495 javascript()->StoreNamed(language_mode(), MakeUnique(name)); |
3496 return Record(js_type_feedback_, NewNode(op, object, value), id); | 3496 return Record(js_type_feedback_, NewNode(op, object, value), id); |
3497 } | 3497 } |
3498 | 3498 |
3499 | 3499 |
3500 Node* AstGraphBuilder::BuildNamedSuperLoad( | 3500 Node* AstGraphBuilder::BuildNamedSuperLoad( |
3501 Node* receiver, Node* home_object, Handle<Name> name, | 3501 Node* receiver, Node* home_object, Handle<Name> name, |
3502 const ResolvedFeedbackSlot& feedback) { | 3502 const ResolvedFeedbackSlot& feedback) { |
3503 Node* name_node = jsgraph()->Constant(name); | 3503 Node* name_node = jsgraph()->Constant(name); |
3504 const Operator* op = javascript()->CallRuntime(Runtime::kLoadFromSuper, 3); | 3504 Node* language = jsgraph()->Constant(language_mode()); |
3505 Node* value = NewNode(op, receiver, home_object, name_node); | 3505 const Operator* op = javascript()->CallRuntime(Runtime::kLoadFromSuper, 4); |
| 3506 Node* value = NewNode(op, receiver, home_object, name_node, language); |
3506 return Record(js_type_feedback_, value, feedback.slot()); | 3507 return Record(js_type_feedback_, value, feedback.slot()); |
3507 } | 3508 } |
3508 | 3509 |
3509 | 3510 |
3510 Node* AstGraphBuilder::BuildKeyedSuperLoad( | 3511 Node* AstGraphBuilder::BuildKeyedSuperLoad( |
3511 Node* receiver, Node* home_object, Node* key, | 3512 Node* receiver, Node* home_object, Node* key, |
3512 const ResolvedFeedbackSlot& feedback) { | 3513 const ResolvedFeedbackSlot& feedback) { |
| 3514 Node* language = jsgraph()->Constant(language_mode()); |
3513 const Operator* op = | 3515 const Operator* op = |
3514 javascript()->CallRuntime(Runtime::kLoadKeyedFromSuper, 3); | 3516 javascript()->CallRuntime(Runtime::kLoadKeyedFromSuper, 4); |
3515 Node* value = NewNode(op, receiver, home_object, key); | 3517 Node* value = NewNode(op, receiver, home_object, key, language); |
3516 return Record(js_type_feedback_, value, feedback.slot()); | 3518 return Record(js_type_feedback_, value, feedback.slot()); |
3517 } | 3519 } |
3518 | 3520 |
3519 | 3521 |
3520 Node* AstGraphBuilder::BuildKeyedSuperStore(Node* receiver, Node* home_object, | 3522 Node* AstGraphBuilder::BuildKeyedSuperStore(Node* receiver, Node* home_object, |
3521 Node* key, Node* value, | 3523 Node* key, Node* value, |
3522 TypeFeedbackId id) { | 3524 TypeFeedbackId id) { |
3523 Runtime::FunctionId function_id = is_strict(language_mode()) | 3525 Runtime::FunctionId function_id = is_strict(language_mode()) |
3524 ? Runtime::kStoreKeyedToSuper_Strict | 3526 ? Runtime::kStoreKeyedToSuper_Strict |
3525 : Runtime::kStoreKeyedToSuper_Sloppy; | 3527 : Runtime::kStoreKeyedToSuper_Sloppy; |
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4076 // Phi does not exist yet, introduce one. | 4078 // Phi does not exist yet, introduce one. |
4077 value = NewPhi(inputs, value, control); | 4079 value = NewPhi(inputs, value, control); |
4078 value->ReplaceInput(inputs - 1, other); | 4080 value->ReplaceInput(inputs - 1, other); |
4079 } | 4081 } |
4080 return value; | 4082 return value; |
4081 } | 4083 } |
4082 | 4084 |
4083 } // namespace compiler | 4085 } // namespace compiler |
4084 } // namespace internal | 4086 } // namespace internal |
4085 } // namespace v8 | 4087 } // namespace v8 |
OLD | NEW |