| 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 ef33a135f4deaf41d3d735f9f4bd12fb948c0ff8..a002d6ee9829bee357984ab2f83ccb21f4d081ea 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
|
| @@ -1283,6 +1283,19 @@ class DartIrBuilderVisitor extends IrBuilderVisitor {
|
| }
|
| }
|
|
|
| +/// The [IrBuilder]s view on the information about the program that has been
|
| +/// computed in resolution and and type interence.
|
| +class GlobalProgramInformation {
|
| + final Compiler _compiler;
|
| + JavaScriptBackend get _backend => _compiler.backend;
|
| +
|
| + GlobalProgramInformation(this._compiler);
|
| +
|
| + /// Returns [true], if the analysis could not determine that the type
|
| + /// arguments for the class [cls] are never used in the program.
|
| + bool requiresRuntimeTypesFor(ClassElement cls) => _backend.classNeedsRti(cls);
|
| +}
|
| +
|
| /// IR builder specific to the JavaScript backend, coupled to the [JsIrBuilder].
|
| class JsIrBuilderVisitor extends IrBuilderVisitor {
|
| /// Promote the type of [irBuilder] to [JsIrBuilder].
|
| @@ -1428,6 +1441,13 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
|
| return visitor.withBuilder(irBuilder, () => visitor.translateConstant(exp));
|
| }
|
|
|
| + JsIrBuilder getBuilderFor(Element element) {
|
| + return new JsIrBuilder(
|
| + new GlobalProgramInformation(compiler),
|
| + compiler.backend.constantSystem,
|
| + element);
|
| + }
|
| +
|
| /// Builds the IR for a given constructor.
|
| ///
|
| /// 1. Evaluates all own or inherited field initializers.
|
| @@ -1438,8 +1458,7 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
|
| constructor = constructor.implementation;
|
| ClassElement classElement = constructor.enclosingClass.implementation;
|
|
|
| - JsIrBuilder builder =
|
| - new JsIrBuilder(compiler.backend.constantSystem, constructor);
|
| + JsIrBuilder builder = getBuilderFor(constructor);
|
|
|
| return withBuilder(builder, () {
|
| // Setup parameters and create a box if anything is captured.
|
| @@ -1704,8 +1723,7 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
|
| node,
|
| elements);
|
|
|
| - JsIrBuilder builder =
|
| - new JsIrBuilder(compiler.backend.constantSystem, body);
|
| + JsIrBuilder builder = getBuilderFor(body);
|
|
|
| return withBuilder(builder, () {
|
| irBuilder.buildConstructorBodyHeader(getConstructorBodyParameters(body),
|
| @@ -1727,8 +1745,7 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
|
| element,
|
| node,
|
| elements);
|
| - IrBuilder builder =
|
| - new JsIrBuilder(compiler.backend.constantSystem, element);
|
| + IrBuilder builder = getBuilderFor(element);
|
| return withBuilder(builder, () => _makeFunctionBody(element, node));
|
| }
|
|
|
|
|