// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

class A {
  foo() { return 499; }
  bar(x) { return x + 499; }
  baz() { return 54; }
  titi() { return 123; }
}

class B {
  foo() { return 42; }
  bar(x) { return x + 42; }
  toto() { return foo() + 42; }
}

class C extends A {
  foo() { return 99; }
  bar(x) { return x + 99; }
}

void main() {
  var a = new A();
  Expect.equals(499, a.foo());
  Expect.equals(500, a.bar(1));
  var b = new B();
  Expect.equals(42, b.foo());
  Expect.equals(43, b.bar(1));
  var c = new C();
  Expect.equals(99, c.foo());
  Expect.equals(100, c.bar(1));

  Expect.equals(54, a.baz());
  Expect.equals(54, c.baz());

  // We don't call a.titi. This means that the compiler needs to trigger the
  // compilation of A.titi by going through the super-chain.
  Expect.equals(123, c.titi());

  Expect.equals(84, b.toto());
}
