library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:36:10: Warning: 'foo' isn't a type.
//   print(<foo);
//          ^^^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:36:10: Error: Expected '>' after this.
//   print(<foo);
//          ^^^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:36:13: Error: Expected '[' before this.
//   print(<foo);
//             ^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:37:9: Error: Expected an identifier, but got '>'.
//   print(>foo);
//         ^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:38:9: Error: Expected an identifier, but got '<='.
//   print(<=foo);
//         ^^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:39:9: Error: Expected an identifier, but got '>='.
//   print(>=foo);
//         ^^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:40:9: Error: Expected an identifier, but got '=='.
//   print(==foo);
//         ^^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:41:9: Error: '+' is not a prefix operator.
// Try removing '+'.
//   print(+foo);
//         ^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:42:9: Error: Expected an identifier, but got '/'.
//   print(/foo);
//         ^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:43:9: Error: Expected an identifier, but got '~/'.
//   print(~/foo);
//         ^^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:44:9: Error: Expected an identifier, but got '*'.
//   print(*foo);
//         ^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:45:9: Error: Expected an identifier, but got '%'.
//   print(%foo);
//         ^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:46:9: Error: Expected an identifier, but got '|'.
//   print(|foo);
//         ^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:47:9: Error: Expected an identifier, but got '^'.
//   print(^foo);
//         ^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:48:9: Error: Expected an identifier, but got '&'.
//   print(&foo);
//         ^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:49:9: Error: Expected an identifier, but got '<<'.
//   print(<<foo);
//         ^^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:50:9: Error: Expected an identifier, but got '>>'.
//   print(>>foo);
//         ^^
//
// pkg/front_end/testcases/general/operator_method_not_found.dart:54:13: Error: '~' isn't a binary operator.
//   print(foo ~ 2);
//             ^
//
import self as self;
import "dart:core" as core;

class Foo extends core::Object {
  synthetic constructor •() → self::Foo*
    : super core::Object::•()
    ;
}
static method main() → dynamic {
  self::Foo* foo = new self::Foo::•();
  core::print(foo.<(2));
  core::print(foo.>(2));
  core::print(foo.<=(2));
  core::print(foo.>=(2));
  core::print(foo.==(2));
  core::print(foo.-(2));
  core::print(foo.+(2));
  core::print(foo./(2));
  core::print(foo.~/(2));
  core::print(foo.*(2));
  core::print(foo.%(2));
  core::print(foo.|(2));
  core::print(foo.^(2));
  core::print(foo.&(2));
  core::print(foo.<<(2));
  core::print(foo.>>(2));
  core::print(let final dynamic #t1 = foo in let final dynamic #t2 = 2 in let final dynamic #t3 = 2 in let final dynamic #t4 = #t1.[]=(#t2, #t3) in #t3);
  core::print(foo.[](2));
  core::print(foo.~());
  core::print(foo.unary-());
  core::print(<invalid-type>[]);
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:37:9: Error: This couldn't be parsed.
  print(>foo);
        ^".>(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:38:9: Error: This couldn't be parsed.
  print(<=foo);
        ^".<=(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:39:9: Error: This couldn't be parsed.
  print(>=foo);
        ^".>=(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:40:9: Error: This couldn't be parsed.
  print(==foo);
        ^".==(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:41:9: Error: This couldn't be parsed.
  print(+foo);
        ^".+(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:42:9: Error: This couldn't be parsed.
  print(/foo);
        ^"./(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:43:9: Error: This couldn't be parsed.
  print(~/foo);
        ^".~/(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:44:9: Error: This couldn't be parsed.
  print(*foo);
        ^".*(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:45:9: Error: This couldn't be parsed.
  print(%foo);
        ^".%(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:46:9: Error: This couldn't be parsed.
  print(|foo);
        ^".|(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:47:9: Error: This couldn't be parsed.
  print(^foo);
        ^".^(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:48:9: Error: This couldn't be parsed.
  print(&foo);
        ^".&(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:49:9: Error: This couldn't be parsed.
  print(<<foo);
        ^".<<(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:50:9: Error: This couldn't be parsed.
  print(>>foo);
        ^".>>(foo));
  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:54:13: Error: '~' isn't a binary operator.
  print(foo ~ 2);
            ^");
}
