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::•()
    ;
}
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}{core::int?} in #t1 == null ?{core::int} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1{core::int};
  method foo() → dynamic {
    this.{self::Sub::_hashCode}{core::int?} == 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::int});
  core::List<core::String?> l = core::_GrowableList::_literal1<core::String?>(null);
  let final core::List<core::String?> #t2 = l in let final core::int #t3 = 0 in #t2.{core::List::[]}(#t3){(core::int) → core::String?} == null ?{core::String?} #t2.{core::List::[]=}(#t3, "fisk"){(core::int, core::String?) → void} : null;
}


Extra constant evaluation status:
Evaluated: VariableGet @ org-dartlang-testcase:///issue_000081.dart:22:5 -> IntConstant(0)
Evaluated: VariableGet @ org-dartlang-testcase:///issue_000081.dart:22:5 -> IntConstant(0)
Extra constant evaluation: evaluated: 32, effectively constant: 2
