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 {
  let final core::int #t1 = 0 in 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
}
