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

class C extends core::Object {
  field dynamic f = MakeClosure<() → dynamic>(self::closure#C#f#function, null);
  constructor •() → void
    : super core::Object::•()
    ;
  get g() → dynamic {
    return MakeClosure<(dynamic) → dynamic>(self::closure#C#g#function, null);
  }
  method a() → dynamic {
    return "a";
  }
  method b(dynamic x) → dynamic {
    return x;
  }
  method c(dynamic x, [dynamic y = 2]) → dynamic {
    return x.+(y);
  }
  method d(dynamic x, {dynamic y = 2}) → dynamic {
    return x.+(y);
  }
  method a#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<() → dynamic>(self::closure#C#a, #context);
  }
  method b#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<(dynamic) → dynamic>(self::closure#C#b, #context);
  }
  method c#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<(dynamic, [dynamic]) → dynamic>(self::closure#C#c, #context);
  }
  method d#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<(dynamic, {y: dynamic}) → dynamic>(self::closure#C#d, #context);
  }
}
class D<T extends core::Object> extends core::Object {
  field dynamic f = MakeClosure<() → dynamic>(self::closure#D#f#function, null);
  constructor •() → void
    : super core::Object::•()
    ;
  get g() → dynamic {
    return MakeClosure<(dynamic) → dynamic>(self::closure#D#g#function, null);
  }
  method a() → dynamic {
    return "a";
  }
  method b(dynamic x) → dynamic {
    return x;
  }
  method c(dynamic x, [dynamic y = 2]) → dynamic {
    return x.+(y);
  }
  method d(dynamic x, {dynamic y = 2}) → dynamic {
    return x.+(y);
  }
  method a#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<() → dynamic>(self::closure#D#a, #context);
  }
  method b#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<(dynamic) → dynamic>(self::closure#D#b, #context);
  }
  method c#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<(dynamic, [dynamic]) → dynamic>(self::closure#D#c, #context);
  }
  method d#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<(dynamic, {y: dynamic}) → dynamic>(self::closure#D#d, #context);
  }
}
class E<T extends core::Object> extends core::Object {
  field dynamic f = MakeClosure<() → dynamic>(self::closure#E#f#function, null);
  constructor •() → void
    : super core::Object::•()
    ;
  get g() → dynamic {
    return MakeClosure<(dynamic) → dynamic>(self::closure#E#g#function, null);
  }
  method a() → dynamic {
    return "a";
  }
  method b(self::E::T x) → dynamic {
    return x;
  }
  method c(self::E::T x, [self::E::T y = 2]) → dynamic {
    return x.+(y);
  }
  method d(self::E::T x, {self::E::T y = 2}) → dynamic {
    return x.+(y);
  }
  method a#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<() → dynamic>(self::closure#E#a, #context);
  }
  method b#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<(self::E::T) → dynamic>(self::closure#E#b, #context);
  }
  method c#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<(self::E::T, [self::E::T]) → dynamic>(self::closure#E#c, #context);
  }
  method d#get() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<(self::E::T, {y: self::E::T}) → dynamic>(self::closure#E#d, #context);
  }
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  core::print("Expecting '${expected}' and got '${actual}'");
  if(!expected.==(actual)) {
    core::print("Expected '${expected}' but got '${actual}'");
    throw "Expected '${expected}' but got '${actual}'";
  }
}
static method test(dynamic o) → dynamic {
  self::expect("f", o.f());
  self::expect("f", o.f.call());
  self::expect("g(42)", o.g(42));
  self::expect("g(42)", o.g.call(42));
  self::expect("a", o.a());
  self::expect("a", o.a#get().call());
  self::expect(42, o.b(42));
  self::expect(42, o.b#get().call(42));
  self::expect(42, o.c(40));
  self::expect(42, o.c#get().call(40));
  self::expect(87, o.c(80, 7));
  self::expect(87, o.c#get().call(80, 7));
  self::expect(42, o.d(40));
  self::expect(42, o.d#get().call(40));
  self::expect(87, o.d(80, y: 7));
  self::expect(87, o.d#get().call(80, y: 7));
}
static method main(dynamic arguments) → dynamic {
  self::test(new self::C::•());
  self::test(new self::D::•<core::int>());
  self::test(new self::E::•<core::int>());
}
static method closure#C#g#function(Vector #contextParameter, dynamic x) → dynamic {
  return "g(${x})";
}
static method closure#C#a(Vector #contextParameter) → dynamic
  return (#contextParameter[1]).{self::C::a}();
static method closure#C#b(Vector #contextParameter, dynamic x) → dynamic
  return (#contextParameter[1]).{self::C::b}(x);
static method closure#C#c(Vector #contextParameter, dynamic x, [dynamic y = 2]) → dynamic
  return (#contextParameter[1]).{self::C::c}(x, y);
static method closure#C#d(Vector #contextParameter, dynamic x, {dynamic y = 2}) → dynamic
  return (#contextParameter[1]).{self::C::d}(x, y: y);
static method closure#C#f#function(Vector #contextParameter) → dynamic {
  return "f";
}
static method closure#D#g#function(Vector #contextParameter, dynamic x) → dynamic {
  return "g(${x})";
}
static method closure#D#a(Vector #contextParameter) → dynamic
  return (#contextParameter[1]).{self::D::a}();
static method closure#D#b(Vector #contextParameter, dynamic x) → dynamic
  return (#contextParameter[1]).{self::D::b}(x);
static method closure#D#c(Vector #contextParameter, dynamic x, [dynamic y = 2]) → dynamic
  return (#contextParameter[1]).{self::D::c}(x, y);
static method closure#D#d(Vector #contextParameter, dynamic x, {dynamic y = 2}) → dynamic
  return (#contextParameter[1]).{self::D::d}(x, y: y);
static method closure#D#f#function(Vector #contextParameter) → dynamic {
  return "f";
}
static method closure#E#g#function(Vector #contextParameter, dynamic x) → dynamic {
  return "g(${x})";
}
static method closure#E#a(Vector #contextParameter) → dynamic
  return (#contextParameter[1]).{self::E::a}();
static method closure#E#b(Vector #contextParameter, dynamic x) → dynamic
  return (#contextParameter[1]).{self::E::b}(x);
static method closure#E#c(Vector #contextParameter, dynamic x, [dynamic y = 2]) → dynamic
  return (#contextParameter[1]).{self::E::c}(x, y);
static method closure#E#d(Vector #contextParameter, dynamic x, {dynamic y = 2}) → dynamic
  return (#contextParameter[1]).{self::E::d}(x, y: y);
static method closure#E#f#function(Vector #contextParameter) → dynamic {
  return "f";
}
