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

class C extends core::Object {
  field dynamic t;
  constructor foo(dynamic f) → void
    : final dynamic #context = MakeVector(3), dynamic #t1 = #context[2] = f, self::C::t = MakeClosure<() → dynamic>(self::closure#C#foo#function, #context), super core::Object::•() {
    core::print(1);
  }
}
static method main() → dynamic {
  core::print(0);
  dynamic c = new self::C::foo(MakeClosure<(dynamic) → dynamic>(self::closure#main#function, null));
  core::print(2);
  c.t().call("fisk");
  core::print(3);
}
static method closure#C#foo#function#function(dynamic #contextParameter, dynamic x) → dynamic {
  (#contextParameter[1][2]).call("${#contextParameter[2]}${x}");
}
static method closure#C#foo#function(dynamic #contextParameter) → dynamic {
  final dynamic #context = MakeVector(3);
  #context[1] = #contextParameter;
  #context[2] = null;
  dynamic g = MakeClosure<(dynamic) → dynamic>(self::closure#C#foo#function#function, #context);
  #context[2] = "hest";
  return g;
}
static method closure#main#function(dynamic #contextParameter, dynamic x) → dynamic {
  return core::print(x);
}
