This file was autogenerated from running the shaker test suite.
To update this file, either copy the output from a failing test or run
pkg/front_end/tool/fasta testing shaker -DupdateExpectations=true
----- pkg/front_end/testcases/shaker/source_top.dart
library;
import self as self;
import "lib/sources.dart" as sou;
import "dart:core" as core;

typedef F1 = (sou::A5, [sou::A6]) → sou::A4;
typedef F2 = (sou::A5, {b: sou::A7}) → sou::A4;
class C1 extends sou::A1 {
  synthetic constructor •() → void
    : super sou::A1::•();
}
class C2 extends core::Object implements sou::A2 {
  synthetic constructor •() → void
    : super core::Object::•();
}
abstract class _Object&A3 extends core::Object implements sou::A3 {
}
class C3 extends self::_Object&A3 {
  synthetic constructor •() → void
    : super core::Object::•();
}
@self::Meta::•(sou::A14)
class X extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•();
}
class Meta extends core::Object {
  final field dynamic f;
  const constructor •(dynamic f) → void
    : self::Meta::f = f, super core::Object::•();
}
static field sou::A8 topLevelVariable1;
static field dynamic topLevelVariable2;
static method topLevelFunction1(sou::A11 a, [sou::A12 b]) → sou::A10;
static method topLevelFunction2(sou::A11 a, {sou::A13 b}) → sou::A10;

----- external pkg/front_end/testcases/shaker/lib/sources.dart
library;
import self as self;
import "dart:core" as core;

class A1 extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•();
}
class A2 extends core::Object {
}
class A3 extends core::Object {
}
class A4 extends core::Object {
}
class A5 extends core::Object {
}
class A6 extends core::Object {
}
class A7 extends core::Object {
}
class A8 extends core::Object {
}
class A10 extends core::Object {
}
class A11 extends core::Object {
}
class A12 extends core::Object {
}
class A13 extends core::Object {
}
class A14 extends core::Object {
}

