// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

library kernel.transformations.closure_conversion;

import '../ast.dart' show Class, Program;

import '../core_types.dart' show CoreTypes;

import 'closure/converter.dart' show ClosureConverter;

import 'closure/info.dart' show ClosureInfo;

import 'closure/mock.dart' show mockUpContext;

Program transformProgram(Program program) {
  var info = new ClosureInfo();
  info.visitProgram(program);

  CoreTypes coreTypes = new CoreTypes(program);
  Class contextClass = mockUpContext(coreTypes, program);
  var convert = new ClosureConverter(coreTypes, info, contextClass);
  return convert.visitProgram(program);
}
