From a6ab44ad2bd69c8e1e4b9cff7b0bb45f5aeaed48 Mon Sep 17 00:00:00 2001 From: Marco Antognini <antognini.marco@gmail.com> Date: Wed, 16 Dec 2015 19:16:08 +0100 Subject: [PATCH] Add support for case class --- src/main/scala/leon/genc/CConverter.scala | 9 +++++++++ .../regression/genc/valid/CaseClass.scala | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/test/resources/regression/genc/valid/CaseClass.scala diff --git a/src/main/scala/leon/genc/CConverter.scala b/src/main/scala/leon/genc/CConverter.scala index a29943083..596bef698 100644 --- a/src/main/scala/leon/genc/CConverter.scala +++ b/src/main/scala/leon/genc/CConverter.scala @@ -367,6 +367,15 @@ class CConverter(val ctx: LeonContext, val prog: Program) { argsFs.bodies ~~ CAST.StructInit(args, struct) + case CaseClassSelector(_, x1, fieldId) => + val struct = convertToStruct(x1.getType) + val x2 = convertToStmt(x1) + + val fs = normaliseExecution((x2, struct) :: Nil) + val x = fs.values.head + + fs.bodies ~~ CAST.AccessField(x, convertToId(fieldId)) + case LessThan(lhs, rhs) => buildBinOp(lhs, "<", rhs) case GreaterThan(lhs, rhs) => buildBinOp(lhs, ">", rhs) case LessEquals(lhs, rhs) => buildBinOp(lhs, "<=", rhs) diff --git a/src/test/resources/regression/genc/valid/CaseClass.scala b/src/test/resources/regression/genc/valid/CaseClass.scala new file mode 100644 index 000000000..bf104e378 --- /dev/null +++ b/src/test/resources/regression/genc/valid/CaseClass.scala @@ -0,0 +1,19 @@ +import leon.lang._ + +object CaseClass { + + case class Color(r: Int, g: Int, b: Int) + + def red = Color(0, 255, 0) + def cyan = Color(0, 255, 255) + + def sub(c: Color, d: Color) = Color(c.r - d.r, c.g - d.g, c.b - d.b) + + def main = { + val c = red + val d = cyan + val z = sub(c, d).g + z + } + +} -- GitLab