@@ -865,6 +865,7 @@ object BooleanMacro {
865
865
def parse (condition : Expr [Boolean ], prettifier : Expr [Prettifier ])(implicit refl : Reflection ): Expr [Bool ] = {
866
866
import refl ._
867
867
import quoted .Toolbox .Default ._
868
+ import util ._
868
869
869
870
def exprStr : String = condition.show
870
871
def defaultCase = '(Bool.simpleMacroBool(~condition, ~exprStr.toExpr, ~prettifier))
@@ -883,88 +884,8 @@ object BooleanMacro {
883
884
}
884
885
885
886
condition.unseal.underlyingArgument match {
886
- case Term .Apply (Term .Select (lhs, op), rhs :: Nil ) =>
887
+ case Term .Apply (Term .IsSelect (sel @ Term . Select (lhs, op) ), rhs :: Nil ) =>
887
888
op match {
888
- case " ==" =>
889
- val left = lhs.seal[Any ]
890
- val right = rhs.seal[Any ]
891
- ' {
892
- val _left = ~ left
893
- val _right = ~ right
894
- val _result = _left == _right
895
- Bool .binaryMacroBool(_left, ~ op.toExpr, _right, _result, ~ prettifier)
896
- }
897
- case " !=" =>
898
- val left = lhs.seal[Any ]
899
- val right = rhs.seal[Any ]
900
- ' {
901
- val _left = ~ left
902
- val _right = ~ right
903
- val _result = _left != _right
904
- Bool .binaryMacroBool(_left, ~ op.toExpr, _right, _result, ~ prettifier)
905
- }
906
- case " >" =>
907
- // blocked by tasty constructors
908
- // https://github.com/lampepfl/dotty/issues/5567
909
- val left = lhs.seal[Int ]
910
- val right = rhs.seal[Int ]
911
- ' {
912
- val _left = ~ left
913
- val _right = ~ right
914
- val _result = _left > _right
915
- Bool .binaryMacroBool(_left, ~ op.toExpr, _right, _result, ~ prettifier)
916
- }
917
- case " <" =>
918
- // blocked by tasty constructors
919
- // https://github.com/lampepfl/dotty/issues/5567
920
- val left = lhs.seal[Int ]
921
- val right = rhs.seal[Int ]
922
- ' {
923
- val _left = ~ left
924
- val _right = ~ right
925
- val _result = _left < _right
926
- Bool .binaryMacroBool(_left, ~ op.toExpr, _right, _result, ~ prettifier)
927
- }
928
- case " >=" =>
929
- // blocked by tasty constructors
930
- // https://github.com/lampepfl/dotty/issues/5567
931
- val left = lhs.seal[Int ]
932
- val right = rhs.seal[Int ]
933
- ' {
934
- val _left = ~ left
935
- val _right = ~ right
936
- val _result = _left >= _right
937
- Bool .binaryMacroBool(_left, ~ op.toExpr, _right, _result, ~ prettifier)
938
- }
939
- case " <=" =>
940
- // blocked by tasty constructors
941
- // https://github.com/lampepfl/dotty/issues/5567
942
- val left = lhs.seal[Int ]
943
- val right = rhs.seal[Int ]
944
- ' {
945
- val _left = ~ left
946
- val _right = ~ right
947
- val _result = _left <= _right
948
- Bool .binaryMacroBool(_left, ~ op.toExpr, _right, _result, ~ prettifier)
949
- }
950
- case " eq" =>
951
- val left = lhs.seal[AnyRef ]
952
- val right = rhs.seal[AnyRef ]
953
- ' {
954
- val _left = ~ left
955
- val _right = ~ right
956
- val _result = _left `eq` _right
957
- Bool .binaryMacroBool(_left, ~ op.toExpr, _right, _result, ~ prettifier)
958
- }
959
- case " ne" =>
960
- val left = lhs.seal[AnyRef ]
961
- val right = rhs.seal[AnyRef ]
962
- ' {
963
- val _left = ~ left
964
- val _right = ~ right
965
- val _result = _left `ne` _right
966
- Bool .binaryMacroBool(_left, ~ op.toExpr, _right, _result, ~ prettifier)
967
- }
968
889
case " ||" =>
969
890
val left = parse(lhs.seal[Boolean ], prettifier)
970
891
val right = parse(rhs.seal[Boolean ], prettifier)
@@ -982,7 +903,22 @@ object BooleanMacro {
982
903
val right = parse(rhs.seal[Boolean ], prettifier)
983
904
'(~left & ~right)
984
905
case _ =>
985
- defaultCase
906
+ sel.tpe.widen match {
907
+ case Type .MethodType (_, Type .ByNameType (_) :: Nil , _) =>
908
+ defaultCase
909
+ case _ =>
910
+ let(lhs) { left =>
911
+ let(rhs) { right =>
912
+ let(Term .Apply (Term .Select .copy(sel)(left, op), right :: Nil )) { result =>
913
+ val l = left.seal[Any ]
914
+ val r = right.seal[Any ]
915
+ val b = result.seal[Boolean ]
916
+ val code = ' { Bool .binaryMacroBool(~ l, ~ op.toExpr, ~ r, ~ b, ~ prettifier) }
917
+ code.unseal
918
+ }
919
+ }
920
+ }.seal[Bool ]
921
+ }
986
922
}
987
923
// case TripleEqual(fn, lhs, op, rhs, Some(eq)) =>
988
924
// val fun = fn.seal[Any => TripleEqualsSupport#Equalizer[_]]
0 commit comments