Skip to content

Commit e490aa3

Browse files
committed
Use precedence levels properly when printing infix types
1 parent 891eb23 commit e490aa3

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,15 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
155155
case _ => false
156156
}
157157

158-
def toTextInfixType(op: Type, args: List[Type]): Text = {
158+
def toTextInfixType(op: Type, args: List[Type]): Text = changePrec(InfixPrec) {
159159
/* SLS 3.2.8: all infix types have the same precedence.
160160
* In A op B op' C, op and op' need the same associativity.
161161
* Therefore, if op is left associative, anything on its right
162162
* needs to be parenthesized if it's an infix type, and vice versa. */
163163
val l :: r :: Nil = args
164164
val isRightAssoc = op.typeSymbol.name.endsWith(":")
165-
val leftArg = if (isRightAssoc && isInfixType(l)) changePrec(GlobalPrec) { argText(l) } else argText(l)
166-
val rightArg = if (!isRightAssoc && isInfixType(r)) changePrec(GlobalPrec) { argText(r) } else argText(r)
165+
val leftArg = if (isRightAssoc && isInfixType(l)) atPrec(OrPrec) { argText(l) } else argText(l)
166+
val rightArg = if (!isRightAssoc && isInfixType(r)) atPrec(OrPrec) { argText(r) } else argText(r)
167167

168168
leftArg ~ " " ~ toTextLocal(op) ~ " " ~ rightArg
169169
}
@@ -174,7 +174,7 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
174174
if (tycon.isRepeatedParam) return toTextLocal(args.head) ~ "*"
175175
if (defn.isFunctionClass(cls)) return toTextFunction(args, cls.name.isImplicitFunction, cls.name.isErasedFunction)
176176
if (defn.isTupleClass(cls)) return toTextTuple(args)
177-
if (isInfixType(tp)) return atPrec(InfixPrec) { toTextInfixType(tycon, args) }
177+
if (isInfixType(tp)) return toTextInfixType(tycon, args)
178178
case EtaExpansion(tycon) =>
179179
return toText(tycon)
180180
case tp: RefinedType if defn.isFunctionType(tp) =>

0 commit comments

Comments
 (0)