From 20ae5a95330674322fc7304c4ab0f5d9987f2ca5 Mon Sep 17 00:00:00 2001 From: Regis Blanc <regwblanc@gmail.com> Date: Mon, 26 Oct 2015 12:51:57 +0100 Subject: [PATCH] basic support in nested functions for arrays --- .../frontends/scalac/CodeExtraction.scala | 8 ++++---- .../xlang/valid/ArrayNested1.scala | 19 +++++++++++++++++++ .../xlang/valid/ArrayNested2.scala | 19 +++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 src/test/resources/regression/verification/xlang/valid/ArrayNested1.scala create mode 100644 src/test/resources/regression/verification/xlang/valid/ArrayNested2.scala diff --git a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala index a232b93da..24ecca501 100644 --- a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala +++ b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala @@ -1200,11 +1200,11 @@ trait CodeExtraction extends ASTExtractors { } getOwner(lhsRec) match { - case Some(Some(fd)) if fd != currentFunDef => - outOfSubsetError(tr, "cannot update an array that is not defined locally") + // case Some(Some(fd)) if fd != currentFunDef => + // outOfSubsetError(tr, "cannot update an array that is not defined locally") - case Some(None) => - outOfSubsetError(tr, "cannot update an array that is not defined locally") + // case Some(None) => + // outOfSubsetError(tr, "cannot update an array that is not defined locally") case Some(_) => diff --git a/src/test/resources/regression/verification/xlang/valid/ArrayNested1.scala b/src/test/resources/regression/verification/xlang/valid/ArrayNested1.scala new file mode 100644 index 000000000..196a6442b --- /dev/null +++ b/src/test/resources/regression/verification/xlang/valid/ArrayNested1.scala @@ -0,0 +1,19 @@ +import leon.lang._ + +object ArrayNested1 { + + def test(): Int = { + + var a = Array(1, 2, 0) + + def nested(): Unit = { + require(a.length == 3) + a = a.updated(1, 5) + } + + nested() + a(1) + + } ensuring(_ == 5) + +} diff --git a/src/test/resources/regression/verification/xlang/valid/ArrayNested2.scala b/src/test/resources/regression/verification/xlang/valid/ArrayNested2.scala new file mode 100644 index 000000000..fb1a778b8 --- /dev/null +++ b/src/test/resources/regression/verification/xlang/valid/ArrayNested2.scala @@ -0,0 +1,19 @@ +import leon.lang._ + +object ArrayNested2 { + + def test(): Int = { + + var a = Array(1, 2, 0) + + def nested(): Unit = { + require(a.length == 3) + a(2) = 5 + } + + nested() + a(2) + + } ensuring(_ == 5) + +} -- GitLab