library;
import self as self;

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

static method main() → dynamic
  ;

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

extension Extension on core::int* {
  get instanceProperty = self2::Extension|get#instanceProperty;
  method instanceMethod = self2::Extension|instanceMethod;
  tearoff instanceMethod = self2::Extension|get#instanceMethod;
  static field staticField = self2::Extension|staticField;
  static field staticFinalField = self2::Extension|staticFinalField;
  static field staticConstField = self2::Extension|staticConstField;
  static get staticProperty = get self2::Extension|staticProperty;
  static method staticMethod = self2::Extension|staticMethod;
  set instanceProperty = self2::Extension|set#instanceProperty;
  static set staticProperty = set self2::Extension|staticProperty;
}
static field core::int* Extension|staticField;
static final field core::int* Extension|staticFinalField;
static const field core::int* Extension|staticConstField = #C1;
static method Extension|get#instanceProperty(lowered final core::int* #this) → core::int*
  ;
static method Extension|set#instanceProperty(lowered final core::int* #this, core::int* value) → void
  ;
static method Extension|instanceMethod(lowered final core::int* #this) → void
  ;
static method Extension|get#instanceMethod(lowered final core::int* #this) → () →* void
  return () → void => self2::Extension|instanceMethod(#this);
static get Extension|staticProperty() → core::int*
  ;
static set Extension|staticProperty(core::int* value) → void
  ;
static method Extension|staticMethod() → void
  ;

constants  {
  #C1 = 42
}
