diff --git a/compiler/src/test/scala/aqua/compiler/AquaCompilerSpec.scala b/compiler/src/test/scala/aqua/compiler/AquaCompilerSpec.scala index 5ee595616..055953fbb 100644 --- a/compiler/src/test/scala/aqua/compiler/AquaCompilerSpec.scala +++ b/compiler/src/test/scala/aqua/compiler/AquaCompilerSpec.scala @@ -1,6 +1,14 @@ package aqua.compiler -import aqua.model.{CallModel, ForModel, FunctorModel, IntoIndexModel, LiteralModel, ValueModel, VarModel} +import aqua.model.{ + CallModel, + ForModel, + FunctorModel, + IntoIndexModel, + LiteralModel, + ValueModel, + VarModel +} import aqua.model.transform.TransformConfig import aqua.model.transform.Transform import aqua.parser.ParserError @@ -10,7 +18,20 @@ import aqua.parser.lift.Span import aqua.parser.lift.Span.S import aqua.raw.ConstantRaw import aqua.raw.value.{LiteralRaw, ValueRaw, VarRaw} -import aqua.res.{ApRes, CallRes, CallServiceRes, CanonRes, FoldRes, MakeRes, MatchMismatchRes, NextRes, ParRes, RestrictionRes, SeqRes, XorRes} +import aqua.res.{ + ApRes, + CallRes, + CallServiceRes, + CanonRes, + FoldRes, + MakeRes, + MatchMismatchRes, + NextRes, + ParRes, + RestrictionRes, + SeqRes, + XorRes +} import aqua.types.{ArrayType, CanonStreamType, LiteralType, ScalarType, StreamType, Type} import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers @@ -83,8 +104,8 @@ class AquaCompilerSpec extends AnyFlatSpec with Matchers { } - def through(peer: ValueModel, log: String = null) = - MakeRes.noop(peer, log) + def through(peer: ValueModel) = + MakeRes.hop(peer) val relay = VarRaw("-relay-", ScalarType.string) @@ -203,10 +224,10 @@ class AquaCompilerSpec extends AnyFlatSpec with Matchers { ), join(results, LiteralModel.fromRaw(LiteralRaw.number(2))), CanonRes(results, init, CallModel.Export(canonResult.name, canonResult.`type`)).leaf, - ApRes( - canonResult, - CallModel.Export(flatResult.name, flatResult.`type`) - ).leaf + ApRes( + canonResult, + CallModel.Export(flatResult.name, flatResult.`type`) + ).leaf ) ), CallServiceRes( diff --git a/model/res/src/main/scala/aqua/res/MakeRes.scala b/model/res/src/main/scala/aqua/res/MakeRes.scala index 127ba509d..3d8f8e9a8 100644 --- a/model/res/src/main/scala/aqua/res/MakeRes.scala +++ b/model/res/src/main/scala/aqua/res/MakeRes.scala @@ -6,21 +6,27 @@ import cats.data.{Chain, NonEmptyList} import cats.free.Cofree import aqua.raw.value.{LiteralRaw, ValueRaw} import aqua.model.* +import aqua.types.ScalarType // TODO docs object MakeRes { val op: ValueModel = LiteralModel.fromRaw(LiteralRaw.quote("op")) - def noop(onPeer: ValueModel, log: String = null): ResolvedOp.Tree = - CallServiceRes( - op, - "noop", - CallRes( - Option(log).filter(_ == "").map(LiteralRaw.quote).map(LiteralModel.fromRaw).toList, - None - ), - onPeer - ).leaf + def hop(onPeer: ValueModel): ResolvedOp.Tree = { + val streamName = "-hop-stream-" + val canonName = "-hop-canon-" + val elementType = ScalarType.u8 + + RestrictionRes(streamName, isStream = true).wrap( + RestrictionRes(canonName, isStream = false).wrap( + CanonRes( + operand = VarModel(streamName, StreamType(elementType)), + peerId = onPeer, + exportTo = CallModel.Export(canonName, CanonStreamType(elementType)) + ).leaf + ) + ) + } def join(onPeer: ValueModel, operands: NonEmptyList[ValueModel]): ResolvedOp.Tree = CallServiceRes( diff --git a/model/transform/src/main/scala/aqua/model/transform/topology/Topology.scala b/model/transform/src/main/scala/aqua/model/transform/topology/Topology.scala index 1a5c72be0..81a6c24d1 100644 --- a/model/transform/src/main/scala/aqua/model/transform/topology/Topology.scala +++ b/model/transform/src/main/scala/aqua/model/transform/topology/Topology.scala @@ -583,8 +583,8 @@ object Topology extends Logging { val chainZipperEv = resolved.traverse(cofree => ( - rc.topology.pathBefore.map(through(_, s"before ${currI}")), - rc.topology.pathAfter.map(through(_, s"after ${currI}", reversed = true)) + rc.topology.pathBefore.map(through(_)), + rc.topology.pathAfter.map(through(_, reversed = true)) ).mapN { case (pathBefore, pathAfter) => val cz = ChainZipper( pathBefore, @@ -623,7 +623,6 @@ object Topology extends Logging { // if there's a chain like a -> b -> c -> ... -> b -> g, remove everything between b and b def through( peerIds: Chain[ValueModel], - log: String = null, reversed: Boolean = false ): Chain[Res] = peerIds.map { v => @@ -635,16 +634,16 @@ object Topology extends Logging { if (reversed) SeqRes.wrap( NextRes(itemName).leaf, - MakeRes.noop(VarModel(itemName, ScalarType.string, Chain.empty), log) + MakeRes.hop(VarModel(itemName, ScalarType.string, Chain.empty)) ) else SeqRes.wrap( - MakeRes.noop(VarModel(itemName, ScalarType.string, Chain.empty), log), + MakeRes.hop(VarModel(itemName, ScalarType.string, Chain.empty)), NextRes(itemName).leaf ) ) case _ => - MakeRes.noop(v, log) + MakeRes.hop(v) } } } diff --git a/model/transform/src/test/scala/aqua/model/transform/ModelBuilder.scala b/model/transform/src/test/scala/aqua/model/transform/ModelBuilder.scala index eb39a39b3..6b7ea6e87 100644 --- a/model/transform/src/test/scala/aqua/model/transform/ModelBuilder.scala +++ b/model/transform/src/test/scala/aqua/model/transform/ModelBuilder.scala @@ -125,6 +125,6 @@ object ModelBuilder { ) } - def through(peer: ValueModel, log: String = null) = - MakeRes.noop(peer, log) + def through(peer: ValueModel) = + MakeRes.hop(peer) }