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

class C extends core::Object {
  field dynamic x = null;
  constructor •() → void
    : super core::Object::•()
    ;
  method m() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = this;
    return MakeClosure<(dynamic) → dynamic>(self::closure#C#m#function, #context);
  }
  method f() → dynamic {
    final Vector #context = MakeVector(2);
    #context[1] = 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(Vector #contextParameter, dynamic v) → dynamic {
  return (#contextParameter[1]).x = v;
}
static method closure#C#f#function#function(Vector #contextParameter) → dynamic {
  return (#contextParameter[1]).x;
}
static method closure#C#f#function(Vector #contextParameter) → dynamic {
  return MakeClosure<() → dynamic>(self::closure#C#f#function#function, #contextParameter);
}
