summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
diff options
context:
space:
mode:
authorSom Snytt <som.snytt@gmail.com>2014-01-27 09:58:00 -0800
committerSom Snytt <som.snytt@gmail.com>2014-01-27 10:46:16 -0800
commitd603cae2cd6b796534e55b25ee65385825904a10 (patch)
tree0270c82f52fe747b5181630bf852cfbc937afb31 /src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
parent18c9196686410536f69f8e05b62f0cd7e0b91a8c (diff)
downloadscala-d603cae2cd6b796534e55b25ee65385825904a10.tar.gz
scala-d603cae2cd6b796534e55b25ee65385825904a10.tar.bz2
scala-d603cae2cd6b796534e55b25ee65385825904a10.zip
SI-8182 Avert crash due to type args in pattern
Error out type args on binary op after emitting error. Let the parse limp into the whirring blades.
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/parser/Parsers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index 0728fff74f..9e580d8bc8 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -837,8 +837,14 @@ self =>
if (samePrecedence)
checkHeadAssoc(leftAssoc)
- def loop(top: Tree): Tree =
- if (canReduce) loop(finishBinaryOp(isExpr, popOpInfo(), top)) else top
+ def loop(top: Tree): Tree = if (canReduce) {
+ val info = popOpInfo()
+ if (!isExpr && info.targs.nonEmpty) {
+ syntaxError(info.offset, "type application is not allowed in pattern")
+ info.targs.foreach(_.setType(ErrorType))
+ }
+ loop(finishBinaryOp(isExpr, info, top))
+ } else top
loop(top)
}