library /*isNonNullableByDefault*/;
import self as self;
import "issue41436c_lib.dart" as iss;
import "dart:core" as core;

import "org-dartlang-testcase:///issue41436c_lib.dart";

class C extends iss::B {
  synthetic constructor •() → self::C
    ;
  no-such-method-forwarder get /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
  no-such-method-forwarder set /*isNullableByDefault, from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_#A#x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{})));
}
static method main() → dynamic
  ;

library /*isNonNullableByDefault*/;
import self as iss;
import "dart:core" as core;

abstract class A extends core::Object {
  field core::int? _#A#x;
  synthetic constructor •() → iss::A
    ;
  get x() → core::int;
  set x(core::int #t1) → void;
}
class B extends core::Object implements iss::A {
  field core::int x;
  synthetic constructor •() → iss::B
    ;
}


Extra constant evaluation status:
Evaluated: SymbolLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> SymbolConstant(#_#A#x)
Evaluated: ListLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> ListConstant(const <Type*>[])
Evaluated: ListLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> ListConstant(const <dynamic>[])
Evaluated: MapLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
Evaluated: SymbolLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> SymbolConstant(#_#A#x=)
Evaluated: ListLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> ListConstant(const <Type*>[])
Evaluated: MapLiteral @ org-dartlang-testcase:///issue41436c_lib.dart:6:12 -> InstanceConstant(const _ImmutableMap<Symbol*, dynamic>{_ImmutableMap._kvPairs: const <dynamic>[]})
Extra constant evaluation: evaluated: 19, effectively constant: 7
