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

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