mirror of
https://github.com/fluencelabs/hackethberlin
synced 2025-04-25 01:12:18 +00:00
Returns and assignments are lifted Free
This commit is contained in:
parent
9c222f1013
commit
9c2f0fe72c
@ -1,5 +1,6 @@
|
|||||||
package fluence.hackethberlin
|
package fluence.hackethberlin
|
||||||
|
|
||||||
|
import cats.free.Free
|
||||||
import types._
|
import types._
|
||||||
|
|
||||||
sealed trait Expr[T] {
|
sealed trait Expr[T] {
|
||||||
@ -9,9 +10,10 @@ sealed trait Expr[T] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sealed trait InlineExpr[T <: types.Type] extends 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 {
|
object Expr {
|
||||||
|
@ -28,7 +28,7 @@ object MakeVyperApp extends App {
|
|||||||
"myFunc",
|
"myFunc",
|
||||||
('addr ->> address) :: HNil,
|
('addr ->> address) :: HNil,
|
||||||
address
|
address
|
||||||
)(args ⇒ Free.liftF(args.ref('addr).toReturn))
|
)(args ⇒ args.ref('addr).toReturn)
|
||||||
|
|
||||||
val recordStruct = ProductType(
|
val recordStruct = ProductType(
|
||||||
('record_address ->> address) :: ('other_some ->> uint256) :: HNil
|
('record_address ->> address) :: ('other_some ->> uint256) :: HNil
|
||||||
@ -51,9 +51,9 @@ object MakeVyperApp extends App {
|
|||||||
`@public` @:
|
`@public` @:
|
||||||
sumArgs.funcDef("sum", uint256) { args ⇒
|
sumArgs.funcDef("sum", uint256) { args ⇒
|
||||||
for {
|
for {
|
||||||
c ← Free.liftF('c :=: `++`(args.ref('a), args.ref('b)))
|
c ← 'c :=: `++`(args.ref('a), args.ref('b))
|
||||||
d ← Free.liftF('d :=: `++`(args.ref('b), c))
|
d ← 'd :=: `++`(args.ref('b), c)
|
||||||
sum ← Free.liftF[Expr, uint256.type](`++`(args.ref('a), d).toReturn)
|
sum ← `++`(args.ref('a), d).toReturn
|
||||||
} yield sum
|
} yield sum
|
||||||
}
|
}
|
||||||
).toVyper
|
).toVyper
|
||||||
|
Loading…
x
Reference in New Issue
Block a user