Index: src/compiler/ast-graph-builder.cc |
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc |
index ac5070869f41eee26104ef4d15452e4846432d42..4f469e2d2ee3cc1f17edbb058539094360d1eb4a 100644 |
--- a/src/compiler/ast-graph-builder.cc |
+++ b/src/compiler/ast-graph-builder.cc |
@@ -732,8 +732,13 @@ void AstGraphBuilder::VisitForInStatement(ForInStatement* stmt) { |
environment()->Push(value); |
// result is either the string key or Smi(0) indicating the property |
// is gone. |
+ // TODO(jarin) Insert lazy deoptimization support here - the call |
+ // actually |
+ // can deoptimize. |
Node* res = ProcessArguments( |
- javascript()->Call(3, NO_CALL_FUNCTION_FLAGS), 3); |
+ javascript()->Call(3, NO_CALL_FUNCTION_FLAGS, |
+ CallDescriptor::kCannotDeoptimize), |
+ 3); |
Node* property_missing = NewNode(javascript()->StrictEqual(), res, |
jsgraph()->ZeroConstant()); |
{ |
@@ -1256,9 +1261,12 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
} |
// Create node to perform the function call. |
- Operator* call = javascript()->Call(args->length() + 2, flags); |
+ Operator* call = javascript()->Call(args->length() + 2, flags, |
+ CallDescriptor::kCanDeoptimize); |
Node* value = ProcessArguments(call, args->length() + 2); |
ast_context()->ProduceValue(value); |
+ |
+ BuildLazyBailout(value, expr->id()); |
} |
@@ -1293,9 +1301,12 @@ void AstGraphBuilder::VisitCallJSRuntime(CallRuntime* expr) { |
VisitForValues(args); |
// Create node to perform the JS runtime call. |
- Operator* call = javascript()->Call(args->length() + 2, flags); |
+ Operator* call = javascript()->Call(args->length() + 2, flags, |
+ CallDescriptor::kCanDeoptimize); |
Node* value = ProcessArguments(call, args->length() + 2); |
ast_context()->ProduceValue(value); |
+ |
+ BuildLazyBailout(value, expr->id()); |
} |