diff --git a/model/inline/src/main/scala/aqua/model/inline/RawValueInliner.scala b/model/inline/src/main/scala/aqua/model/inline/RawValueInliner.scala index 40959137a..404328528 100644 --- a/model/inline/src/main/scala/aqua/model/inline/RawValueInliner.scala +++ b/model/inline/src/main/scala/aqua/model/inline/RawValueInliner.scala @@ -3,7 +3,7 @@ package aqua.model.inline import aqua.model.inline.state.{Arrows, Counter, Exports, Mangler} import aqua.model.* import aqua.model.inline.raw.{ - ApplyBoolOpRawInliner, + ApplyBinaryOpRawInliner, ApplyFunctorRawInliner, ApplyGateRawInliner, ApplyPropertiesRawInliner, @@ -55,8 +55,8 @@ object RawValueInliner extends Logging { case ar: AbilityRaw => MakeAbilityRawInliner(ar, propertiesAllowed) - case abor: ApplyBoolOpRaw => - ApplyBoolOpRawInliner(abor, propertiesAllowed) + case abbor: ApplyBinaryOpRaw => + ApplyBinaryOpRawInliner(abbor, propertiesAllowed) case cr: CallArrowRaw => CallArrowRawInliner(cr, propertiesAllowed) diff --git a/model/inline/src/main/scala/aqua/model/inline/raw/ApplyBoolOpRawInliner.scala b/model/inline/src/main/scala/aqua/model/inline/raw/ApplyBinaryOpRawInliner.scala similarity index 93% rename from model/inline/src/main/scala/aqua/model/inline/raw/ApplyBoolOpRawInliner.scala rename to model/inline/src/main/scala/aqua/model/inline/raw/ApplyBinaryOpRawInliner.scala index 573e9f8e9..b1657c618 100644 --- a/model/inline/src/main/scala/aqua/model/inline/raw/ApplyBoolOpRawInliner.scala +++ b/model/inline/src/main/scala/aqua/model/inline/raw/ApplyBinaryOpRawInliner.scala @@ -8,8 +8,8 @@ import cats.data.{NonEmptyList, NonEmptyMap, State} import aqua.model.inline.Inline import aqua.model.inline.RawValueInliner.{unfold, valueToModel} import aqua.types.{ArrowType, ScalarType} -import aqua.raw.value.ApplyBoolOpRaw -import aqua.raw.value.ApplyBoolOpRaw.BoolOpRaw.* +import aqua.raw.value.ApplyBinaryOpRaw +import aqua.raw.value.ApplyBinaryOpRaw.Op.* import cats.data.Chain import cats.syntax.traverse.* @@ -20,10 +20,10 @@ import cats.syntax.apply.* import cats.syntax.foldable.* import cats.syntax.applicative.* -object ApplyBoolOpRawInliner extends RawInliner[ApplyBoolOpRaw] { +object ApplyBinaryOpRawInliner extends RawInliner[ApplyBinaryOpRaw] { override def apply[S: Mangler: Exports: Arrows]( - raw: ApplyBoolOpRaw, + raw: ApplyBinaryOpRaw, propertiesAllowed: Boolean ): State[S, (ValueModel, Inline)] = for { left <- unfold(raw.left) @@ -56,7 +56,7 @@ object ApplyBoolOpRawInliner extends RawInliner[ApplyBoolOpRaw] { rmodel: ValueModel, linline: Inline, rinline: Inline, - op: ApplyBoolOpRaw.BoolOpRaw + op: ApplyBinaryOpRaw.Op ): State[S, (ValueModel, Inline)] = { val (name, compareWith) = op match { case And => ("and", true) diff --git a/model/inline/src/test/scala/aqua/model/inline/RawValueInlinerSpec.scala b/model/inline/src/test/scala/aqua/model/inline/RawValueInlinerSpec.scala index 7e68f9ca9..021cdaddd 100644 --- a/model/inline/src/test/scala/aqua/model/inline/RawValueInlinerSpec.scala +++ b/model/inline/src/test/scala/aqua/model/inline/RawValueInlinerSpec.scala @@ -22,7 +22,7 @@ import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers import scala.collection.immutable.SortedMap -import aqua.raw.value.ApplyBoolOpRaw +import aqua.raw.value.ApplyBinaryOpRaw import aqua.raw.value.CallArrowRaw class RawValueInlinerSpec extends AnyFlatSpec with Matchers { diff --git a/model/raw/src/main/scala/aqua/raw/value/ValueRaw.scala b/model/raw/src/main/scala/aqua/raw/value/ValueRaw.scala index 9ef552455..9d42650ed 100644 --- a/model/raw/src/main/scala/aqua/raw/value/ValueRaw.scala +++ b/model/raw/src/main/scala/aqua/raw/value/ValueRaw.scala @@ -179,8 +179,8 @@ case class AbilityRaw(fieldsAndArrows: NonEmptyMap[String, ValueRaw], abilityTyp copy(fieldsAndArrows = fieldsAndArrows.map(_.renameVars(map))) } -case class ApplyBoolOpRaw( - op: ApplyBoolOpRaw.BoolOpRaw, +case class ApplyBinaryOpRaw( + op: ApplyBinaryOpRaw.Op, left: ValueRaw, right: ValueRaw ) extends ValueRaw { @@ -197,9 +197,9 @@ case class ApplyBoolOpRaw( copy(left = left.renameVars(map), right = right.renameVars(map)) } -object ApplyBoolOpRaw { +object ApplyBinaryOpRaw { - enum BoolOpRaw { + enum Op { case And case Or } diff --git a/parser/src/main/scala/aqua/parser/lexer/ValueToken.scala b/parser/src/main/scala/aqua/parser/lexer/ValueToken.scala index 64989de01..de36ad730 100644 --- a/parser/src/main/scala/aqua/parser/lexer/ValueToken.scala +++ b/parser/src/main/scala/aqua/parser/lexer/ValueToken.scala @@ -363,6 +363,7 @@ case class PrefixToken[F[_]: Comonad]( prefix: F[PrefixToken.Op] ) extends ValueToken[F] { + def op: PrefixToken.Op = prefix.extract override def as[T](v: T): F[T] = prefix.as(v) override def mapK[K[_]: Comonad](fk: FunctionK[F, K]): ValueToken[K] = diff --git a/semantics/src/main/scala/aqua/semantics/rules/ValuesAlgebra.scala b/semantics/src/main/scala/aqua/semantics/rules/ValuesAlgebra.scala index 2fdee1142..e3034f725 100644 --- a/semantics/src/main/scala/aqua/semantics/rules/ValuesAlgebra.scala +++ b/semantics/src/main/scala/aqua/semantics/rules/ValuesAlgebra.scala @@ -174,6 +174,8 @@ class ValuesAlgebra[S[_], Alg[_]: Monad](implicit case ca: CallArrowToken[S] => callArrowToRaw(ca).map(_.widen[ValueRaw]) + case pr @ PrefixToken(o, _) => ??? + case it @ InfixToken(l, r, _) => (valueToRaw(l), valueToRaw(r)).flatMapN { case (Some(leftRaw), Some(rightRaw)) => @@ -189,10 +191,10 @@ class ValuesAlgebra[S[_], Alg[_]: Monad](implicit } yield Option.when( leftChecked && rightChecked )( - ApplyBoolOpRaw( + ApplyBinaryOpRaw( op = bop match { - case BoolOp.And => ApplyBoolOpRaw.BoolOpRaw.And - case BoolOp.Or => ApplyBoolOpRaw.BoolOpRaw.Or + case BoolOp.And => ApplyBinaryOpRaw.Op.And + case BoolOp.Or => ApplyBinaryOpRaw.Op.Or }, left = leftRaw, right = rightRaw diff --git a/semantics/src/test/scala/aqua/semantics/ValuesAlgebraSpec.scala b/semantics/src/test/scala/aqua/semantics/ValuesAlgebraSpec.scala index d65a81551..84364209d 100644 --- a/semantics/src/test/scala/aqua/semantics/ValuesAlgebraSpec.scala +++ b/semantics/src/test/scala/aqua/semantics/ValuesAlgebraSpec.scala @@ -14,7 +14,7 @@ import aqua.semantics.rules.definitions.DefinitionsInterpreter import aqua.semantics.rules.types.TypesInterpreter import aqua.semantics.rules.locations.LocationsAlgebra import aqua.semantics.rules.locations.DummyLocationsInterpreter -import aqua.raw.value.{ApplyBoolOpRaw, LiteralRaw} +import aqua.raw.value.{ApplyBinaryOpRaw, LiteralRaw} import aqua.raw.RawContext import aqua.types.{LiteralType, ScalarType, TopType, Type} import aqua.parser.lexer.{InfixToken, LiteralToken, Name, ValueToken, VarToken} @@ -238,10 +238,10 @@ class ValuesAlgebraSpec extends AnyFlatSpec with Matchers with Inside { .run(state) .value - inside(res) { case Some(ApplyBoolOpRaw(bop, _, _)) => + inside(res) { case Some(ApplyBinaryOpRaw(bop, _, _)) => bop shouldBe (op match { - case InfixToken.BoolOp.And => ApplyBoolOpRaw.BoolOpRaw.And - case InfixToken.BoolOp.Or => ApplyBoolOpRaw.BoolOpRaw.Or + case InfixToken.BoolOp.And => ApplyBinaryOpRaw.Op.And + case InfixToken.BoolOp.Or => ApplyBinaryOpRaw.Op.Or }) } }