Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index 6e520bd85acf933872d52855e3cfe7ec4ef45f45..bd370e4eede7460cc5032b28456dacae1e2efcd1 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -3848,6 +3848,13 @@ bool HGraphBuilder::TryArgumentsAccess(Property* expr) { |
return false; |
} |
+ // Our implementation of arguments (based on this stack frame or an |
+ // adapter below it) does not work for inlined functions. |
+ if (function_state()->outer() != NULL) { |
+ Bailout("arguments access in inlined function"); |
+ return true; |
+ } |
+ |
HInstruction* result = NULL; |
if (expr->key()->IsPropertyName()) { |
Handle<String> name = expr->key()->AsLiteral()->AsPropertyName(); |
@@ -4396,6 +4403,13 @@ bool HGraphBuilder::TryCallApply(Call* expr) { |
if (!expr->IsMonomorphic() || |
expr->check_type() != RECEIVER_MAP_CHECK) return false; |
+ // Our implementation of arguments (based on this stack frame or an |
+ // adapter below it) does not work for inlined functions. |
+ if (function_state()->outer() != NULL) { |
+ Bailout("Function.prototype.apply optimization in inlined function"); |
+ return true; |
+ } |
+ |
// Found pattern f.apply(receiver, arguments). |
VisitForValue(prop->obj()); |
if (HasStackOverflow() || current_block() == NULL) return true; |
@@ -5422,6 +5436,10 @@ void HGraphBuilder::GenerateIsConstructCall(CallRuntime* call) { |
// Support for arguments.length and arguments[?]. |
void HGraphBuilder::GenerateArgumentsLength(CallRuntime* call) { |
+ // Our implementation of arguments (based on this stack frame or an |
+ // adapter below it) does not work for inlined functions. This runtime |
+ // function is blacklisted by AstNode::IsInlineable. |
+ ASSERT(function_state()->outer() == NULL); |
ASSERT(call->arguments()->length() == 0); |
HInstruction* elements = AddInstruction(new(zone()) HArgumentsElements); |
HArgumentsLength* result = new(zone()) HArgumentsLength(elements); |
@@ -5430,6 +5448,10 @@ void HGraphBuilder::GenerateArgumentsLength(CallRuntime* call) { |
void HGraphBuilder::GenerateArguments(CallRuntime* call) { |
+ // Our implementation of arguments (based on this stack frame or an |
+ // adapter below it) does not work for inlined functions. This runtime |
+ // function is blacklisted by AstNode::IsInlineable. |
+ ASSERT(function_state()->outer() == NULL); |
ASSERT(call->arguments()->length() == 1); |
CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
HValue* index = Pop(); |