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

static const field core::int max = 100;
static method main() → dynamic {
  dynamic closures = <dynamic>[];
  dynamic closures2 = <dynamic>[];
  final dynamic #context = MakeVector(3);
  #context[2] = null;
  {
    dynamic #context = MakeVector(3);
    #context[1] = #context;
    #context[2] = 0;
    for (; (#context[2]).<(self::max); #context = CopyVector(#context), #context[2] = (#context[2]).+(1)) {
      closures.add(MakeClosure<() → dynamic>(self::closure#main#function, #context));
      closures2.add(MakeClosure<() → dynamic>(self::closure#main#function#1, #context));
    }
  }
  core::int sum = 0;
  for (core::Function f in closures) {
    sum = sum.+(f.call());
  }
  for (core::Function f in closures2) {
    f.call();
  }
  core::int expectedSum = self::max.-(1).*(self::max).~/(2);
  if(!expectedSum.==(sum)) {
    throw core::Exception::•("Unexpected sum = ${sum} != ${expectedSum}");
  }
}
static method closure#main#function(dynamic #contextParameter) → dynamic {
  return #contextParameter[1][2] = #contextParameter[2];
}
static method closure#main#function#1(dynamic #contextParameter) → dynamic {
  if(!(#contextParameter[1][2]).==(self::max.-(1)))
    throw "last: ${#contextParameter[1][2]} != ${self::max.-(1)}";
}
