diff options
author | James Iry <jamesiry@gmail.com> | 2013-01-28 08:08:57 -0800 |
---|---|---|
committer | James Iry <jamesiry@gmail.com> | 2013-01-28 08:08:57 -0800 |
commit | c66edcc54ae33d363f2a4d9700c562ad1e8adc4b (patch) | |
tree | d8f9479a48208ecb00a67a1a5298da9380f6b79b /test | |
parent | 02963d724c512251ce66502226408091686989ee (diff) | |
parent | 0b52a5199ba8b949bd80de1eaf589420ef91d6f6 (diff) | |
download | scala-c66edcc54ae33d363f2a4d9700c562ad1e8adc4b.tar.gz scala-c66edcc54ae33d363f2a4d9700c562ad1e8adc4b.tar.bz2 scala-c66edcc54ae33d363f2a4d9700c562ad1e8adc4b.zip |
Merge pull request #1927 from JamesIry/SI-6863_2.10.x
SI-6863 Fix verify error in captured var inited from block w try/catch
Diffstat (limited to 'test')
-rw-r--r-- | test/files/run/t6863.scala | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/test/files/run/t6863.scala b/test/files/run/t6863.scala new file mode 100644 index 0000000000..d77adb6af4 --- /dev/null +++ b/test/files/run/t6863.scala @@ -0,0 +1,114 @@ +/** Make sure that when a variable is captured its initialization expression is handled properly */ +object Test { + def lazyVal() = { + // internally lazy vals become vars which are initialized with "_", so they need to be tested just like vars do + lazy val x = "42" + assert({ () => x }.apply == "42") + } + def ident() = { + val y = "42" + var x = y + assert({ () => x }.apply == "42") + } + def apply() = { + def y(x : Int) = x.toString + var x = y(42) + assert({ () => x }.apply == "42") + } + def literal() = { + var x = "42" + assert({ () => x }.apply == "42") + } + def `new`() = { + var x = new String("42") + assert({ () => x }.apply == "42") + } + def select() = { + object Foo{val bar = "42"} + var x = Foo.bar + assert({ () => x }.apply == "42") + } + def `throw`() = { + var x = if (true) "42" else throw new Exception("42") + assert({ () => x }.apply == "42") + } + def assign() = { + var y = 1 + var x = y = 42 + assert({ () => x}.apply == ()) + } + def valDef() = { + var x = {val y = 42} + assert({ () => x}.apply == ()) + } + def `return`(): String = { + var x = if (true) return "42" else () + assert({ () => x}.apply == ()) + "42" + } + def tryFinally() = { + var x = try { "42" } finally () + assert({ () => x }.apply == "42") + } + def tryCatch() = { + var x = try { "42" } catch { case _ => "43" } + assert({ () => x }.apply == "42") + } + def `if`() = { + var x = if (true) () + assert({ () => x }.apply == ()) + } + def ifElse() = { + var x = if(true) "42" else "43" + assert({ () => x }.apply == "42") + } + def matchCase() = { + var x = 100 match { + case 100 => "42" + case _ => "43" + } + assert({ () => x }.apply == "42") + } + def block() = { + var x = { + val y = 42 + "42" + } + assert({ () => x }.apply == "42") + } + def labelDef() = { + var x = 100 match { + case 100 => try "42" finally () + } + assert({ () => x }.apply == "42") + } + def nested() = { + var x = { + val y = 42 + if(true) try "42" catch {case _ => "43"} + else "44" + } + assert({ () => x }.apply == "42") + } + def main(args: Array[String]) { + lazyVal() + ident() + apply() + literal() + `new`() + select() + `throw`() + assign() + valDef() + `return`() + tryFinally() + tryCatch() + ifElse() + `if`() + matchCase() + block() + labelDef() + nested() + } +} + |