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 {
  covariant-by-class 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
}
