diff options
author | Lukas Rytz <lukas.rytz@typesafe.com> | 2015-03-23 20:55:02 +0100 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@typesafe.com> | 2015-03-23 20:55:02 +0100 |
commit | b40b81cd3b1cd8b8b93df3b912fa10ccf1b53b26 (patch) | |
tree | e94b84c405aaf351377f4bb053928b718455a068 /src | |
parent | ec0a860766467de78f4932431608d423705e1e41 (diff) | |
parent | 33c568c029201b8bd76ace556ff3641db47d12fe (diff) | |
download | scala-b40b81cd3b1cd8b8b93df3b912fa10ccf1b53b26.tar.gz scala-b40b81cd3b1cd8b8b93df3b912fa10ccf1b53b26.tar.bz2 scala-b40b81cd3b1cd8b8b93df3b912fa10ccf1b53b26.zip |
Merge pull request #4301 from som-snytt/issue/8918-deferred
SI-8918 Unary ids are plain ids
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/Parsers.scala | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala index 4663810003..627a181793 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala @@ -665,6 +665,15 @@ self => } def isLiteral = isLiteralToken(in.token) + def isSimpleExprIntroToken(token: Token): Boolean = isLiteralToken(token) || (token match { + case IDENTIFIER | BACKQUOTED_IDENT | + THIS | SUPER | NEW | USCORE | + LPAREN | LBRACE | XMLSTART => true + case _ => false + }) + + def isSimpleExprIntro: Boolean = isExprIntroToken(in.token) + def isExprIntroToken(token: Token): Boolean = isLiteralToken(token) || (token match { case IDENTIFIER | BACKQUOTED_IDENT | THIS | SUPER | IF | FOR | NEW | USCORE | TRY | WHILE | @@ -1565,11 +1574,14 @@ self => def prefixExpr(): Tree = { if (isUnaryOp) { atPos(in.offset) { - val name = nme.toUnaryName(rawIdent().toTermName) - if (name == nme.UNARY_- && isNumericLit) - simpleExprRest(literal(isNegated = true), canApply = true) - else - Select(stripParens(simpleExpr()), name) + if (lookingAhead(isSimpleExprIntro)) { + val uname = nme.toUnaryName(rawIdent().toTermName) + if (uname == nme.UNARY_- && isNumericLit) + simpleExprRest(literal(isNegated = true), canApply = true) + else + Select(stripParens(simpleExpr()), uname) + } + else simpleExpr() } } else simpleExpr() |