From c4411d879dbc2d7edaa5495778e213108c7a0d2b Mon Sep 17 00:00:00 2001 From: alari Date: Sat, 8 Sep 2018 12:03:18 +0200 Subject: [PATCH] Void type --- .../scala/fluence/hackethberlin/FuncDef.scala | 26 ++++++++++++++++--- .../fluence/hackethberlin/MakeVyperApp.scala | 5 ++-- .../fluence/hackethberlin/types/Void.scala | 8 ++++++ 3 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 src/main/scala/fluence/hackethberlin/types/Void.scala diff --git a/src/main/scala/fluence/hackethberlin/FuncDef.scala b/src/main/scala/fluence/hackethberlin/FuncDef.scala index 36533dc..ad7ca6a 100644 --- a/src/main/scala/fluence/hackethberlin/FuncDef.scala +++ b/src/main/scala/fluence/hackethberlin/FuncDef.scala @@ -3,15 +3,33 @@ package fluence.hackethberlin import fluence.hackethberlin.types.DataVyper import shapeless._ -class FuncDef[Args <: HList: DataVyper]( +class FuncDef[Args <: HList: DataVyper, Ret <: types.Type]( name: String, argsDef: Args, + ret: Option[Ret], decorators: Set[Decorator] = Set.empty ) { def toVyper: String = - s"${decorators.map(_.toVyper).mkString("\n")}\ndef $name(${DataVyper[Args].mkString(argsDef, ", ")}):\n body;\n" + s"${decorators.map(_.toVyper).mkString("\n")}\ndef $name(${DataVyper[Args].mkString(argsDef, ", ")})${ret.fold("")(" -> "+_.toVyper)}:\n body;\n" - def @:(decorator: Decorator): FuncDef[Args] = - new FuncDef[Args](name, argsDef, decorators + decorator) + def @:(decorator: Decorator): FuncDef[Args, Ret] = + new FuncDef[Args, Ret](name, argsDef, ret, decorators + decorator) } + +object FuncDef { + def apply[Args <: HList : DataVyper, Ret <: types.Type]( + name: String, + argsDef: Args, + ret: Ret + ): FuncDef[Args, Ret] = + new FuncDef(name, argsDef, Some(ret)) + + + def apply[Args <: HList : DataVyper]( + name: String, + argsDef: Args + ): FuncDef[Args, types.Void] = + new FuncDef(name, argsDef, None) + +} \ No newline at end of file diff --git a/src/main/scala/fluence/hackethberlin/MakeVyperApp.scala b/src/main/scala/fluence/hackethberlin/MakeVyperApp.scala index b75be29..c0fe658 100644 --- a/src/main/scala/fluence/hackethberlin/MakeVyperApp.scala +++ b/src/main/scala/fluence/hackethberlin/MakeVyperApp.scala @@ -22,9 +22,10 @@ object MakeVyperApp extends App { ("struct2" → struct) :: HNil ) - val func = new FuncDef( + val func = FuncDef( "myFunc", - ("address" → address) :: HNil + ("address" → address) :: HNil, + uint256 ) println(data.toVyper) diff --git a/src/main/scala/fluence/hackethberlin/types/Void.scala b/src/main/scala/fluence/hackethberlin/types/Void.scala new file mode 100644 index 0000000..da1b309 --- /dev/null +++ b/src/main/scala/fluence/hackethberlin/types/Void.scala @@ -0,0 +1,8 @@ +package fluence.hackethberlin.types + +sealed trait Void extends Type + +// TODO: should it exist as an instance? +case object Void extends Type { + override def toVyper: String = "" +} \ No newline at end of file