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

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

extension _extension#0 on core::int {
  method _foo = self::_extension#0|_foo;
  tearoff _foo = self::_extension#0|get#_foo;
}
static method _extension#0|_foo<T extends core::Object? = dynamic>(lowered final core::int #this, (self::_extension#0|_foo::T%) → void x, {required self::_extension#0|_foo::T% a = #C1}) → void
  return throw "";
static method _extension#0|get#_foo(lowered final core::int #this) → <T extends core::Object? = dynamic>((T%) → void, {a: T%}) → void
  return <T extends core::Object? = dynamic>((T%) → void x, {T% a = #C1}) → void => self::_extension#0|_foo<T%>(#this, x, a: a);
static method main() → dynamic {}

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_lib.dart:4:5: Error: The method '_foo' isn't defined for the class 'int'.
// Try correcting the name to the name of an existing method, or defining a method named '_foo'.
//   i._foo(a: 0, (x) {
//     ^^^^
//
import self as self2;
import "dart:core" as core;

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

static method bar(core::int i) → dynamic {
  invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_91_failure_lib.dart:4:5: Error: The method '_foo' isn't defined for the class 'int'.
Try correcting the name to the name of an existing method, or defining a method named '_foo'.
  i._foo(a: 0, (x) {
    ^^^^" in i{<unresolved>}._foo((dynamic x) → Null {
    x;
  }, a: #t1);
}

constants  {
  #C1 = null
}
