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

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

Issue 1168093002: [strong] Implement strong mode restrictions on property access (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: slim down, improve tests Created 5 years, 6 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 3448 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
OLDNEW
« no previous file with comments | « src/code-stubs-hydrogen.cc ('k') | src/compiler/js-generic-lowering.cc » ('j') | src/lookup.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698