@@ -470,11 +470,11 @@ object Parsers {
470
470
def infixOps (
471
471
first : Tree , canStartOperand : Token => Boolean , operand : () => Tree ,
472
472
isType : Boolean = false ,
473
- notAnOperator : Name = nme. EMPTY ,
473
+ isOperator : => Boolean = true ,
474
474
maybePostfix : Boolean = false ): Tree = {
475
475
val base = opStack
476
476
var top = first
477
- while (isIdent && in.name != notAnOperator ) {
477
+ while (isIdent && isOperator ) {
478
478
val op = if (isType) typeIdent() else termIdent()
479
479
top = reduceStack(base, top, precedence(op.name), isLeftAssoc(op.name), op.name)
480
480
opStack = OpInfo (top, op, in.offset) :: opStack
@@ -797,8 +797,16 @@ object Parsers {
797
797
*/
798
798
def infixType (): Tree = infixTypeRest(refinedType())
799
799
800
+ /** Is current ident a `*`, and is it followed by a `)` or `,`? */
801
+ def isPostfixStar : Boolean =
802
+ in.name == nme.raw.STAR && {
803
+ val lookahead = in.lookaheadScanner
804
+ lookahead.nextToken()
805
+ (lookahead.token == RPAREN || lookahead.token == COMMA )
806
+ }
807
+
800
808
def infixTypeRest (t : Tree ): Tree =
801
- infixOps(t, canStartTypeTokens, refinedType, isType = true , notAnOperator = nme.raw. STAR )
809
+ infixOps(t, canStartTypeTokens, refinedType, isType = true , isOperator = ! isPostfixStar )
802
810
803
811
/** RefinedType ::= WithType {Annotation | [nl] Refinement}
804
812
*/
@@ -1556,7 +1564,7 @@ object Parsers {
1556
1564
/** InfixPattern ::= SimplePattern {id [nl] SimplePattern}
1557
1565
*/
1558
1566
def infixPattern (): Tree =
1559
- infixOps(simplePattern(), canStartExpressionTokens, simplePattern, notAnOperator = nme.raw.BAR )
1567
+ infixOps(simplePattern(), canStartExpressionTokens, simplePattern, isOperator = in.name ! = nme.raw.BAR )
1560
1568
1561
1569
/** SimplePattern ::= PatVar
1562
1570
* | Literal
0 commit comments