library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
//   const dynamic instance_get = nullableClass1.field;
//                                ^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
//   const dynamic instance_tearOff = nonNullableClass1.method;
//                                    ^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
//   const dynamic dyn_get = dyn.field;
//                           ^^^
//
// pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
//   const dynamic function_tearOff = nonNullableFunction.call;
//                                    ^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
//   Function? f2 = nullableClass2;
//                  ^
//
// pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
//   nonNullableClass1.method().field;
//                           ^
//
// pkg/front_end/testcases/none/property_get.dart:113:21: Error: The getter 'unresolved' isn't defined for the class 'Class1'.
//  - 'Class1' is from 'pkg/front_end/testcases/none/property_get.dart'.
// Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
//   nonNullableClass1.unresolved;
//                     ^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

class Class1 extends core::Object {
  field core::int field;
  static field core::int staticField = 42;
  constructor •(core::int field) → self::Class1
    : self::Class1::field = field, super core::Object::•()
    ;
  method method(core::double o) → core::int
    return 0;
  static method staticMethod(core::double o) → core::int
    return 0;
}
class Class2<T extends core::Object? = dynamic> extends core::Object {
  generic-covariant-impl field self::Class2::T% field;
  constructor •(self::Class2::T% field) → self::Class2<self::Class2::T%>
    : self::Class2::field = field, super core::Object::•()
    ;
  method call() → core::int
    return 42;
}
static field core::int topLevelField = 42;
static const field core::String string = #C1;
static const field core::int stringLength = #C2;
static const field dynamic dynamicString = #C1;
static const field core::int dynamicStringLength = #C2;
static method topLevelMethod(core::double o) → core::int
  return 0;
static method test<T1 extends core::Function, T2 extends () → core::int>(self::Class1 nonNullableClass1, self::Class1? nullableClass1, dynamic dyn, Never never, self::Class2<core::String> nonNullableClass2, self::Class2<core::String>? nullableClass2, core::Function nonNullableFunction, core::Function? nullableFunction, () → core::int nonNullableFunctionType, () →? core::int nullableFunctionType, self::test::T1 nonNullableTypeVariable1, self::test::T1? nullableTypeVariable1, self::test::T2 nonNullableTypeVariable2, self::test::T2? nullableTypeVariable2) → dynamic {
  core::print("InstanceGet");
  nonNullableClass1.{self::Class1::field}{core::int};
  let final self::Class1? #t1 = nullableClass1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::field}{core::int};
  nonNullableClass2.{self::Class2::field}{core::String};
  let final self::Class2<core::String>? #t2 = nullableClass2 in #t2 == null ?{core::String?} null : #t2{self::Class2<core::String>}.{self::Class2::field}{core::String};
  const dynamic instance_get = invalid-expression "pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
  const dynamic instance_get = nullableClass1.field;
                               ^^^^^^^^^^^^^^";
  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
  const dynamic instance_get = nullableClass1.field;
                               ^^^^^^^^^^^^^^");
  core::print("InstanceTearOff");
  nonNullableClass1.{self::Class1::method}{(core::double) → core::int};
  let final self::Class1? #t3 = nullableClass1 in #t3 == null ?{(core::double) →? core::int} null : #t3{self::Class1}.{self::Class1::method}{(core::double) → core::int};
  nonNullableClass2.{self::Class2::call}{() → core::int};
  let final self::Class2<core::String>? #t4 = nullableClass2 in #t4 == null ?{() →? core::int} null : #t4{self::Class2<core::String>}.{self::Class2::call}{() → core::int};
  const dynamic instance_tearOff = invalid-expression "pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
  const dynamic instance_tearOff = nonNullableClass1.method;
                                   ^^^^^^^^^^^^^^^^^";
  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
  const dynamic instance_tearOff = nonNullableClass1.method;
                                   ^^^^^^^^^^^^^^^^^");
  core::Function f1 = let final self::Class2<core::String> #t5 = nonNullableClass2 in #t5 == null ?{() → core::int} null : #t5.{self::Class2::call}{() → core::int};
  core::Function? f2 = invalid-expression "pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
  Function? f2 = nullableClass2;
                 ^" in nullableClass2 as{TypeError} core::Function?;
  core::print("StaticGet");
  self::Class1::staticField;
  self::topLevelField;
  core::print("StaticTearOff");
  #C3;
  #C4;
  core::print(#C4);
  core::print("DynamicGet");
  dyn{dynamic}.field;
  let final dynamic #t6 = dyn in #t6 == null ?{dynamic} null : #t6{dynamic}.field;
  const dynamic dyn_get = invalid-expression "pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
  const dynamic dyn_get = dyn.field;
                          ^^^";
  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
  const dynamic dyn_get = dyn.field;
                          ^^^");
  core::print("InstanceGet (Object)");
  dyn.{core::Object::hashCode}{core::int};
  nullableClass1.{core::Object::hashCode}{core::int};
  core::print("InstanceGetTearOff (Object)");
  dyn.{core::Object::toString}{() → core::String};
  nullableClass1.{core::Object::toString}{() → core::String};
  core::print("DynamicGet (Never)");
  let final Never #t7 = (let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.field in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
  let final Never #t9 = (let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.hashCode in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
  core::print("FunctionTearOff");
  nonNullableFunction.call;
  let final core::Function? #t11 = nullableFunction in #t11 == null ?{core::Function?} null : #t11{core::Function}.call;
  nonNullableFunctionType.call;
  let final () →? core::int #t12 = nullableFunctionType in #t12 == null ?{() →? core::int} null : #t12{() → core::int}.call;
  nonNullableTypeVariable1.call;
  let final self::test::T1? #t13 = nullableTypeVariable1 in #t13 == null ?{self::test::T1?} null : #t13{self::test::T1}.call;
  nonNullableTypeVariable2.call;
  let final self::test::T2? #t14 = nullableTypeVariable2 in #t14 == null ?{self::test::T2?} null : #t14{self::test::T2}.call;
  const dynamic function_tearOff = invalid-expression "pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
  const dynamic function_tearOff = nonNullableFunction.call;
                                   ^^^^^^^^^^^^^^^^^^^";
  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
  const dynamic function_tearOff = nonNullableFunction.call;
                                   ^^^^^^^^^^^^^^^^^^^");
  core::print("DynamicGet (Invalid)");
  invalid-expression "pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
  nonNullableClass1.method().field;
                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.field;
  core::print("DynamicGet (Unresolved)");
  invalid-expression "pkg/front_end/testcases/none/property_get.dart:113:21: Error: The getter 'unresolved' isn't defined for the class 'Class1'.
 - 'Class1' is from 'pkg/front_end/testcases/none/property_get.dart'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
  nonNullableClass1.unresolved;
                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved;
}
static method main() → dynamic {}

constants  {
  #C1 = "foo"
  #C2 = 3
  #C3 = static-tearoff self::Class1::staticMethod
  #C4 = static-tearoff self::topLevelMethod
}
