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

class C extends core::Object {
  field dynamic x = null;
  default constructor •() → void
    : super core::Object::•()
    ;
  method m() → dynamic {
    final dynamic #context = MakeVector(3);
    #context[2] = this;
    return MakeClosure<(dynamic) → dynamic>(self::closure#C#m#function, #context);
  }
  method f() → dynamic {
    final dynamic #context = MakeVector(3);
    #context[2] = this;
    return MakeClosure<() → dynamic>(self::closure#C#f#function, #context);
  }
}
static method main() → dynamic {
  self::C c = new self::C::•();
  c.x = 41;
  c.m().call(42);
  if(!42.==(c.x))
    throw "Unexpected value in c.x: ${c.x}";
  dynamic result = c.f().call().call();
  if(!42.==(result))
    throw "Unexpected value from c.f()()(): ${result}";
}
static method closure#C#m#function(dynamic #contextParameter, dynamic v) → dynamic {
  return (#contextParameter[2]).x = v;
}
static method closure#C#f#function#function(dynamic #contextParameter) → dynamic {
  return (#contextParameter[2]).x;
}
static method closure#C#f#function(dynamic #contextParameter) → dynamic {
  return MakeClosure<() → dynamic>(self::closure#C#f#function#function, #contextParameter);
}
