| library; |
| import self as self; |
| import "dart:core" as core; |
| import "dart:mock" as mock; |
| |
| class C extends core::Object { |
| field dynamic f = new self::Closure#C#f#function::•(null); |
| constructor •() → void |
| : super core::Object::•() |
| ; |
| get g() → dynamic { |
| return new 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); |
| } |
| get a#get() → dynamic |
| return new self::Closure#C#a::•(this); |
| get b#get() → dynamic |
| return new self::Closure#C#b::•(this); |
| get c#get() → dynamic |
| return new self::Closure#C#c::•(this); |
| get d#get() → dynamic |
| return new self::Closure#C#d::•(this); |
| } |
| class D<T extends core::Object> extends core::Object { |
| field dynamic f = new self::Closure#D#f#function::•(null); |
| constructor •() → void |
| : super core::Object::•() |
| ; |
| get g() → dynamic { |
| return new 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); |
| } |
| get a#get() → dynamic |
| return new self::Closure#D#a::•<self::D::T>(this); |
| get b#get() → dynamic |
| return new self::Closure#D#b::•<self::D::T>(this); |
| get c#get() → dynamic |
| return new self::Closure#D#c::•<self::D::T>(this); |
| get d#get() → dynamic |
| return new self::Closure#D#d::•<self::D::T>(this); |
| } |
| class E<T extends core::Object> extends core::Object { |
| field dynamic f = new self::Closure#E#f#function::•(null); |
| constructor •() → void |
| : super core::Object::•() |
| ; |
| get g() → dynamic { |
| return new self::Closure#E#g#function::•<self::E::T>(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); |
| } |
| get a#get() → dynamic |
| return new self::Closure#E#a::•<self::E::T>(this); |
| get b#get() → dynamic |
| return new self::Closure#E#b::•<self::E::T>(this); |
| get c#get() → dynamic |
| return new self::Closure#E#c::•<self::E::T>(this); |
| get d#get() → dynamic |
| return new self::Closure#E#d::•<self::E::T>(this); |
| } |
| class Closure#C#g#function extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field mock::Context context; |
| constructor •(final mock::Context context) → dynamic |
| : self::Closure#C#g#function::context = context |
| ; |
| method call(dynamic x) → dynamic { |
| "This is a temporary solution. In the VM, this will become an additional parameter."; |
| final mock::Context #contextParameter = this.{self::Closure#C#g#function::context}; |
| return "g(${x})"; |
| } |
| } |
| class Closure#C#a extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::C self; |
| constructor •(final self::C self) → dynamic |
| : self::Closure#C#a::self = self |
| ; |
| method call() → dynamic |
| return this.{self::Closure#C#a::self}.{self::C::a}(); |
| } |
| class Closure#C#b extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::C self; |
| constructor •(final self::C self) → dynamic |
| : self::Closure#C#b::self = self |
| ; |
| method call(dynamic x) → dynamic |
| return this.{self::Closure#C#b::self}.{self::C::b}(x); |
| } |
| class Closure#C#c extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::C self; |
| constructor •(final self::C self) → dynamic |
| : self::Closure#C#c::self = self |
| ; |
| method call(dynamic x, [dynamic y = 2]) → dynamic |
| return this.{self::Closure#C#c::self}.{self::C::c}(x, y); |
| } |
| class Closure#C#d extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::C self; |
| constructor •(final self::C self) → dynamic |
| : self::Closure#C#d::self = self |
| ; |
| method call(dynamic x, {dynamic y = 2}) → dynamic |
| return this.{self::Closure#C#d::self}.{self::C::d}(x, y: y); |
| } |
| class Closure#C#f#function extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field mock::Context context; |
| constructor •(final mock::Context context) → dynamic |
| : self::Closure#C#f#function::context = context |
| ; |
| method call() → dynamic { |
| "This is a temporary solution. In the VM, this will become an additional parameter."; |
| final mock::Context #contextParameter = this.{self::Closure#C#f#function::context}; |
| return "f"; |
| } |
| } |
| class Closure#D#g#function extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field mock::Context context; |
| constructor •(final mock::Context context) → dynamic |
| : self::Closure#D#g#function::context = context |
| ; |
| method call(dynamic x) → dynamic { |
| "This is a temporary solution. In the VM, this will become an additional parameter."; |
| final mock::Context #contextParameter = this.{self::Closure#D#g#function::context}; |
| return "g(${x})"; |
| } |
| } |
| class Closure#D#a<T extends core::Object> extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::D<self::Closure#D#a::T> self; |
| constructor •(final self::D<self::Closure#D#a::T> self) → dynamic |
| : self::Closure#D#a::self = self |
| ; |
| method call() → dynamic |
| return this.{self::Closure#D#a::self}.{self::D::a}(); |
| } |
| class Closure#D#b<T extends core::Object> extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::D<self::Closure#D#b::T> self; |
| constructor •(final self::D<self::Closure#D#b::T> self) → dynamic |
| : self::Closure#D#b::self = self |
| ; |
| method call(dynamic x) → dynamic |
| return this.{self::Closure#D#b::self}.{self::D::b}(x); |
| } |
| class Closure#D#c<T extends core::Object> extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::D<self::Closure#D#c::T> self; |
| constructor •(final self::D<self::Closure#D#c::T> self) → dynamic |
| : self::Closure#D#c::self = self |
| ; |
| method call(dynamic x, [dynamic y = 2]) → dynamic |
| return this.{self::Closure#D#c::self}.{self::D::c}(x, y); |
| } |
| class Closure#D#d<T extends core::Object> extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::D<self::Closure#D#d::T> self; |
| constructor •(final self::D<self::Closure#D#d::T> self) → dynamic |
| : self::Closure#D#d::self = self |
| ; |
| method call(dynamic x, {dynamic y = 2}) → dynamic |
| return this.{self::Closure#D#d::self}.{self::D::d}(x, y: y); |
| } |
| class Closure#D#f#function extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field mock::Context context; |
| constructor •(final mock::Context context) → dynamic |
| : self::Closure#D#f#function::context = context |
| ; |
| method call() → dynamic { |
| "This is a temporary solution. In the VM, this will become an additional parameter."; |
| final mock::Context #contextParameter = this.{self::Closure#D#f#function::context}; |
| return "f"; |
| } |
| } |
| class Closure#E#g#function<T extends core::Object> extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field mock::Context context; |
| constructor •(final mock::Context context) → dynamic |
| : self::Closure#E#g#function::context = context |
| ; |
| method call(self::Closure#E#g#function::T x) → dynamic { |
| "This is a temporary solution. In the VM, this will become an additional parameter."; |
| final mock::Context #contextParameter = this.{self::Closure#E#g#function::context}; |
| return "g(${x})"; |
| } |
| } |
| class Closure#E#a<T extends core::Object> extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::E<self::Closure#E#a::T> self; |
| constructor •(final self::E<self::Closure#E#a::T> self) → dynamic |
| : self::Closure#E#a::self = self |
| ; |
| method call() → dynamic |
| return this.{self::Closure#E#a::self}.{self::E::a}(); |
| } |
| class Closure#E#b<T extends core::Object> extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::E<self::Closure#E#b::T> self; |
| constructor •(final self::E<self::Closure#E#b::T> self) → dynamic |
| : self::Closure#E#b::self = self |
| ; |
| method call(self::Closure#E#b::T x) → dynamic |
| return this.{self::Closure#E#b::self}.{self::E::b}(x); |
| } |
| class Closure#E#c<T extends core::Object> extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::E<self::Closure#E#c::T> self; |
| constructor •(final self::E<self::Closure#E#c::T> self) → dynamic |
| : self::Closure#E#c::self = self |
| ; |
| method call(self::Closure#E#c::T x, [self::Closure#E#c::T y = 2]) → dynamic |
| return this.{self::Closure#E#c::self}.{self::E::c}(x, y); |
| } |
| class Closure#E#d<T extends core::Object> extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field self::E<self::Closure#E#d::T> self; |
| constructor •(final self::E<self::Closure#E#d::T> self) → dynamic |
| : self::Closure#E#d::self = self |
| ; |
| method call(self::Closure#E#d::T x, {self::Closure#E#d::T y = 2}) → dynamic |
| return this.{self::Closure#E#d::self}.{self::E::d}(x, y: y); |
| } |
| class Closure#E#f#function extends core::Object implements core::Function { |
| field core::String note = "This is temporary. The VM doesn't need closure classes."; |
| field mock::Context context; |
| constructor •(final mock::Context context) → dynamic |
| : self::Closure#E#f#function::context = context |
| ; |
| method call() → dynamic { |
| "This is a temporary solution. In the VM, this will become an additional parameter."; |
| final mock::Context #contextParameter = this.{self::Closure#E#f#function::context}; |
| return "f"; |
| } |
| } |
| 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>()); |
| } |