diff --git a/src/main/scala/leon/codegen/CodeGeneration.scala b/src/main/scala/leon/codegen/CodeGeneration.scala index 564216f21849855fccb329c4983d3658a9378f63..f8a062e6f9d68613cea9030dce53897b07b7fa72 100644 --- a/src/main/scala/leon/codegen/CodeGeneration.scala +++ b/src/main/scala/leon/codegen/CodeGeneration.scala @@ -521,8 +521,7 @@ trait CodeGeneration { } } - // No dynamic dispatching/overriding in Leon, - // so no need to take care of own vs. "super" methods + // No interfaces in Leon, so no need to use InvokeInterface ch << InvokeVirtual(className, methodName, sig) (tfd.fd.returnType, tfd.returnType) match { diff --git a/src/test/scala/leon/test/codegen/CodeGenSuite.scala b/src/test/scala/leon/test/codegen/CodeGenSuite.scala index 6ad41d65a0ea6429b33a6abcae02bfaded189027..82c0a1161e69b0ae461410c85dc08afea78eebc2 100644 --- a/src/test/scala/leon/test/codegen/CodeGenSuite.scala +++ b/src/test/scala/leon/test/codegen/CodeGenSuite.scala @@ -121,7 +121,9 @@ class CodeGenSuite extends test.LeonTestSuite { // This one loops! ("lazyLoops" , Error(Untyped, "Looping") ), ("Lazier" , IntLiteral(1 + 2 + 3) ), - ("SetToList", BooleanLiteral(true) ) + ("SetToList", BooleanLiteral(true) ), + ("Overrides1", Tuple(Seq(BooleanLiteral(false), BooleanLiteral(true))) ), + ("Overrides2", Tuple(Seq(BooleanLiteral(false), BooleanLiteral(true))) ) ) @@ -362,6 +364,28 @@ class CodeGenSuite extends test.LeonTestSuite { s == s2 } } + object Overrides1 { + abstract class A { + def x = true + } + case class B() extends A { + override def x = false + } + case class C() extends A + + def test = (B().x, C().x) + } + object Overrides2 { + abstract class A { + val x = true + } + case class B() extends A { + override val x = false + } + case class C() extends A + + def test = (B().x, C().x) + } """ runTests()