Skip to content

Commit 016be9b

Browse files
committed
Implement support for ===
Blocked by scala/scala3#5786
1 parent d8a9342 commit 016be9b

File tree

1 file changed

+15
-41
lines changed

1 file changed

+15
-41
lines changed

scalactic/src/main/scala/org/scalactic/BooleanMacro.scala

Lines changed: 15 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -869,6 +869,8 @@ object BooleanMacro {
869869

870870
def exprStr: String = condition.show
871871
def defaultCase = '(Bool.simpleMacroBool(~condition, ~exprStr.toExpr, ~prettifier))
872+
def isImplicitMethodType(tp: Type): Boolean =
873+
Type.IsMethodType.unapply(tp).flatMap(tp => if tp.isImplicit then Some(true) else None).nonEmpty
872874

873875
// AssertionsSpec.this.convertToEqualizer[scala.Int](a).===(5)(scalactic.Equality.default[scala.Int])
874876
object TripleEqual {
@@ -920,48 +922,20 @@ object BooleanMacro {
920922
}.seal[Bool]
921923
}
922924
}
923-
// case TripleEqual(fn, lhs, op, rhs, Some(eq)) =>
924-
// val fun = fn.seal[Any => TripleEqualsSupport#Equalizer[_]]
925-
// val left = lhs.seal[Any]
926-
// val right = rhs.seal[Any]
927-
// val equality = eq.seal[Equality[Any]]
928-
// op match {
929-
// case "===" =>
930-
// '{
931-
// val _left = ~left
932-
// val _right = ~right
933-
// val _result = (~fun)(_left).===(_right)(~equality)
934-
// Bool.binaryMacroBool(_left, ~op.toExpr, _right, _result, ~prettifier)
925+
// TODO: blocked by https://github.com/lampepfl/dotty/issues/5786
926+
// case Term.Apply(f @ Term.Apply(Term.IsSelect(sel @ Term.Select(Term.Apply(qual, lhs :: Nil), "===")), rhs :: Nil), implicits)
927+
// if isImplicitMethodType(f.tpe) =>
928+
// let(lhs) { left =>
929+
// let(rhs) { right =>
930+
// let(Term.Apply(Term.Apply(Term.Select.copy(sel)(Term.Apply(qual, left :: Nil), "==="), right :: Nil), implicits)) { result =>
931+
// val l = left.seal[Any]
932+
// val r = right.seal[Any]
933+
// val b = result.seal[Boolean]
934+
// val code = '{ Bool.binaryMacroBool(~l, "===", ~r, ~b, ~prettifier) }
935+
// code.unseal
935936
// }
936-
// case "!==" =>
937-
// '{
938-
// val _left = ~left
939-
// val _right = ~right
940-
// val _result = (~fun)(_left).!==(_right)(~equality)
941-
// Bool.binaryMacroBool(_left, ~op.toExpr, _right, _result, ~prettifier)
942-
// }
943-
// }
944-
// case TripleEqual(fn, lhs, op, rhs, None) =>
945-
// val fun = fn.seal[Any => TripleEqualsSupport#Equalizer[_]]
946-
// val left = lhs.seal[Any]
947-
// val right = rhs.seal[Any]
948-
949-
// op match {
950-
// case "===" =>
951-
// '{
952-
// val _left = ~left
953-
// val _right = ~right
954-
// val _result = (~fun)(_left) === _right
955-
// Bool.binaryMacroBool(_left, ~op.toExpr, _right, _result, ~prettifier)
956-
// }
957-
// case "!==" =>
958-
// '{
959-
// val _left = ~left
960-
// val _right = ~right
961-
// val _result = (~fun)(_left) !== _right
962-
// Bool.binaryMacroBool(_left, ~op.toExpr, _right, _result, ~prettifier)
963-
// }
964-
// }
937+
// }
938+
// }.seal[Bool]
965939
case Term.Select(left, "unary_!") =>
966940
val receiver = parse(left.seal[Boolean], prettifier)
967941
'{ !(~receiver) }

0 commit comments

Comments
 (0)