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

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

Issue 1107883002: [turbofan] Add language mode to JSCallFunction operator. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 7 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 | src/compiler/js-operator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1275 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 javascript()->StrictEqual(), should_filter, jsgraph()->TrueConstant()); 1286 javascript()->StrictEqual(), should_filter, jsgraph()->TrueConstant());
1287 test_should_filter.If(should_filter_cond); 1287 test_should_filter.If(should_filter_cond);
1288 test_should_filter.Then(); 1288 test_should_filter.Then();
1289 value = environment()->Pop(); 1289 value = environment()->Pop();
1290 Node* builtins = BuildLoadBuiltinsObject(); 1290 Node* builtins = BuildLoadBuiltinsObject();
1291 Node* function = BuildLoadObjectField( 1291 Node* function = BuildLoadObjectField(
1292 builtins, 1292 builtins,
1293 JSBuiltinsObject::OffsetOfFunctionWithId(Builtins::FILTER_KEY)); 1293 JSBuiltinsObject::OffsetOfFunctionWithId(Builtins::FILTER_KEY));
1294 // result is either the string key or Smi(0) indicating the property 1294 // result is either the string key or Smi(0) indicating the property
1295 // is gone. 1295 // is gone.
1296 Node* res = NewNode(javascript()->CallFunction(3, NO_CALL_FUNCTION_FLAGS), 1296 Node* res = NewNode(
1297 function, obj, value); 1297 javascript()->CallFunction(3, NO_CALL_FUNCTION_FLAGS, language_mode()),
1298 function, obj, value);
1298 PrepareFrameState(res, stmt->FilterId(), OutputFrameStateCombine::Push()); 1299 PrepareFrameState(res, stmt->FilterId(), OutputFrameStateCombine::Push());
1299 Node* property_missing = 1300 Node* property_missing =
1300 NewNode(javascript()->StrictEqual(), res, jsgraph()->ZeroConstant()); 1301 NewNode(javascript()->StrictEqual(), res, jsgraph()->ZeroConstant());
1301 { 1302 {
1302 IfBuilder is_property_missing(this); 1303 IfBuilder is_property_missing(this);
1303 is_property_missing.If(property_missing); 1304 is_property_missing.If(property_missing);
1304 is_property_missing.Then(); 1305 is_property_missing.Then();
1305 // Inc counter and continue. 1306 // Inc counter and continue.
1306 Node* index_inc = 1307 Node* index_inc =
1307 NewNode(javascript()->Add(LanguageMode::SLOPPY), index, 1308 NewNode(javascript()->Add(LanguageMode::SLOPPY), index,
(...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after
2191 OutputFrameStateCombine::PokeAt(arg_count + 1)); 2192 OutputFrameStateCombine::PokeAt(arg_count + 1));
2192 Node* new_callee = NewNode(common()->Projection(0), pair); 2193 Node* new_callee = NewNode(common()->Projection(0), pair);
2193 Node* new_receiver = NewNode(common()->Projection(1), pair); 2194 Node* new_receiver = NewNode(common()->Projection(1), pair);
2194 2195
2195 // Patch callee and receiver on the environment. 2196 // Patch callee and receiver on the environment.
2196 environment()->Poke(arg_count + 1, new_callee); 2197 environment()->Poke(arg_count + 1, new_callee);
2197 environment()->Poke(arg_count + 0, new_receiver); 2198 environment()->Poke(arg_count + 0, new_receiver);
2198 } 2199 }
2199 2200
2200 // Create node to perform the function call. 2201 // Create node to perform the function call.
2201 const Operator* call = javascript()->CallFunction(args->length() + 2, flags); 2202 const Operator* call =
2203 javascript()->CallFunction(args->length() + 2, flags, language_mode());
2202 Node* value = ProcessArguments(call, args->length() + 2); 2204 Node* value = ProcessArguments(call, args->length() + 2);
2203 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); 2205 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine());
2204 ast_context()->ProduceValue(value); 2206 ast_context()->ProduceValue(value);
2205 } 2207 }
2206 2208
2207 2209
2208 void AstGraphBuilder::VisitCallNew(CallNew* expr) { 2210 void AstGraphBuilder::VisitCallNew(CallNew* expr) {
2209 VisitForValue(expr->expression()); 2211 VisitForValue(expr->expression());
2210 2212
2211 // Evaluate all arguments to the construct call. 2213 // Evaluate all arguments to the construct call.
(...skipping 23 matching lines...) Expand all
2235 PrepareFrameState(callee_value, BailoutId::None(), 2237 PrepareFrameState(callee_value, BailoutId::None(),
2236 OutputFrameStateCombine::Push()); 2238 OutputFrameStateCombine::Push());
2237 environment()->Push(callee_value); 2239 environment()->Push(callee_value);
2238 environment()->Push(receiver_value); 2240 environment()->Push(receiver_value);
2239 2241
2240 // Evaluate all arguments to the JS runtime call. 2242 // Evaluate all arguments to the JS runtime call.
2241 ZoneList<Expression*>* args = expr->arguments(); 2243 ZoneList<Expression*>* args = expr->arguments();
2242 VisitForValues(args); 2244 VisitForValues(args);
2243 2245
2244 // Create node to perform the JS runtime call. 2246 // Create node to perform the JS runtime call.
2245 const Operator* call = javascript()->CallFunction(args->length() + 2, flags); 2247 const Operator* call =
2248 javascript()->CallFunction(args->length() + 2, flags, language_mode());
2246 Node* value = ProcessArguments(call, args->length() + 2); 2249 Node* value = ProcessArguments(call, args->length() + 2);
2247 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); 2250 PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine());
2248 ast_context()->ProduceValue(value); 2251 ast_context()->ProduceValue(value);
2249 } 2252 }
2250 2253
2251 2254
2252 void AstGraphBuilder::VisitCallRuntime(CallRuntime* expr) { 2255 void AstGraphBuilder::VisitCallRuntime(CallRuntime* expr) {
2253 const Runtime::Function* function = expr->function(); 2256 const Runtime::Function* function = expr->function();
2254 2257
2255 // Handle calls to runtime functions implemented in JavaScript separately as 2258 // Handle calls to runtime functions implemented in JavaScript separately as
(...skipping 1326 matching lines...) Expand 10 before | Expand all | Expand 10 after
3582 // Phi does not exist yet, introduce one. 3585 // Phi does not exist yet, introduce one.
3583 value = NewPhi(inputs, value, control); 3586 value = NewPhi(inputs, value, control);
3584 value->ReplaceInput(inputs - 1, other); 3587 value->ReplaceInput(inputs - 1, other);
3585 } 3588 }
3586 return value; 3589 return value;
3587 } 3590 }
3588 3591
3589 } // namespace compiler 3592 } // namespace compiler
3590 } // namespace internal 3593 } // namespace internal
3591 } // namespace v8 3594 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/js-operator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698