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

class A extends core::Object {
  final field core::int* x;
  final field core::int* y;
  constructor •(core::int* y) → self::A*
    : self::A::y = y, self::A::x = 42, super core::Object::•()
    ;
  method method() → dynamic {
    core::print("A.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
    core::print(this);
    core::print(this.{core::Object::runtimeType});
  }
}
class B extends self::A {
  constructor •(dynamic x) → self::B*
    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
    ;
  method method() → dynamic {
    core::print("B.method x: ${this.{self::A::x}} y: ${this.{self::A::y}}");
    super.{self::A::method}();
  }
}
static method main() → dynamic {
  self::A* a = new self::A::•(87);
  self::B* b = new self::B::•(117);
  a.{self::A::method}();
  b.{self::B::method}();
}
