library;
import self as self;
import "has_part_lib.dart" as has;
additionalExports = (has::C)

export "org-dartlang-testcase:///has_part_lib.dart";

static method main() → void {}

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

part has_part_of_lib.dart;
extension type C(core::int i) { // from org-dartlang-testcase:///has_part_of_lib.dart
  abstract extension-type-member representation-field get /* from org-dartlang-testcase:///has_part_of_lib.dart */ i() → core::int;
  constructor • = has::C|constructor#;
  constructor tearoff • = has::C|constructor#_#new#tearOff;
}
static extension-type-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|constructor#(core::int i) → has::C /* = core::int */ {
  lowered final has::C /* = core::int */ #this = i;
  return #this;
}
static extension-type-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|constructor#_#new#tearOff(core::int i) → has::C /* = core::int */
  return has::C|constructor#(i);
