| Index: pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
|
| index 6541e41a2533146b0cbf615a0c3a7ffff500457e..115ae15662cac80efc5e7dff69ae019b97212222 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
|
| @@ -41,8 +41,7 @@ import 'cps_ir_builder.dart';
|
| * re-implemented to work directly on the IR.
|
| */
|
| class IrBuilderTask extends CompilerTask {
|
| - final Map<Element, ir.ExecutableDefinition> nodes =
|
| - <Element, ir.ExecutableDefinition>{};
|
| + final Map<Element, ir.RootNode> nodes = <Element, ir.RootNode>{};
|
| final bool generateSourceMap;
|
|
|
| IrBuilderTask(Compiler compiler, {this.generateSourceMap: true})
|
| @@ -52,11 +51,11 @@ class IrBuilderTask extends CompilerTask {
|
|
|
| bool hasIr(Element element) => nodes.containsKey(element.implementation);
|
|
|
| - ir.ExecutableDefinition getIr(ExecutableElement element) {
|
| + ir.RootNode getIr(ExecutableElement element) {
|
| return nodes[element.implementation];
|
| }
|
|
|
| - ir.ExecutableDefinition buildNode(AstElement element) {
|
| + ir.RootNode buildNode(AstElement element) {
|
| if (!canBuild(element)) return null;
|
|
|
| TreeElements elementsMapping = element.resolvedAst.elements;
|
| @@ -72,12 +71,11 @@ class IrBuilderTask extends CompilerTask {
|
| elementsMapping, compiler, sourceInformationBuilder)
|
| : new DartIrBuilderVisitor(
|
| elementsMapping, compiler, sourceInformationBuilder);
|
| - ir.ExecutableDefinition definition =
|
| - builder.buildExecutable(element);
|
| - if (definition != null) {
|
| - nodes[element] = definition;
|
| + ir.RootNode irNode = builder.buildExecutable(element);
|
| + if (irNode != null) {
|
| + nodes[element] = irNode;
|
| }
|
| - return definition;
|
| + return irNode;
|
| });
|
| }
|
|
|
| @@ -170,11 +168,11 @@ abstract class IrBuilderVisitor extends SemanticVisitor<ir.Primitive, dynamic>
|
| SemanticSendVisitor get sendVisitor => this;
|
|
|
| /**
|
| - * Builds the [ir.ExecutableDefinition] for an executable element. In case the
|
| + * Builds the [ir.RootNode] for an executable element. In case the
|
| * function uses features that cannot be expressed in the IR, this element
|
| * returns `null`.
|
| */
|
| - ir.ExecutableDefinition buildExecutable(ExecutableElement element);
|
| + ir.RootNode buildExecutable(ExecutableElement element);
|
|
|
| ClosureScope getClosureScopeForNode(ast.Node node);
|
| ClosureEnvironment getClosureEnvironment();
|
| @@ -201,8 +199,8 @@ abstract class IrBuilderVisitor extends SemanticVisitor<ir.Primitive, dynamic>
|
| Selector selector,
|
| List<ir.Primitive> arguments);
|
|
|
| - ir.FunctionDefinition _makeFunctionBody(FunctionElement element,
|
| - ast.FunctionExpression node) {
|
| + ir.RootNode _makeFunctionBody(FunctionElement element,
|
| + ast.FunctionExpression node) {
|
| FunctionSignature signature = element.functionSignature;
|
| List<ParameterElement> parameters = [];
|
| signature.orderedForEachParameter(parameters.add);
|
| @@ -247,7 +245,7 @@ abstract class IrBuilderVisitor extends SemanticVisitor<ir.Primitive, dynamic>
|
| ir.Primitive value = irBuilder.buildLocalGet(parameterElement);
|
| result.add(irBuilder.makeFieldInitializer(
|
| initializingFormal.fieldElement,
|
| - irBuilder.makeRunnableBody(value)));
|
| + irBuilder.makeBody(value)));
|
| });
|
| }
|
| }
|
| @@ -263,7 +261,7 @@ abstract class IrBuilderVisitor extends SemanticVisitor<ir.Primitive, dynamic>
|
| FieldElement field = elements[initializer];
|
| withBuilder(irBuilder.makeInitializerBuilder(), () {
|
| ir.Primitive value = visit(initializer.arguments.head);
|
| - ir.RunnableBody body = irBuilder.makeRunnableBody(value);
|
| + ir.Body body = irBuilder.makeBody(value);
|
| result.add(irBuilder.makeFieldInitializer(field, body));
|
| });
|
| } else if (initializer is ast.Send) {
|
| @@ -273,11 +271,11 @@ abstract class IrBuilderVisitor extends SemanticVisitor<ir.Primitive, dynamic>
|
| }
|
| ConstructorElement constructor = elements[initializer].implementation;
|
| Selector selector = elements.getSelector(initializer);
|
| - List<ir.RunnableBody> arguments =
|
| + List<ir.Body> arguments =
|
| initializer.arguments.mapToList((ast.Node argument) {
|
| return withBuilder(irBuilder.makeInitializerBuilder(), () {
|
| ir.Primitive value = visit(argument);
|
| - return irBuilder.makeRunnableBody(value);
|
| + return irBuilder.makeBody(value);
|
| });
|
| });
|
| result.add(irBuilder.makeSuperInitializer(constructor,
|
| @@ -303,7 +301,7 @@ abstract class IrBuilderVisitor extends SemanticVisitor<ir.Primitive, dynamic>
|
| }
|
| Selector selector = new Selector.callDefaultConstructor();
|
| result.add(irBuilder.makeSuperInitializer(target,
|
| - <ir.RunnableBody>[],
|
| + <ir.Body>[],
|
| selector));
|
| }
|
| }
|
| @@ -1749,7 +1747,7 @@ abstract class IrBuilderVisitor extends SemanticVisitor<ir.Primitive, dynamic>
|
| return irBuilder.buildConstantLiteral(getConstantForNode(node));
|
| }
|
|
|
| - ir.ExecutableDefinition nullIfGiveup(ir.ExecutableDefinition action()) {
|
| + ir.RootNode nullIfGiveup(ir.RootNode action()) {
|
| try {
|
| return action();
|
| } catch(e, tr) {
|
| @@ -1959,11 +1957,11 @@ class DartIrBuilderVisitor extends IrBuilderVisitor {
|
| ClosureScope getClosureScopeForNode(ast.Node node) => null;
|
| ClosureEnvironment getClosureEnvironment() => null;
|
|
|
| - ir.ExecutableDefinition buildExecutable(ExecutableElement element) {
|
| + ir.RootNode buildExecutable(ExecutableElement element) {
|
| return nullIfGiveup(() {
|
| if (element is FieldElement) {
|
| return buildField(element);
|
| - } else if (element is FunctionElement) {
|
| + } else if (element is FunctionElement || element is ConstructorElement) {
|
| return buildFunction(element);
|
| } else {
|
| compiler.internalError(element, "Unexpected element type $element");
|
| @@ -1996,7 +1994,7 @@ class DartIrBuilderVisitor extends IrBuilderVisitor {
|
| });
|
| }
|
|
|
| - ir.FunctionDefinition buildFunction(FunctionElement element) {
|
| + ir.RootNode buildFunction(FunctionElement element) {
|
| assert(invariant(element, element.isImplementation));
|
| ast.FunctionExpression node = element.node;
|
| if (element.asyncMarker != AsyncMarker.SYNC) {
|
| @@ -2157,7 +2155,7 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
|
| scope.boxedLoopVariables);
|
| }
|
|
|
| - ir.ExecutableDefinition buildExecutable(ExecutableElement element) {
|
| + ir.RootNode buildExecutable(ExecutableElement element) {
|
| return nullIfGiveup(() {
|
| switch (element.kind) {
|
| case ElementKind.GENERATIVE_CONSTRUCTOR:
|
|
|