blob: 62725d2e8d3578b28261c9169b0f8cc0cd8693be [file] [log] [blame]
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";
}