Skip to content

Commit d8a9342

Browse files
committed
Implement assert & assume properly.
TODO: ===
1 parent 9b694ae commit d8a9342

File tree

1 file changed

+18
-82
lines changed

1 file changed

+18
-82
lines changed

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

Lines changed: 18 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -865,6 +865,7 @@ object BooleanMacro {
865865
def parse(condition: Expr[Boolean], prettifier: Expr[Prettifier])(implicit refl: Reflection): Expr[Bool] = {
866866
import refl._
867867
import quoted.Toolbox.Default._
868+
import util._
868869

869870
def exprStr: String = condition.show
870871
def defaultCase = '(Bool.simpleMacroBool(~condition, ~exprStr.toExpr, ~prettifier))
@@ -883,88 +884,8 @@ object BooleanMacro {
883884
}
884885

885886
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) =>
887888
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-
}
968889
case "||" =>
969890
val left = parse(lhs.seal[Boolean], prettifier)
970891
val right = parse(rhs.seal[Boolean], prettifier)
@@ -982,7 +903,22 @@ object BooleanMacro {
982903
val right = parse(rhs.seal[Boolean], prettifier)
983904
'(~left & ~right)
984905
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+
}
986922
}
987923
// case TripleEqual(fn, lhs, op, rhs, Some(eq)) =>
988924
// val fun = fn.seal[Any => TripleEqualsSupport#Equalizer[_]]

0 commit comments

Comments
 (0)