| 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();
|
|
|