Returns and assignments are lifted Free

This commit is contained in:
alari 2018-09-08 17:06:02 +02:00
parent 9c222f1013
commit 9c2f0fe72c
2 changed files with 8 additions and 6 deletions

View File

@ -1,5 +1,6 @@
package fluence.hackethberlin
import cats.free.Free
import types._
sealed trait Expr[T] {
@ -9,9 +10,10 @@ sealed trait Expr[T] {
}
sealed trait InlineExpr[T <: types.Type] extends Expr[T] {
def toReturn: Expr.Return[T] = Expr.Return[T](this)
def toReturn: Free[Expr, T] = Free liftF Expr.Return[T](this)
def :=:(name: Symbol): Expr[Expr.Ref[T]] = Expr.Assign[T](Expr.Ref[T](name.name, boxedValue), this)
def :=:(name: Symbol): Free[Expr, Expr.Ref[T]] =
Free.liftF[Expr, Expr.Ref[T]](Expr.Assign[T](Expr.Ref[T](name.name, boxedValue), this))
}
object Expr {

View File

@ -28,7 +28,7 @@ object MakeVyperApp extends App {
"myFunc",
('addr ->> address) :: HNil,
address
)(args Free.liftF(args.ref('addr).toReturn))
)(args args.ref('addr).toReturn)
val recordStruct = ProductType(
('record_address ->> address) :: ('other_some ->> uint256) :: HNil
@ -51,9 +51,9 @@ object MakeVyperApp extends App {
`@public` @:
sumArgs.funcDef("sum", uint256) { args
for {
c Free.liftF('c :=: `++`(args.ref('a), args.ref('b)))
d Free.liftF('d :=: `++`(args.ref('b), c))
sum Free.liftF[Expr, uint256.type](`++`(args.ref('a), d).toReturn)
c 'c :=: `++`(args.ref('a), args.ref('b))
d 'd :=: `++`(args.ref('b), c)
sum `++`(args.ref('a), d).toReturn
} yield sum
}
).toVyper