diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-11-23 09:45:19 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-11-23 09:53:28 +0100 |
commit | 736613ea8a2fb3eede9bc01346a743c70b44eeaa (patch) | |
tree | f5edd5ee810a9a899be25c1412ba96df02a486a6 /test/files/run/delambdafy-dependent-on-param-subst.flags | |
parent | cb37548ef85d471951867b9f8a97cb9b9820fc66 (diff) | |
download | scala-736613ea8a2fb3eede9bc01346a743c70b44eeaa.tar.gz scala-736613ea8a2fb3eede9bc01346a743c70b44eeaa.tar.bz2 scala-736613ea8a2fb3eede9bc01346a743c70b44eeaa.zip |
Substitute new parameter symbols into lambda body
Previously, new synthetic parameter symbols were created for the
apply method parameters, but only used in its `MethodType`. The
`ValDef` trees of the function, along with their symbols, were
used directly as the parameter trees of the apply method.
% cat sandbox/test.scala
object Test {
(x: Int) => {
(y: Int) => ???
}
}
% scalac-hash v2.10.3 -Xprint:typer,uncurry -uniqid ../scala2/sandbox/test.scala | egrep 'syntax|\bx'
[info] v2.10.3 => /Users/jason/usr/scala-v2.10.3-0-g88b5d19
[[syntax trees at end of typer]] // test.scala
((x#12152: Int#351) => x#12152)#12151
[[syntax trees at end of uncurry]] // test.scala
final def apply#15952(x#12152: Int#351): Int#351 = x#12152
This approach dates back a long way: c64152bc3. @odersky tells me it
was most likely due to insufficent substitution/cloning machinery
at the time.
% qbin/scalac -Xprint:typer,uncurry -uniqid ../scala2/sandbox/test.scala | egrep 'syntax|\bx'
[[syntax trees at end of typer]] // test.scala
((x#13685: Int#1760) => x#13685)#13671
[[syntax trees at end of uncurry]] // test.scala
final def apply#13959(x#13960: Int#1760): Int#1760 = x#13960
To make this work, I had to fix a problem in symbol substition; this
was commited in the previous commit. In the enclosed test, at Uncurry,
the symbol of the nested class `N` had a `ClassInfoType`, which listed
as a parent `M[a.C]`. When we substituted the new method parameter
symbol `a` for the eponymous function parameter symbol, this was not
touched.
Diffstat (limited to 'test/files/run/delambdafy-dependent-on-param-subst.flags')
-rw-r--r-- | test/files/run/delambdafy-dependent-on-param-subst.flags | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/test/files/run/delambdafy-dependent-on-param-subst.flags b/test/files/run/delambdafy-dependent-on-param-subst.flags new file mode 100644 index 0000000000..2b27e19830 --- /dev/null +++ b/test/files/run/delambdafy-dependent-on-param-subst.flags @@ -0,0 +1 @@ +-Ydelambdafy:method
\ No newline at end of file |