library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/none/new_method_invocation_encodings.dart:7:8: Error: A method declaration needs an explicit list of parameters.
// Try adding a parameter list to the method declaration.
//   int? getter => null;
//        ^^^^^^
//
// pkg/front_end/testcases/none/new_method_invocation_encodings.dart:14:5: Error: The setter 'setter' isn't defined for the class 'Class'.
//  - 'Class' is from 'pkg/front_end/testcases/none/new_method_invocation_encodings.dart'.
// Try correcting the name to the name of an existing setter, or defining a setter or field named 'setter'.
//   c.setter = c.getter;
//     ^^^^^^
//
import self as self;
import "dart:core" as core;

class Class extends core::Object {
  field core::int? field = null;
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
  method getter() → core::int?
    return null;
  method setter(core::int? value) → void {}
  method method() → void {}
}
static method test(self::Class c, dynamic d, core::Function f1, () → void f2) → dynamic {
  c.{self::Class::field} = c.{self::Class::field}{core::int?};
  invalid-expression "pkg/front_end/testcases/none/new_method_invocation_encodings.dart:14:5: Error: The setter 'setter' isn't defined for the class 'Class'.
 - 'Class' is from 'pkg/front_end/testcases/none/new_method_invocation_encodings.dart'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'setter'.
  c.setter = c.getter;
    ^^^^^^";
  c.{self::Class::method}{() → void};
  c.{self::Class::method}(){() → void};
  d{dynamic}.field = d{dynamic}.field;
  d{dynamic}.setter = d{dynamic}.getter;
  d{dynamic}.method;
  d{dynamic}.method();
  f1();
  f1.call;
  f2(){() → void};
  f2.call;
  function local() → Null {}
  local(){() → Null};
  c =={core::Object::==}{(core::Object) → core::bool} d;
  c !={core::Object::==}{(core::Object) → core::bool} d;
  c == null;
  c != null;
  d == null;
  d != null;
}
static method main() → dynamic {}
