From 58343a96019876ca64a04cf2409d2d349ef31fe4 Mon Sep 17 00:00:00 2001 From: Nicolas Voirol <voirol.nicolas@gmail.com> Date: Wed, 10 Feb 2016 15:40:28 +0100 Subject: [PATCH] Partial fix for extern evaluation in CodeGen --- .../scala/leon/codegen/CodeGeneration.scala | 5 ++++ .../evaluators/EvaluatorSuite.scala | 25 +++---------------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/main/scala/leon/codegen/CodeGeneration.scala b/src/main/scala/leon/codegen/CodeGeneration.scala index 9030ba304..4cfbc037c 100644 --- a/src/main/scala/leon/codegen/CodeGeneration.scala +++ b/src/main/scala/leon/codegen/CodeGeneration.scala @@ -682,6 +682,11 @@ trait CodeGeneration { load(monitorID, ch) ch << Ldc(id) + if (tfd.fd.tparams.nonEmpty) { + loadTypes(tfd.tps, ch) + } else { + ch << Ldc(0) << NewArray.primitive("T_INT") + } ch << Ldc(as.size) ch << NewArray(ObjectClass) diff --git a/src/test/scala/leon/integration/evaluators/EvaluatorSuite.scala b/src/test/scala/leon/integration/evaluators/EvaluatorSuite.scala index 84b0087ca..812cf88ea 100644 --- a/src/test/scala/leon/integration/evaluators/EvaluatorSuite.scala +++ b/src/test/scala/leon/integration/evaluators/EvaluatorSuite.scala @@ -369,28 +369,11 @@ class EvaluatorSuite extends LeonTestSuiteWithProgram with ExpressionsDSL { } test("Lambda functions") { implicit fix => - def checkLambda(e: Evaluator, in: Expr, out: PartialFunction[Expr, Boolean]) { - val res = eval(e, in).success - if (!out.isDefinedAt(res) || !out(res)) - throw new AssertionError(s"Evaluation of '$in' with evaluator '${e.name}' produced invalid '$res'.") - } - - val ONE = bi(1) - val TWO = bi(2) - for(e <- allEvaluators) { - checkLambda(e, fcall("Lambda.foo1")(), { - case Lambda(Seq(vd), Variable(id)) if vd.id == id => true - }) - checkLambda(e, fcall("Lambda.foo2")(), { - case Lambda(Seq(vd), Plus(ONE, Variable(id))) if vd.id == id => true - }) - checkLambda(e, fcall("Lambda.foo3")(), { - case Lambda(Seq(vx, vy), Plus(Plus(Variable(x), ONE), Plus(Variable(y), TWO))) if vx.id == x && vy.id == y => true - }) - checkLambda(e, fcall("Lambda.foo4")(TWO), { - case Lambda(Seq(vd), Plus(Variable(id), TWO)) if vd.id == id => true - }) + eval(e, Application(fcall("Lambda.foo1")(), Seq(bi(1)))) === bi(1) + eval(e, Application(fcall("Lambda.foo2")(), Seq(bi(1)))) === bi(2) + eval(e, Application(fcall("Lambda.foo3")(), Seq(bi(1), bi(2)))) === bi(6) + eval(e, Application(fcall("Lambda.foo4")(bi(2)), Seq(bi(1)))) === bi(3) } } -- GitLab