diff options
author | Som Snytt <som.snytt@gmail.com> | 2016-09-21 11:03:53 -0700 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2017-03-11 23:48:31 -0800 |
commit | a85521efbbf65161debc460ab5cb55562db051e9 (patch) | |
tree | 58b2c70aa32ab4d68512a3fc265adaadded99e70 /src/compiler/scala/tools/nsc/ast/parser/Parsers.scala | |
parent | c9682121b6ed33fe67dad445ebc665d13b369bbb (diff) | |
download | scala-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.scala | 35 |
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 } /** {{{ |