aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/parsing/Parsers.scala
diff options
context:
space:
mode:
authorodersky <odersky@gmail.com>2017-02-22 16:35:13 +0100
committerGuillaume Martres <smarter@ubuntu.com>2017-02-22 16:35:13 +0100
commit6eeb06facb4e0afca9b11b7859a929b31fc23f25 (patch)
tree428c7ecc2f07e85088d9afe615f2a804d487c4f5 /compiler/src/dotty/tools/dotc/parsing/Parsers.scala
parent8a826ee3d7a7a7230dea8cc1fa4f87b70e8efe81 (diff)
downloaddotty-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/parsing/Parsers.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/parsing/Parsers.scala16
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)
}
}