From 1de766ff0d0fee10f9d53c8bbc42f3c558cb0689 Mon Sep 17 00:00:00 2001 From: svtk Date: Wed, 26 Oct 2011 14:20:07 +0400 Subject: [PATCH] KT-402 JetFunctionLiteral visited instead of JetFunctionLiteralExpression --- .../jet/lang/cfg/JetControlFlowProcessor.java | 1 + .../LocalDeclarationInstruction.java | 2 +- compiler/testData/cfg/Basic.instructions | 7 +++-- compiler/testData/cfg/Finally.instructions | 31 ++++++++++++++----- .../full/regression/kt402.jet | 8 +++++ 5 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 compiler/testData/checkerWithErrorTypes/full/regression/kt402.jet diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java index 51fcb9f6aac..15d55b7f5de 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java @@ -556,6 +556,7 @@ public class JetControlFlowProcessor { List statements = bodyExpression.getStatements(); generateSubroutineControlFlow(functionLiteral, statements); } + builder.read(expression); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/LocalDeclarationInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/LocalDeclarationInstruction.java index e44c428dff9..c7753272360 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/LocalDeclarationInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/LocalDeclarationInstruction.java @@ -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() + ")"; } } diff --git a/compiler/testData/cfg/Basic.instructions b/compiler/testData/cfg/Basic.instructions index f8f34d1dc84..e03b4382450 100644 --- a/compiler/testData/cfg/Basic.instructions +++ b/compiler/testData/cfg/Basic.instructions @@ -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())] PREV:[r(foo(a, 3))] - r(genfun()) NEXT:[rf({1})] PREV:[r(genfun)] - rf({1}) NEXT:[r(flfun)] PREV:[r(genfun())] - r(flfun) NEXT:[r(flfun {1})] PREV:[rf({1})] + r(genfun()) NEXT:[df({1})] PREV:[r(genfun)] + df({1}) NEXT:[r({1})] PREV:[r(genfun())] + 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)] diff --git a/compiler/testData/cfg/Finally.instructions b/compiler/testData/cfg/Finally.instructions index 8500acbd625..32e5c6c9b3a 100644 --- a/compiler/testData/cfg/Finally.instructions +++ b/compiler/testData/cfg/Finally.instructions @@ -93,14 +93,19 @@ fun t3() { l0: NEXT:[jmp?(l2)] PREV:[] jmp?(l2) NEXT:[r(2), r(1)] PREV:[] - 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:[] PREV:[jmp?(l2), rf({ () => if (2 > 3) { retu..)] + r(2) NEXT:[] PREV:[jmp?(l2), r({ () => if (2 > 3) { retur..)] l1: NEXT:[] PREV:[r(2)] error: @@ -171,8 +176,8 @@ fun t3() { } --------------------- l0: - NEXT:[rf({ () => try { 1 if (2 > 3..)] PREV:[] - rf({ () => + NEXT:[df({ () => try { 1 if (2 > 3..)] PREV:[] + df({ () => try { 1 if (2 > 3) { @@ -181,9 +186,19 @@ l0: } finally { 2 } - }) NEXT:[] PREV:[] + }) NEXT:[r({ () => try { 1 if (2 > 3)..)] PREV:[] + r({ () => + try { + 1 + if (2 > 3) { + return@ + } + } finally { + 2 + } + }) NEXT:[] PREV:[df({ () => try { 1 if (2 > 3..)] l1: - NEXT:[] PREV:[rf({ () => try { 1 if (2 > 3..)] + NEXT:[] PREV:[r({ () => try { 1 if (2 > 3)..)] error: NEXT:[] PREV:[] l2: diff --git a/compiler/testData/checkerWithErrorTypes/full/regression/kt402.jet b/compiler/testData/checkerWithErrorTypes/full/regression/kt402.jet new file mode 100644 index 00000000000..7df59b2aa2f --- /dev/null +++ b/compiler/testData/checkerWithErrorTypes/full/regression/kt402.jet @@ -0,0 +1,8 @@ +namespace kt402 + +fun getTypeChecker() : fun(Any):Boolean { + { (a : Any) => a is T } // reports unsupported +} +fun f() : fun(Any) : Boolean { + return { (a : Any) => a is String } +} \ No newline at end of file