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

class Closure#main#g 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#main#g::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#main#g::context};
    return #contextParameter.[](0).[](x);
  }
}
static field dynamic f = null;
static method foo() → dynamic {
  core::print(self::f.call(0));
}
static method main(dynamic arguments) → dynamic {
  final mock::Context #context = new mock::Context::•(1);
  #context.parent = null;
  #context.[]=(0, arguments);
  final (dynamic) → dynamic g = new self::Closure#main#g::•(#context);
  self::f = g;
  self::foo();
}
