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

class Base extends core::Object {
  field core::int* hashCode = 42;
  synthetic constructor •() → self::Base*
    : super core::Object::•()
    ;
  abstract member-signature get _identityHashCode() → core::int*;
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*;
  abstract member-signature operator ==(dynamic other) → core::bool*;
  abstract member-signature method toString() → core::String*;
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic;
  abstract member-signature get runtimeType() → core::Type*;
}
class Sub extends self::Base {
  field core::int* _hashCode = null;
  synthetic constructor •() → self::Sub*
    : super self::Base::•()
    ;
  get hashCode() → core::int*
    return let final core::int* #t1 = this.{self::Sub::_hashCode} in #t1.{core::num::==}(null) ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1;
  method foo() → dynamic {
    this.{self::Sub::_hashCode}.{core::num::==}(null) ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
  }
}
static method main() → dynamic {
  core::print(new self::Sub::•().{self::Sub::hashCode});
  core::List<core::Null?>* l = <core::Null?>[null];
  let final core::List<core::Null?>* #t2 = l in let final core::int* #t3 = 0 in #t2.{core::List::[]}(#t3).{core::Object::==}(null) ?{core::String*} #t2.{core::List::[]=}(#t3, "fisk" as{TypeError} core::Null?) : null;
}
