From 590b995ec529d8c68d0df2c5729fd44ee3dbfd16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20Brachtha=CC=88user?= Date: Mon, 27 Nov 2023 18:09:28 +0100 Subject: [PATCH] Mark tests that rely on local mutable state, regions, or bidirectional effects --- .../test/scala/effekt/JavaScriptTests.scala | 57 +++++++++++++++++++ .../main/scala/effekt/core/Transformer.scala | 2 +- .../effekt/generator/js/TransformerDS.scala | 2 +- libraries/js/io/async.effekt | 4 +- 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/effekt/jvm/src/test/scala/effekt/JavaScriptTests.scala b/effekt/jvm/src/test/scala/effekt/JavaScriptTests.scala index db16306fd4..01c5a77890 100644 --- a/effekt/jvm/src/test/scala/effekt/JavaScriptTests.scala +++ b/effekt/jvm/src/test/scala/effekt/JavaScriptTests.scala @@ -25,6 +25,63 @@ class JavaScriptTests extends EffektTests { // we deprecated locally defined type and effect declarations, for now. examplesDir / "neg" / "existential_effect_leaks.effekt", examplesDir / "neg" / "scoped.effekt", + + // Missing features in new direct style backend: + // --------------------------------------------- + + // (local) mutable variables + examplesDir / "pos" / "nim.effekt", + examplesDir / "pos" / "propagators.effekt", + examplesDir / "benchmarks" / "triples.effekt", + examplesDir / "benchmarks" / "nqueens.effekt", + examplesDir / "benchmarks" / "simple_counter.effekt", + examplesDir / "benchmarks" / "tree.effekt", + examplesDir / "casestudies"/ "prettyprinter.md", + examplesDir / "casestudies"/ "lexer.md", + examplesDir / "casestudies"/ "parser.md", + examplesDir / "casestudies"/ "naturalisticdsls.md", + examplesDir / "casestudies"/ "buildsystem.md", + examplesDir / "casestudies"/ "anf.md", + examplesDir / "pos" / "issue108.effekt", + examplesDir / "pos" / "overloading.effekt", + examplesDir / "pos" / "unsafe_cont.effekt", + examplesDir / "pos" / "type_parameters_blocks.effekt", + examplesDir / "pos" / "stacksafe.effekt", + examplesDir / "pos" / "build.effekt", + examplesDir / "pos" / "type_parameter_blocks.effekt", + examplesDir / "pos" / "capture" / "mbed.effekt", + examplesDir / "pos" / "mutable.effekt", + examplesDir / "pos" / "sideeffects.effekt", + examplesDir / "pos" / "arrays.effekt", + examplesDir / "pos" / "simpleparser.effekt", + examplesDir / "pos" / "higherorder_io_control.effekt", + examplesDir / "pos" / "dequeue.effekt", + examplesDir / "pos" / "matchblock.effekt", + examplesDir / "pos" / "multihandler.effekt", + examplesDir / "pos" / "state.effekt", + examplesDir / "pos" / "parser.effekt", + examplesDir / "pos" / "stream_push.effekt", + examplesDir / "pos" / "stream_pull.effekt", + examplesDir / "pos" / "probabilistic.effekt", + examplesDir / "pos" / "multieffects.effekt", + examplesDir / "pos" / "imports.effekt", + examplesDir / "pos" / "withstatement.effekt", + examplesDir / "pos" / "raytracer.effekt", + examplesDir / "pos" / "lambdas" / "generators.effekt", + examplesDir / "pos" / "lambdas" / "localstate.effekt", + examplesDir / "pos" / "lambdas" / "scheduler.effekt", + + // bidirectional + examplesDir / "pos" / "bidirectional" / "iterators.effekt", + examplesDir / "pos" / "bidirectional" / "pingpong.effekt", + + // regions + examplesDir / "benchmarks" / "generator.effekt", + examplesDir / "pos" / "recursiveobject.effekt", + examplesDir / "pos" / "capture" / "regions.effekt", + examplesDir / "pos" / "liftinference.effekt", + examplesDir / "pos" / "capture" / "selfregion.effekt" + ) } diff --git a/effekt/shared/src/main/scala/effekt/core/Transformer.scala b/effekt/shared/src/main/scala/effekt/core/Transformer.scala index 7d9a5f35a6..045b7337ea 100644 --- a/effekt/shared/src/main/scala/effekt/core/Transformer.scala +++ b/effekt/shared/src/main/scala/effekt/core/Transformer.scala @@ -689,7 +689,7 @@ object Transformer extends Phase[Typechecked, CoreTransformed] { core.ValueParam(id, transform(Context.valueTypeOf(id))) def BlockParam(id: BlockSymbol)(using Context): core.BlockParam = - core.BlockParam(id, transform(Context.blockTypeOf(id)), transform(Context.captureOf(id))) + core.BlockParam(id, transform(Context.blockTypeOf(id)), Set(id)) def ValueVar(id: ValueSymbol)(using Context): core.ValueVar = core.ValueVar(id, transform(Context.valueTypeOf(id))) diff --git a/effekt/shared/src/main/scala/effekt/generator/js/TransformerDS.scala b/effekt/shared/src/main/scala/effekt/generator/js/TransformerDS.scala index e8f641b86c..b9f45fedd2 100644 --- a/effekt/shared/src/main/scala/effekt/generator/js/TransformerDS.scala +++ b/effekt/shared/src/main/scala/effekt/generator/js/TransformerDS.scala @@ -220,7 +220,7 @@ object TransformerDS { Context.panic("Not implemented yet") case Hole() => - Context.panic("Not implemented yet") + Return(js.builtin("hole")) case Get(id, capt, tpe) => Context.panic("Should have been translated to direct style") case Put(id, capt, value) => Context.panic("Should have been translated to direct style") diff --git a/libraries/js/io/async.effekt b/libraries/js/io/async.effekt index f1a6ff0049..83683e32d1 100644 --- a/libraries/js/io/async.effekt +++ b/libraries/js/io/async.effekt @@ -22,7 +22,7 @@ extern io def readPromise(path: String): Promise[String] = "fsPromises.readFile(path, 'utf8')" extern io def awaitPromise[T, R](p: Promise[T], cont: T => R at {io}): R = - "p.then(res => cont(res).run())" + "p.then(cont)" extern io def fork(process: () => Unit at {io}): Unit = - "setTimeout(() => process().run(), 0)" + "setTimeout(() => process(), 0)"