Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: src/compiler/ast-graph-builder.cc

Issue 1199983002: [strong] Implement strong property access semantics (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Choose generic path less Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « src/code-stubs-hydrogen.cc ('k') | src/compiler/js-generic-lowering.cc » ('j') | src/ic/ic.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698