library;
import self as self;
import "dart:core" as core;

extension Extension on core::int* {
  method syncStarMethod = self::Extension|syncStarMethod;
  tearoff syncStarMethod = self::Extension|get#syncStarMethod;
  method asyncMethod = self::Extension|asyncMethod;
  tearoff asyncMethod = self::Extension|get#asyncMethod;
  method asyncStarMethod = self::Extension|asyncStarMethod;
  tearoff asyncStarMethod = self::Extension|get#asyncStarMethod;
}
static method Extension|syncStarMethod(final core::int* #this) → dynamic sync* 
  ;
static method Extension|get#syncStarMethod(final core::int* #this) → () →* dynamic
  return () → dynamic => self::Extension|syncStarMethod(#this);
static method Extension|asyncMethod(final core::int* #this) → dynamic async 
  ;
static method Extension|get#asyncMethod(final core::int* #this) → () →* dynamic
  return () → dynamic => self::Extension|asyncMethod(#this);
static method Extension|asyncStarMethod(final core::int* #this) → dynamic async* 
  ;
static method Extension|get#asyncStarMethod(final core::int* #this) → () →* dynamic
  return () → dynamic => self::Extension|asyncStarMethod(#this);
static method main() → dynamic
  ;
