summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
diff options
context:
space:
mode:
authorSom Snytt <som.snytt@gmail.com>2016-09-21 11:03:53 -0700
committerSom Snytt <som.snytt@gmail.com>2017-03-11 23:48:31 -0800
commita85521efbbf65161debc460ab5cb55562db051e9 (patch)
tree58b2c70aa32ab4d68512a3fc265adaadded99e70 /src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
parentc9682121b6ed33fe67dad445ebc665d13b369bbb (diff)
downloadscala-a85521efbbf65161debc460ab5cb55562db051e9.tar.gz
scala-a85521efbbf65161debc460ab5cb55562db051e9.tar.bz2
scala-a85521efbbf65161debc460ab5cb55562db051e9.zip
SI-8040 Warn patvars in casedefs
Collect bindings in casedefs unless "@-bound to _". Also minor refactor to make it easier to see the cases of `id @ _`. Tupled matching is supposed to be efficient either now or soon.
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/parser/Parsers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala35
1 files changed, 15 insertions, 20 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index 68bd663ab8..01a083018c 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -1947,27 +1947,22 @@ self =>
* | Pattern3
* }}}
*/
- def pattern2(): Tree = {
- val p = pattern3()
-
- if (in.token != AT) p // var pattern upgraded later to x @ _
- else p match {
- case Ident(nme.WILDCARD) =>
- in.nextToken()
- pattern3()
- case Ident(name) =>
- in.nextToken()
- val body = pattern3()
- atPos(p.pos.start, p.pos.start, body.pos.end) {
- val t = Bind(name, body)
- body match {
- case Ident(nme.WILDCARD) => t updateAttachment AtBoundIdentifierAttachment
- case _ if !settings.warnUnusedPatVars => t updateAttachment AtBoundIdentifierAttachment
- case _ => t
- }
+ def pattern2(): Tree = (pattern3(), in.token) match {
+ case (Ident(nme.WILDCARD), AT) =>
+ in.nextToken()
+ pattern3()
+ case (p @ Ident(name), AT) =>
+ in.nextToken()
+ val body = pattern3()
+ atPos(p.pos.start, p.pos.start, body.pos.end) {
+ val t = Bind(name, body)
+ body match {
+ case Ident(nme.WILDCARD) => t updateAttachment AtBoundIdentifierAttachment
+ case _ if !settings.warnUnusedPatVars => t updateAttachment AtBoundIdentifierAttachment
+ case _ => t
}
- case _ => p
- }
+ }
+ case (p, _) => p
}
/** {{{