Skip to content

Commit c09f7a0

Browse files
author
Alexey Romanov
committed
Fix codegen for String Ordering ops
1 parent 5a6ee33 commit c09f7a0

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

src/common/OrderingOps.scala

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,19 @@ trait ScalaGenOrderingOps extends ScalaGenBase {
152152
case OrderingGT(a,b) => emitValDef(sym, src"$a > $b")
153153
case OrderingGTEQ(a,b) => emitValDef(sym, src"$a >= $b")
154154
case OrderingEquiv(a,b) => emitValDef(sym, src"$a equiv $b")
155-
case OrderingMax(a,b) => emitValDef(sym, src"$a max $b")
156-
case OrderingMin(a,b) => emitValDef(sym, src"$a min $b")
155+
// "$a max $b" is wrong for Strings because it tries to use `StringLike.max(Ordering)`
156+
case c@OrderingMax(a,b) =>
157+
val rhs = if (c.mev == manifest[String])
158+
src"scala.math.Ordering.String.max($a, $b)"
159+
else
160+
src"$a max $b"
161+
emitValDef(sym, rhs)
162+
case c@OrderingMin(a,b) =>
163+
val rhs = if (c.mev == manifest[String])
164+
src"scala.math.Ordering.String.min($a, $b)"
165+
else
166+
src"$a min $b"
167+
emitValDef(sym, rhs)
157168
case c@OrderingCompare(a,b) => c.mev match {
158169
case m if m == Manifest.Int => emitValDef(sym, "java.lang.Integer.compare("+quote(a)+","+quote(b)+")")
159170
case m if m == Manifest.Long => emitValDef(sym, "java.lang.Long.compare("+quote(a)+","+quote(b)+")")

0 commit comments

Comments
 (0)