discard """
  targets: "c cpp"
"""

type FooBase = ref object of RootObj
  dummy: int
type Foo = ref object of FooBase
  value : float32
type Foo2 = ref object of Foo
  change : float32
method bar(x: FooBase, a: float32) {.base.} =
  discard
method bar(x: Foo, a: float32)  =
  x.value += a
method bar(x: Foo2, a: float32)  =
  x.value += a


proc test() =
  var x = new Foo2
  x.bar(2.3)
  doAssert x.value <= 2.3

test()