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

Side by Side Diff: src/compiler/js-native-context-specialization.cc

Issue 1415733003: [turbofan] Fix invalid lowering of let variable in TDZ. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_inlining-heuristic-6
Patch Set: Rebased. Created 5 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/js-native-context-specialization.h" 5 #include "src/compiler/js-native-context-specialization.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/compilation-dependencies.h" 8 #include "src/compilation-dependencies.h"
9 #include "src/compiler/access-builder.h" 9 #include "src/compiler/access-builder.h"
10 #include "src/compiler/js-graph.h" 10 #include "src/compiler/js-graph.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 55
56 Reduction JSNativeContextSpecialization::ReduceJSLoadGlobal(Node* node) { 56 Reduction JSNativeContextSpecialization::ReduceJSLoadGlobal(Node* node) {
57 DCHECK_EQ(IrOpcode::kJSLoadGlobal, node->opcode()); 57 DCHECK_EQ(IrOpcode::kJSLoadGlobal, node->opcode());
58 Handle<Name> name = LoadGlobalParametersOf(node->op()).name(); 58 Handle<Name> name = LoadGlobalParametersOf(node->op()).name();
59 Node* effect = NodeProperties::GetEffectInput(node); 59 Node* effect = NodeProperties::GetEffectInput(node);
60 Node* control = NodeProperties::GetControlInput(node); 60 Node* control = NodeProperties::GetControlInput(node);
61 61
62 // Try to lookup the name on the script context table first (lexical scoping). 62 // Try to lookup the name on the script context table first (lexical scoping).
63 ScriptContextTableLookupResult result; 63 ScriptContextTableLookupResult result;
64 if (LookupInScriptContextTable(name, &result)) { 64 if (LookupInScriptContextTable(name, &result)) {
65 if (result.context->is_the_hole(result.index)) return NoChange();
65 Node* context = jsgraph()->Constant(result.context); 66 Node* context = jsgraph()->Constant(result.context);
66 Node* value = effect = graph()->NewNode( 67 Node* value = effect = graph()->NewNode(
67 javascript()->LoadContext(0, result.index, result.immutable), context, 68 javascript()->LoadContext(0, result.index, result.immutable), context,
68 context, effect); 69 context, effect);
69 return Replace(node, value, effect); 70 return Replace(node, value, effect);
70 } 71 }
71 72
72 // Lookup on the global object instead. We only deal with own data 73 // Lookup on the global object instead. We only deal with own data
73 // properties of the global object here (represented as PropertyCell). 74 // properties of the global object here (represented as PropertyCell).
74 LookupIterator it(global_object(), name, LookupIterator::OWN); 75 LookupIterator it(global_object(), name, LookupIterator::OWN);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 DCHECK_EQ(IrOpcode::kJSStoreGlobal, node->opcode()); 137 DCHECK_EQ(IrOpcode::kJSStoreGlobal, node->opcode());
137 Handle<Name> name = StoreGlobalParametersOf(node->op()).name(); 138 Handle<Name> name = StoreGlobalParametersOf(node->op()).name();
138 Node* value = NodeProperties::GetValueInput(node, 2); 139 Node* value = NodeProperties::GetValueInput(node, 2);
139 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1); 140 Node* frame_state = NodeProperties::GetFrameStateInput(node, 1);
140 Node* effect = NodeProperties::GetEffectInput(node); 141 Node* effect = NodeProperties::GetEffectInput(node);
141 Node* control = NodeProperties::GetControlInput(node); 142 Node* control = NodeProperties::GetControlInput(node);
142 143
143 // Try to lookup the name on the script context table first (lexical scoping). 144 // Try to lookup the name on the script context table first (lexical scoping).
144 ScriptContextTableLookupResult result; 145 ScriptContextTableLookupResult result;
145 if (LookupInScriptContextTable(name, &result)) { 146 if (LookupInScriptContextTable(name, &result)) {
147 if (result.context->is_the_hole(result.index)) return NoChange();
146 if (result.immutable) return NoChange(); 148 if (result.immutable) return NoChange();
147 Node* context = jsgraph()->Constant(result.context); 149 Node* context = jsgraph()->Constant(result.context);
148 effect = graph()->NewNode(javascript()->StoreContext(0, result.index), 150 effect = graph()->NewNode(javascript()->StoreContext(0, result.index),
149 context, value, context, effect, control); 151 context, value, context, effect, control);
150 return Replace(node, value, effect, control); 152 return Replace(node, value, effect, control);
151 } 153 }
152 154
153 // Lookup on the global object instead. We only deal with own data 155 // Lookup on the global object instead. We only deal with own data
154 // properties of the global object here (represented as PropertyCell). 156 // properties of the global object here (represented as PropertyCell).
155 LookupIterator it(global_object(), name, LookupIterator::OWN); 157 LookupIterator it(global_object(), name, LookupIterator::OWN);
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 if (!name->IsString()) return false; 665 if (!name->IsString()) return false;
664 Handle<ScriptContextTable> script_context_table( 666 Handle<ScriptContextTable> script_context_table(
665 global_object()->native_context()->script_context_table()); 667 global_object()->native_context()->script_context_table());
666 ScriptContextTable::LookupResult lookup_result; 668 ScriptContextTable::LookupResult lookup_result;
667 if (!ScriptContextTable::Lookup(script_context_table, 669 if (!ScriptContextTable::Lookup(script_context_table,
668 Handle<String>::cast(name), &lookup_result)) { 670 Handle<String>::cast(name), &lookup_result)) {
669 return false; 671 return false;
670 } 672 }
671 Handle<Context> script_context = ScriptContextTable::GetContext( 673 Handle<Context> script_context = ScriptContextTable::GetContext(
672 script_context_table, lookup_result.context_index); 674 script_context_table, lookup_result.context_index);
673 if (script_context->is_the_hole(lookup_result.slot_index)) return false;
674 result->context = script_context; 675 result->context = script_context;
675 result->immutable = IsImmutableVariableMode(lookup_result.mode); 676 result->immutable = IsImmutableVariableMode(lookup_result.mode);
676 result->index = lookup_result.slot_index; 677 result->index = lookup_result.slot_index;
677 return true; 678 return true;
678 } 679 }
679 680
680 681
681 Graph* JSNativeContextSpecialization::graph() const { 682 Graph* JSNativeContextSpecialization::graph() const {
682 return jsgraph()->graph(); 683 return jsgraph()->graph();
683 } 684 }
(...skipping 24 matching lines...) Expand all
708 } 709 }
709 710
710 711
711 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { 712 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const {
712 return jsgraph()->simplified(); 713 return jsgraph()->simplified();
713 } 714 }
714 715
715 } // namespace compiler 716 } // namespace compiler
716 } // namespace internal 717 } // namespace internal
717 } // namespace v8 718 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698