KT-402 JetFunctionLiteral visited instead of JetFunctionLiteralExpression

This commit is contained in:
svtk
2011-10-26 14:20:07 +04:00
parent 1d16667bd0
commit 1de766ff0d
5 changed files with 37 additions and 12 deletions
@@ -556,6 +556,7 @@ public class JetControlFlowProcessor {
List<JetElement> statements = bodyExpression.getStatements();
generateSubroutineControlFlow(functionLiteral, statements);
}
builder.read(expression);
}
@Override
@@ -39,6 +39,6 @@ public class LocalDeclarationInstruction extends ReadValueInstruction {
else if (element instanceof JetObjectDeclaration) {
kind = "o";
}
return "r" + kind + "(" + element.getText() + ")";
return "d" + kind + "(" + element.getText() + ")";
}
}
+4 -3
View File
@@ -40,9 +40,10 @@ l0:
r(foo) NEXT:[r(foo(a, 3))] PREV:[r(3)]
r(foo(a, 3)) NEXT:[r(genfun)] PREV:[r(foo)]
r(genfun) NEXT:[r(genfun<Any>())] PREV:[r(foo(a, 3))]
r(genfun<Any>()) NEXT:[rf({1})] PREV:[r(genfun)]
rf({1}) NEXT:[r(flfun)] PREV:[r(genfun<Any>())]
r(flfun) NEXT:[r(flfun {1})] PREV:[rf({1})]
r(genfun<Any>()) NEXT:[df({1})] PREV:[r(genfun)]
df({1}) NEXT:[r({1})] PREV:[r(genfun<Any>())]
r({1}) NEXT:[r(flfun)] PREV:[df({1})]
r(flfun) NEXT:[r(flfun {1})] PREV:[r({1})]
r(flfun {1}) NEXT:[r(3)] PREV:[r(flfun)]
r(3) NEXT:[r(4)] PREV:[r(flfun {1})]
r(4) NEXT:[r(equals)] PREV:[r(3)]
+23 -8
View File
@@ -93,14 +93,19 @@ fun t3() {
l0:
<START> NEXT:[jmp?(l2)] PREV:[]
jmp?(l2) NEXT:[r(2), r(1)] PREV:[<START>]
r(1) NEXT:[rf({ () => if (2 > 3) { retu..)] PREV:[jmp?(l2)]
rf({ () =>
r(1) NEXT:[df({ () => if (2 > 3) { retu..)] PREV:[jmp?(l2)]
df({ () =>
if (2 > 3) {
return@
}
}) NEXT:[r(2)] PREV:[r(1)]
}) NEXT:[r({ () => if (2 > 3) { retur..)] PREV:[r(1)]
r({ () =>
if (2 > 3) {
return@
}
}) NEXT:[r(2)] PREV:[df({ () => if (2 > 3) { retu..)]
l2:
r(2) NEXT:[<END>] PREV:[jmp?(l2), rf({ () => if (2 > 3) { retu..)]
r(2) NEXT:[<END>] PREV:[jmp?(l2), r({ () => if (2 > 3) { retur..)]
l1:
<END> NEXT:[] PREV:[r(2)]
error:
@@ -171,8 +176,8 @@ fun t3() {
}
---------------------
l0:
<START> NEXT:[rf({ () => try { 1 if (2 > 3..)] PREV:[]
rf({ () =>
<START> NEXT:[df({ () => try { 1 if (2 > 3..)] PREV:[]
df({ () =>
try {
1
if (2 > 3) {
@@ -181,9 +186,19 @@ l0:
} finally {
2
}
}) NEXT:[<END>] PREV:[<START>]
}) NEXT:[r({ () => try { 1 if (2 > 3)..)] PREV:[<START>]
r({ () =>
try {
1
if (2 > 3) {
return@
}
} finally {
2
}
}) NEXT:[<END>] PREV:[df({ () => try { 1 if (2 > 3..)]
l1:
<END> NEXT:[] PREV:[rf({ () => try { 1 if (2 > 3..)]
<END> NEXT:[] PREV:[r({ () => try { 1 if (2 > 3)..)]
error:
<ERROR> NEXT:[] PREV:[]
l2:
@@ -0,0 +1,8 @@
namespace kt402
fun getTypeChecker() : fun(Any):Boolean {
<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>{ (a : Any) => a is <!UNRESOLVED_REFERENCE!>T<!> }<!> // reports unsupported
}
fun f() : fun(Any) : Boolean {
return { (a : Any) => a is String }
}