library;
import self as self;
import "./deferred_lib.dart" as def;

import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;

static method main() → dynamic {}
static method test() → dynamic {
  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2();
  let final dynamic #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
}
static method m2() → dynamic
  return 1;

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

class C extends core::Object {
  static field core::int y = 1;
  synthetic constructor •() → def::C
    : super core::Object::•()
    ;
  static method m() → core::int
    return 2;
}
static field dynamic x = 0;
static method m(dynamic x) → dynamic
  return null;
