diff options
author | Som Snytt <som.snytt@gmail.com> | 2014-10-18 22:43:57 -0700 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2014-11-04 07:49:16 -0800 |
commit | d7835d62cf0093e4a8f17f6eabd334e74be6ffcb (patch) | |
tree | 99624fca28f394aacc2738e8ff347970c4579240 /test/files | |
parent | 2b5df373638d08204b71258928289f6b39e25d5f (diff) | |
download | scala-d7835d62cf0093e4a8f17f6eabd334e74be6ffcb.tar.gz scala-d7835d62cf0093e4a8f17f6eabd334e74be6ffcb.tar.bz2 scala-d7835d62cf0093e4a8f17f6eabd334e74be6ffcb.zip |
SI-8898 javap -fun under new style lambdas
To support both -Ydelambdafy strategies, look for both inline
(anonfun) and method (lambda) closure classes.
For method (lambda) style, use the anonfun method that is
invoked by the accessor.
Also, the output of javap must be captured eagerly for
filtering for the current target method.
If the user asks for a module, e.g., `Foo$`, don't yield
results for companion class, but for `Foo`, do yield
companion module results. Just because.
Diffstat (limited to 'test/files')
-rw-r--r-- | test/files/run/repl-javap-lambdas.scala | 23 | ||||
-rw-r--r-- | test/files/run/repl-javap-memfun.scala | 4 |
2 files changed, 27 insertions, 0 deletions
diff --git a/test/files/run/repl-javap-lambdas.scala b/test/files/run/repl-javap-lambdas.scala new file mode 100644 index 0000000000..15e5bf6877 --- /dev/null +++ b/test/files/run/repl-javap-lambdas.scala @@ -0,0 +1,23 @@ +import scala.tools.partest.JavapTest +import scala.tools.nsc.Settings + +// see repl-javap-memfun.java for the complementary version +object Test extends JavapTest { + override def transformSettings(s: Settings) = { s.Ydelambdafy.value = "method" ; s } + def code = """ + |object Betty { + | List(1,2,3) count (_ % 2 != 0) + | def f = List(1,2,3) filter (_ % 2 != 0) map (_ * 2) + | def g = List(1,2,3) filter (_ % 2 == 0) map (_ * 3) map (_ + 1) + |} + |:javap -fun Betty#g + """.stripMargin + + // three anonfuns of Betty#g + override def yah(res: Seq[String]) = { + import PartialFunction.{ cond => when } + val r = """\s*private static final .* \$anonfun\$\d+\(.*""".r + def filtered = res filter (when(_) { case r(_*) => true }) + 3 == filtered.size + } +} diff --git a/test/files/run/repl-javap-memfun.scala b/test/files/run/repl-javap-memfun.scala index d2b4243c8b..d10ebcb399 100644 --- a/test/files/run/repl-javap-memfun.scala +++ b/test/files/run/repl-javap-memfun.scala @@ -1,6 +1,10 @@ import scala.tools.partest.JavapTest +import scala.tools.nsc.Settings +// see repl-javap-lambdas.scala for the complementary version object Test extends JavapTest { + // asserting the default + override def transformSettings(s: Settings) = { s.Ydelambdafy.value = "inline" ; s } def code = """ |object Betty { | List(1,2,3) count (_ % 2 != 0) |