blob: 42f439b6761b321c085c66e91974a8f0c51699f4 [file] [log] [blame]
// 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.
import '../common/names.dart';
import '../common/tasks.dart' show CompilerTask;
import '../compiler.dart';
import '../elements/elements.dart';
import 'kernel.dart';
import 'package:kernel/ast.dart' as ir;
/// Visits the compiler main function and builds the kernel representation.
///
/// This creates a mapping from kernel nodes to AST nodes to be used later.
class KernelTask extends CompilerTask {
get name => "kernel";
final Compiler _compiler;
final Kernel kernel;
KernelTask(Compiler compiler)
: this._compiler = compiler,
this.kernel = new Kernel(compiler),
super(compiler.measurer);
ir.Program program;
/// Builds the kernel IR for the main function.
///
/// May enqueue more elements to the resolution queue.
void buildKernelIr() => measure(() {
program = buildProgram(_compiler.mainApp);
});
/// Builds the kernel IR program for the main function exported from
/// [library].
///
/// May enqueue more elements to the resolution queue.
ir.Program buildProgram(LibraryElement library) {
return new ir.Program(kernel.libraryDependencies(library.canonicalUri))
..mainMethod =
kernel.functionToIr(library.findExported(Identifiers.main));
}
}