| Index: pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
|
| index 43009173d64f71907b92e7363785952e223c80a0..0ea02177f95005895cfedd9c5f94867f7399772a 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
|
| @@ -4,9 +4,10 @@
|
|
|
| library dart2js.ir_builder;
|
|
|
| +import '../compile_time_constants.dart' show BackendConstantEnvironment;
|
| import '../constants/constant_system.dart';
|
| import '../constants/expressions.dart';
|
| -import '../constants/values.dart' show PrimitiveConstantValue;
|
| +import '../constants/values.dart' show ConstantValue, PrimitiveConstantValue;
|
| import '../dart_types.dart';
|
| import '../dart2jslib.dart';
|
| import '../elements/elements.dart';
|
| @@ -384,7 +385,9 @@ abstract class IrBuilderMixin<N> {
|
|
|
| /// Shared state between delimited IrBuilders within the same function.
|
| class IrBuilderSharedState {
|
| - final ConstantSystem constantSystem;
|
| + final BackendConstantEnvironment constants;
|
| +
|
| + ConstantSystem get constantSystem => constants.constantSystem;
|
|
|
| /// A stack of collectors for breaks.
|
| final List<JumpCollector> breakCollectors = <JumpCollector>[];
|
| @@ -402,7 +405,7 @@ class IrBuilderSharedState {
|
|
|
| final List<ir.Parameter> functionParameters = <ir.Parameter>[];
|
|
|
| - IrBuilderSharedState(this.constantSystem, this.currentElement);
|
| + IrBuilderSharedState(this.constants, this.currentElement);
|
|
|
| ir.Parameter get thisParameter => _thisParameter;
|
| void set thisParameter(ir.Parameter value) {
|
| @@ -548,8 +551,9 @@ abstract class IrBuilder {
|
| ir.Expression _current = null;
|
|
|
| /// Initialize a new top-level IR builder.
|
| - void _init(ConstantSystem constantSystem, ExecutableElement currentElement) {
|
| - state = new IrBuilderSharedState(constantSystem, currentElement);
|
| + void _init(BackendConstantEnvironment constants,
|
| + ExecutableElement currentElement) {
|
| + state = new IrBuilderSharedState(constants, currentElement);
|
| environment = new Environment.empty();
|
| mutableVariables = <Local, ir.MutableVariable>{};
|
| }
|
| @@ -668,50 +672,53 @@ abstract class IrBuilder {
|
|
|
|
|
| /// Create a [ir.Constant] from [constant] and add it to the CPS term.
|
| - ir.Constant buildConstant(ConstantExpression constant) {
|
| + // TODO(johnniwinther): Remove [value] when [ConstantValue] can be computed
|
| + // directly from [constant].
|
| + ir.Constant buildConstant(ConstantExpression constant, ConstantValue value) {
|
| assert(isOpen);
|
| - return addPrimitive(new ir.Constant(constant));
|
| + return addPrimitive(new ir.Constant(constant, value));
|
| }
|
|
|
| /// Create an integer constant and add it to the CPS term.
|
| ir.Constant buildIntegerConstant(int value) {
|
| - return buildConstant(new IntConstantExpression(
|
| - value,
|
| - state.constantSystem.createInt(value)));
|
| + return buildConstant(
|
| + new IntConstantExpression(value),
|
| + state.constantSystem.createInt(value));
|
| }
|
|
|
| /// Create a double constant and add it to the CPS term.
|
| ir.Constant buildDoubleConstant(double value) {
|
| - return buildConstant(new DoubleConstantExpression(
|
| - value,
|
| - state.constantSystem.createDouble(value)));
|
| + return buildConstant(
|
| + new DoubleConstantExpression(value),
|
| + state.constantSystem.createDouble(value));
|
| }
|
|
|
| /// Create a Boolean constant and add it to the CPS term.
|
| ir.Constant buildBooleanConstant(bool value) {
|
| - return buildConstant(new BoolConstantExpression(
|
| - value,
|
| - state.constantSystem.createBool(value)));
|
| + return buildConstant(
|
| + new BoolConstantExpression(value),
|
| + state.constantSystem.createBool(value));
|
| }
|
|
|
| /// Create a null constant and add it to the CPS term.
|
| ir.Constant buildNullConstant() {
|
| - return buildConstant(new NullConstantExpression(
|
| - state.constantSystem.createNull()));
|
| + return buildConstant(
|
| + new NullConstantExpression(),
|
| + state.constantSystem.createNull());
|
| }
|
|
|
| /// Create a string constant and add it to the CPS term.
|
| ir.Constant buildStringConstant(String value) {
|
| - return buildConstant(new StringConstantExpression(
|
| - value,
|
| - state.constantSystem.createString(new ast.DartString.literal(value))));
|
| + return buildConstant(
|
| + new StringConstantExpression(value),
|
| + state.constantSystem.createString(new ast.DartString.literal(value)));
|
| }
|
|
|
| /// Create a string constant and add it to the CPS term.
|
| ir.Constant buildDartStringConstant(ast.DartString value) {
|
| - return buildConstant(new StringConstantExpression(
|
| - value.slowToString(),
|
| - state.constantSystem.createString(value)));
|
| + return buildConstant(
|
| + new StringConstantExpression(value.slowToString()),
|
| + state.constantSystem.createString(value));
|
| }
|
|
|
| /// Creates a non-constant list literal of the provided [type] and with the
|
| @@ -1918,9 +1925,9 @@ abstract class IrBuilder {
|
| ir.Continuation elseContinuation = new ir.Continuation([]);
|
|
|
| ir.Constant makeBoolConstant(bool value) {
|
| - return new ir.Constant(new BoolConstantExpression(
|
| - value,
|
| - state.constantSystem.createBool(value)));
|
| + return new ir.Constant(
|
| + new BoolConstantExpression(value),
|
| + state.constantSystem.createBool(value));
|
| }
|
|
|
| ir.Constant trueConstant = makeBoolConstant(true);
|
| @@ -2055,10 +2062,10 @@ class JsIrBuilder extends IrBuilder {
|
| IrBuilder _makeInstance() => new JsIrBuilder._blank(program, jsState);
|
| JsIrBuilder._blank(this.program, this.jsState);
|
|
|
| - JsIrBuilder(this.program, ConstantSystem constantSystem,
|
| + JsIrBuilder(this.program, BackendConstantEnvironment constants,
|
| ExecutableElement currentElement)
|
| : jsState = new JsIrBuilderSharedState() {
|
| - _init(constantSystem, currentElement);
|
| + _init(constants, currentElement);
|
| }
|
|
|
| void enterInitializers() {
|
|
|