diff --git a/idea/testData/codegen/classes/doubleEnclosedLocalVariable.jet b/idea/testData/codegen/classes/doubleEnclosedLocalVariable.jet new file mode 100644 index 00000000000..5776a6abe16 --- /dev/null +++ b/idea/testData/codegen/classes/doubleEnclosedLocalVariable.jet @@ -0,0 +1,8 @@ +fun box() : String { + val cl = 39 + return if (sum(200, { val ff = {cl}; ff() }) == 239) "OK" else "FAIL" +} + +fun sum(arg:Int, f : {() : Int}) : Int { + return arg + f() +} diff --git a/idea/testData/codegen/classes/enclosingThis.jet b/idea/testData/codegen/classes/enclosingThis.jet new file mode 100644 index 00000000000..e54f26201a5 --- /dev/null +++ b/idea/testData/codegen/classes/enclosingThis.jet @@ -0,0 +1,12 @@ +class Point(val x:Int, val y:Int) { + fun mul() : {(scalar:Int):Point} { + return { (scalar:Int):Point => Point(x * scalar, y * scalar) } + } +} + +val m = Point(2, 3).mul() : {(scalar:Int):Point} + +fun box() : String { + val answer = m(5) + return if (answer.x == 10 && answer.y == 15) "OK" else "FAIL" +} diff --git a/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java b/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java index 02031d3d0af..4a1174ba55a 100644 --- a/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java @@ -27,4 +27,12 @@ public class ClosuresGenTest extends CodegenTestCase { public void testEnclosingLocalVariable() throws Exception { blackBoxFile("classes/enclosingLocalVariable.jet"); } + + public void testDoubleEnclosedLocalVariable() throws Exception { + blackBoxFile("classes/doubleEnclosedLocalVariable.jet"); + } + + public void testEnclosingThis() throws Exception { + blackBoxFile("classes/enclosingThis.jet"); + } }