Allow inlining of functions containing function literals.

R=yangguo@chromium.org
BUG=v8:1322
TEST=mjsunit/compiler/inline-literals

Review URL: https://codereview.chromium.org/10702036

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13945 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
mstarzinger@chromium.org 2013-03-14 14:29:10 +00:00
parent 3d2dc89796
commit 9aa25ad1a0
2 changed files with 22 additions and 1 deletions

View File

@ -1040,6 +1040,7 @@ REGULAR_NODE(Conditional)
REGULAR_NODE(Literal)
REGULAR_NODE(ObjectLiteral)
REGULAR_NODE(RegExpLiteral)
REGULAR_NODE(FunctionLiteral)
REGULAR_NODE(Assignment)
REGULAR_NODE(Throw)
REGULAR_NODE(Property)
@ -1071,7 +1072,6 @@ DONT_OPTIMIZE_NODE(DebuggerStatement)
DONT_OPTIMIZE_NODE(SharedFunctionInfoLiteral)
DONT_INLINE_NODE(ArrayLiteral) // TODO(1322): Allow materialized literals.
DONT_INLINE_NODE(FunctionLiteral)
DONT_SELFOPTIMIZE_NODE(DoWhileStatement)
DONT_SELFOPTIMIZE_NODE(WhileStatement)

View File

@ -87,3 +87,24 @@ TestRegExpLiteral("-b", "reg", "exp", "-expreg");
%OptimizeFunctionOnNextCall(TestRegExpLiteral);
TestRegExpLiteral("ab", "reg", "exp", "regexpexpreg");
TestRegExpLiteral("ab", 12345, 54321, "6666666666");
function f2(b, c) {
var closure = function(b, c) { return b + c; }
var value = b + c;
return closure;
}
function f1(a, b, c) {
return a + f2(b, c)(b, c);
}
function TestFunctionLiteral(a, b, c, expected) {
var result = f1(a, b, c);
assertEquals(expected, result, "TestFunctionLiteral");
}
TestFunctionLiteral(1, 2, 3, 6);
TestFunctionLiteral(4, 5, 6, 15);
%OptimizeFunctionOnNextCall(TestFunctionLiteral);
TestFunctionLiteral(7, 8, 9, 24);
TestFunctionLiteral("a", "b", "c", "abc");