From d814fca700f52c77a623a5e81a22ba54764fca7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Mayer?= <a-mikmay@microsoft.com> Date: Mon, 19 Oct 2015 18:54:36 +0200 Subject: [PATCH] Leon now supports strings for compilation phase. --- src/main/scala/leon/frontends/scalac/CodeExtraction.scala | 1 - src/main/scala/leon/purescala/Extractors.scala | 7 +++++++ testcases/stringrender/runTests.sh | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala index 1c4f19bf6..ea5318e4b 100644 --- a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala +++ b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala @@ -1486,7 +1486,6 @@ trait CodeExtraction extends ASTExtractors { Implies(extractTree(lhs), extractTree(rhs)).setPos(current.pos) case c @ ExCall(rec, sym, tps, args) => - println("Parsing call:" + c) val rrec = rec match { case t if (defsToDefs contains sym) && !isMethod(sym) => null diff --git a/src/main/scala/leon/purescala/Extractors.scala b/src/main/scala/leon/purescala/Extractors.scala index abe8dbe1a..0a6971eb3 100644 --- a/src/main/scala/leon/purescala/Extractors.scala +++ b/src/main/scala/leon/purescala/Extractors.scala @@ -27,6 +27,10 @@ object Extractors { Some((Seq(t), (es: Seq[Expr]) => RealUMinus(es.head))) case BVNot(t) => Some((Seq(t), (es: Seq[Expr]) => BVNot(es.head))) + case StringLength(t) => + Some((Seq(t), (es: Seq[Expr]) => StringLength(es.head))) + case ToString(t) => + Some((Seq(t), (es: Seq[Expr]) => ToString(es.head))) case SetCardinality(t) => Some((Seq(t), (es: Seq[Expr]) => SetCardinality(es.head))) case CaseClassSelector(cd, e, sel) => @@ -120,6 +124,8 @@ object Extractors { Some(Seq(t1, t2), (es: Seq[Expr]) => times(es(0), es(1))) case RealDivision(t1, t2) => Some(Seq(t1, t2), (es: Seq[Expr]) => RealDivision(es(0), es(1))) + case StringConcat(t1, t2) => + Some(Seq(t1, t2), (es: Seq[Expr]) => StringConcat(es(0), es(1))) case ElementOfSet(t1, t2) => Some(Seq(t1, t2), (es: Seq[Expr]) => ElementOfSet(es(0), es(1))) case SubsetOf(t1, t2) => @@ -156,6 +162,7 @@ object Extractors { case CaseClass(cd, args) => Some((args, CaseClass(cd, _))) case And(args) => Some((args, and)) case Or(args) => Some((args, or)) + case SubString(t1, a, b) => Some((t1::a::b::Nil, es => SubString(es(0), es(1), es(2)))) case FiniteSet(els, base) => Some((els.toSeq, els => FiniteSet(els.toSet, base))) case FiniteMap(args, f, t) => { diff --git a/testcases/stringrender/runTests.sh b/testcases/stringrender/runTests.sh index ec8439754..92ab18023 100644 --- a/testcases/stringrender/runTests.sh +++ b/testcases/stringrender/runTests.sh @@ -15,12 +15,12 @@ echo "################################" >> $summaryLog echo "# Category, File, function, p.S, fuS, foS, Tms, Fms, Rms, verif?" >> $summaryLog #All benchmarks: -./leon --stringrender --timeout=30 --solvers=fairz3,enum --functions=repairUnWrapped testcases/stringrender/IntWrapperRender.scala | tee -a $fullLog +./leon --stringrender --timeout=30 --solvers=fairz3,enum --functions=repairUnwrapped testcases/stringrender/IntWrapperRender.scala | tee -a $fullLog ./leon --stringrender --timeout=30 --solvers=fairz3,enum --functions=repairNameChangedPrefix testcases/stringrender/IntWrapperRender.scala | tee -a $fullLog ./leon --stringrender --timeout=30 --solvers=fairz3,enum --functions=repairNameChangedSuffix testcases/stringrender/IntWrapperRender.scala | tee -a $fullLog ./leon --stringrender --timeout=30 --solvers=fairz3,enum --functions=repairDuplicate testcases/stringrender/IntWrapperRender.scala | tee -a $fullLog -./leon --stringrender --timeout=30 --solvers=fairz3,enum --functions=repairUnWrapped testcases/stringrender/TupleWrapperRender.scala | tee -a $fullLog +./leon --stringrender --timeout=30 --solvers=fairz3,enum --functions=repairUnwrapped testcases/stringrender/TupleWrapperRender.scala | tee -a $fullLog ./leon --stringrender --timeout=30 --solvers=fairz3,enum --functions=repairNameChangedPrefix testcases/stringrender/TupleWrapperRender.scala | tee -a $fullLog ./leon --stringrender --timeout=30 --solvers=fairz3,enum --functions=repairNameChangedSuffix testcases/stringrender/TupleWrapperRender.scala | tee -a $fullLog ./leon --stringrender --timeout=30 --solvers=fairz3,enum --functions=repairDuplicate testcases/stringrender/TupleWrapperRender.scala | tee -a $fullLog -- GitLab