@@ -869,6 +869,8 @@ object BooleanMacro {
869
869
870
870
def exprStr : String = condition.show
871
871
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
872
874
873
875
// AssertionsSpec.this.convertToEqualizer[scala.Int](a).===(5)(scalactic.Equality.default[scala.Int])
874
876
object TripleEqual {
@@ -920,48 +922,20 @@ object BooleanMacro {
920
922
}.seal[Bool ]
921
923
}
922
924
}
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
935
936
// }
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]
965
939
case Term .Select (left, " unary_!" ) =>
966
940
val receiver = parse(left.seal[Boolean ], prettifier)
967
941
' { ! (~ receiver) }
0 commit comments