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

static method range(core::int high) → dynamic {
  final dynamic #context = MakeVector(3);
  #context[2] = high;
  high = null;
  final (core::int) → dynamic iter = MakeClosure<(core::int) → dynamic>(self::closure#range#iter, #context);
  return iter;
}
static method main() → dynamic {
  dynamic sum = 0;
  for (dynamic x in self::range(10).call(2))
    sum = sum.+(x);
  if(!sum.==(44)) {
    throw core::Exception::•("Incorrect output.");
  }
}
static method closure#range#iter(dynamic #contextParameter, core::int low) → dynamic /* originally sync* */ {
  final dynamic #context = MakeVector(3);
  #context[1] = #contextParameter;
  #context[2] = low;
  low = null;
  dynamic :await_jump_var = 0;
  dynamic :await_ctx_var;
  dynamic :sync_op = (core::Iterator<dynamic> :iterator) → core::bool yielding {
    {
      while ((let final dynamic #t1 = #contextParameter[2] in let final dynamic #t2 = #contextParameter[2] = #t1.-(1) in #t1).>(#context[2])) {
        :iterator._current = #context[1][2];
        [yield] true;
      }
    }
    return false;
  };
  return new core::_SyncIterable::•(:sync_op);
}
