From fb5a6b5a9ef56cd893cb51174e46dd253d0e607a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcial=20Gai=C3=9Fert?= Date: Tue, 28 Nov 2023 13:48:36 +0100 Subject: [PATCH] JS backend: Do not drop first element for Array.toList (fixes #319) --- effekt/jvm/src/test/scala/effekt/ChezSchemeTests.scala | 1 + effekt/jvm/src/test/scala/effekt/MLTests.scala | 1 + examples/pos/issue319.check | 1 + examples/pos/issue319.effekt | 6 ++++++ libraries/js/mutable/array.effekt | 2 +- 5 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 examples/pos/issue319.check create mode 100644 examples/pos/issue319.effekt diff --git a/effekt/jvm/src/test/scala/effekt/ChezSchemeTests.scala b/effekt/jvm/src/test/scala/effekt/ChezSchemeTests.scala index b6c1dc54b..e1a3c291d 100644 --- a/effekt/jvm/src/test/scala/effekt/ChezSchemeTests.scala +++ b/effekt/jvm/src/test/scala/effekt/ChezSchemeTests.scala @@ -23,6 +23,7 @@ abstract class ChezSchemeTests extends EffektTests { examplesDir / "ml", examplesDir / "pos" / "arrays.effekt", + examplesDir / "pos" / "issue319.effekt", examplesDir / "pos" / "maps.effekt", // bidirectional effects are not yet supported in our Chez backend diff --git a/effekt/jvm/src/test/scala/effekt/MLTests.scala b/effekt/jvm/src/test/scala/effekt/MLTests.scala index 1175b990b..79836dc0c 100644 --- a/effekt/jvm/src/test/scala/effekt/MLTests.scala +++ b/effekt/jvm/src/test/scala/effekt/MLTests.scala @@ -92,6 +92,7 @@ class MLTests extends EffektTests { // array api examplesDir / "pos" / "raytracer.effekt", + examplesDir / "pos" / "issue319.effekt", // async examplesDir / "pos" / "io" / "async_file_io.effekt", diff --git a/examples/pos/issue319.check b/examples/pos/issue319.check new file mode 100644 index 000000000..385e54d12 --- /dev/null +++ b/examples/pos/issue319.check @@ -0,0 +1 @@ +Cons(1, Cons(2, Cons(3, Nil()))) diff --git a/examples/pos/issue319.effekt b/examples/pos/issue319.effekt new file mode 100644 index 000000000..43647ed97 --- /dev/null +++ b/examples/pos/issue319.effekt @@ -0,0 +1,6 @@ +import mutable/array + +def main() = { + val array = arrayFromList([1,2,3]); + println(array.toList) +} diff --git a/libraries/js/mutable/array.effekt b/libraries/js/mutable/array.effekt index cc4d47981..0f3443d84 100644 --- a/libraries/js/mutable/array.effekt +++ b/libraries/js/mutable/array.effekt @@ -52,7 +52,7 @@ extern pure def copy[T](arr: Array[T]): Array[T] = def toList[T](arr: Array[T]): List[T] = { var i = arr.size - 1; var l = Nil[T]() - while (i > 0) { + while (i >= 0) { l = Cons(unsafeGet(arr, i), l) i = i - 1 }