diff options
author | odersky <odersky@gmail.com> | 2017-02-22 16:35:13 +0100 |
---|---|---|
committer | Guillaume Martres <smarter@ubuntu.com> | 2017-02-22 16:35:13 +0100 |
commit | 6eeb06facb4e0afca9b11b7859a929b31fc23f25 (patch) | |
tree | 428c7ecc2f07e85088d9afe615f2a804d487c4f5 /compiler/src/dotty/tools/dotc | |
parent | 8a826ee3d7a7a7230dea8cc1fa4f87b70e8efe81 (diff) | |
download | dotty-6eeb06facb4e0afca9b11b7859a929b31fc23f25.tar.gz dotty-6eeb06facb4e0afca9b11b7859a929b31fc23f25.tar.bz2 dotty-6eeb06facb4e0afca9b11b7859a929b31fc23f25.zip |
Fix #2009: Fix placeholder params logic for lambdas (#2019)
* Fix #2009: Fix placeholder params logic for lambdas
Logic was missing placeholders in rhs of lambdas.
* Add comment
* Fix typo
Diffstat (limited to 'compiler/src/dotty/tools/dotc')
-rw-r--r-- | compiler/src/dotty/tools/dotc/parsing/Parsers.scala | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index b46bc401d..c14108d2e 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -993,20 +993,22 @@ object Parsers { else { val saved = placeholderParams placeholderParams = Nil + + def wrapPlaceholders(t: Tree) = try + if (placeholderParams.isEmpty) t + else new WildcardFunction(placeholderParams.reverse, t) + finally placeholderParams = saved + val t = expr1(location) if (in.token == ARROW) { - placeholderParams = saved - closureRest(start, location, convertToParams(t)) + placeholderParams = Nil // don't interpret `_' to the left of `=>` as placeholder + wrapPlaceholders(closureRest(start, location, convertToParams(t))) } else if (isWildcard(t)) { placeholderParams = placeholderParams ::: saved t } - else - try - if (placeholderParams.isEmpty) t - else new WildcardFunction(placeholderParams.reverse, t) - finally placeholderParams = saved + else wrapPlaceholders(t) } } |