From bd24a6af1e70854b46408bde0a05616609282c6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20Brachtha=CC=88user?= Date: Tue, 12 Dec 2023 12:45:30 +0100 Subject: [PATCH] Also stub Chez monadic and callcc --- effekt/jvm/src/test/scala/effekt/ChezSchemeTests.scala | 7 ++++--- .../src/main/scala/effekt/generator/chez/Transformer.scala | 7 ++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/effekt/jvm/src/test/scala/effekt/ChezSchemeTests.scala b/effekt/jvm/src/test/scala/effekt/ChezSchemeTests.scala index a62a8d357..2a8f97019 100644 --- a/effekt/jvm/src/test/scala/effekt/ChezSchemeTests.scala +++ b/effekt/jvm/src/test/scala/effekt/ChezSchemeTests.scala @@ -26,6 +26,10 @@ abstract class ChezSchemeTests extends EffektTests { examplesDir / "pos" / "issue319.effekt", examplesDir / "pos" / "maps.effekt", + // splices not yet supported in Chez backends + examplesDir / "pos" / "capture" / "resources.effekt" , + examplesDir / "pos" / "capture" / "ffi_blocks.effekt", + // bidirectional effects are not yet supported in our Chez backend examplesDir / "pos" / "bidirectional", @@ -73,9 +77,6 @@ class ChezSchemeLiftTests extends ChezSchemeTests { override def ignored: List[File] = super.ignored ++ List( - // splices not yet supported - examplesDir / "pos" / "capture" / "resources.effekt" , - // regions are not yet supported examplesDir / "benchmarks" / "generator.effekt", examplesDir / "pos" / "capture" / "regions.effekt", diff --git a/effekt/shared/src/main/scala/effekt/generator/chez/Transformer.scala b/effekt/shared/src/main/scala/effekt/generator/chez/Transformer.scala index 3550ce95a..a7afd2f4e 100644 --- a/effekt/shared/src/main/scala/effekt/generator/chez/Transformer.scala +++ b/effekt/shared/src/main/scala/effekt/generator/chez/Transformer.scala @@ -129,12 +129,17 @@ trait Transformer { case Extern.Def(id, tpe, cps, vps, bps, ret, capt, body) => chez.Constant(nameDef(id), chez.Lambda((vps ++ bps) map { p => ChezName(p.id.name.name) }, - chez.RawExpr(???))) + toChez(body))) case Extern.Include(contents) => RawDef(contents) } + def toChez(t: Template[core.Expr]): chez.Expr = t match { + case Template(List(string), Nil) => chez.RawExpr(string) + case _ => sys error "Splices not yet supported in the Chez backend" + } + def toChez(defn: Definition): Either[chez.Def, Option[chez.Expr]] = defn match { case Definition.Def(id, block) => Left(chez.Constant(nameDef(id), toChez(block)))