library;
import self as self;
import "dart:core" as core;

class B extends core::Object {
  field core::num x;
  field core::String y;
  constructor •(core::num x, core::String y) → void
    : self::B::x = x, self::B::y = y, super core::Object::•() {
    self::events = self::events.{core::String::+}("super(${this.{self::B::x}}, ${this.{self::B::y}})
");
  }
}
class C extends self::B {
  final field dynamic z;
  constructor •() → void
    : final core::int #t1 = self::f(1), final core::String #t2 = self::g(2), self::C::z = self::f(3), super self::B::•(#t1, #t2)
    ;
}
static field core::String events = "";
static method f(dynamic x) → core::int {
  self::events = self::events.{core::String::+}("f(${x})
");
  return 0;
}
static method g(dynamic x) → core::String {
  self::events = self::events.{core::String::+}("g(${x})
");
  return "foo";
}
static method main() → dynamic {
  new self::C::•();
  if(!self::events.{core::String::==}("f(1)
g(2)
f(3)
super(0, foo)
")) {
    throw "Unexpected sequence of events: ${self::events}";
  }
}
