aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/parsing/Parsers.scala
diff options
context:
space:
mode:
authorEnno Runne <enno.runne@baymarkets.com>2017-02-15 23:44:13 +0100
committerFelix Mulder <felix.mulder@gmail.com>2017-02-20 16:50:09 +0100
commite668fd7eaf93a81d0409728664a0f2bda4a63761 (patch)
tree521337bc3c7e2fe6117f8635d62217b624898271 /compiler/src/dotty/tools/dotc/parsing/Parsers.scala
parentf76ffe97f9460cc04e159ce5b2c0b83d63fb940c (diff)
downloaddotty-e668fd7eaf93a81d0409728664a0f2bda4a63761.tar.gz
dotty-e668fd7eaf93a81d0409728664a0f2bda4a63761.tar.bz2
dotty-e668fd7eaf93a81d0409728664a0f2bda4a63761.zip
Change 'mixed left- and right-associative operators' to Message
Diffstat (limited to 'compiler/src/dotty/tools/dotc/parsing/Parsers.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/parsing/Parsers.scala15
1 files changed, 7 insertions, 8 deletions
diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala
index 45ae842b6..8f146e920 100644
--- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala
+++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala
@@ -404,14 +404,13 @@ object Parsers {
var opStack: List[OpInfo] = Nil
- def checkAssoc(offset: Int, op: Name, leftAssoc: Boolean) =
+ def checkAssoc(offset: Int, op: Name, leftAssoc: Boolean, op2: Name) =
if (isLeftAssoc(op) != leftAssoc)
- syntaxError(
- "left- and right-associative operators with same precedence may not be mixed", offset)
+ syntaxError(MixedLeftAndRightAssociativeOps(op, op2, leftAssoc), offset)
- def reduceStack(base: List[OpInfo], top: Tree, prec: Int, leftAssoc: Boolean): Tree = {
+ def reduceStack(base: List[OpInfo], top: Tree, prec: Int, leftAssoc: Boolean, op2: Name): Tree = {
if (opStack != base && precedence(opStack.head.operator.name) == prec)
- checkAssoc(opStack.head.offset, opStack.head.operator.name, leftAssoc)
+ checkAssoc(opStack.head.offset, opStack.head.operator.name, leftAssoc, op2)
def recur(top: Tree): Tree = {
if (opStack == base) top
else {
@@ -445,20 +444,20 @@ object Parsers {
var top = first
while (isIdent && in.name != notAnOperator) {
val op = if (isType) typeIdent() else termIdent()
- top = reduceStack(base, top, precedence(op.name), isLeftAssoc(op.name))
+ top = reduceStack(base, top, precedence(op.name), isLeftAssoc(op.name), op.name)
opStack = OpInfo(top, op, in.offset) :: opStack
newLineOptWhenFollowing(canStartOperand)
if (maybePostfix && !canStartOperand(in.token)) {
val topInfo = opStack.head
opStack = opStack.tail
- val od = reduceStack(base, topInfo.operand, 0, true)
+ val od = reduceStack(base, topInfo.operand, 0, true, in.name)
return atPos(startOffset(od), topInfo.offset) {
PostfixOp(od, topInfo.operator)
}
}
top = operand()
}
- reduceStack(base, top, 0, true)
+ reduceStack(base, top, 0, true, in.name)
}
/* -------- IDENTIFIERS AND LITERALS ------------------------------------------- */