Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(252)

Unified Diff: sdk/lib/_internal/compiler/implementation/constants/values.dart

Issue 694353007: Move dart2js from sdk/lib/_internal/compiler to pkg/compiler (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/compiler/implementation/constants/values.dart
diff --git a/sdk/lib/_internal/compiler/implementation/constants/values.dart b/sdk/lib/_internal/compiler/implementation/constants/values.dart
deleted file mode 100644
index 125d668bc4a6b5327a412d5a4fcdf63a454bc124..0000000000000000000000000000000000000000
--- a/sdk/lib/_internal/compiler/implementation/constants/values.dart
+++ /dev/null
@@ -1,834 +0,0 @@
-// Copyright (c) 2012, 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 dart2js.constants.values;
-
-import '../dart_types.dart';
-import '../dart2jslib.dart'
- show assertDebugMode,
- Compiler;
-import '../elements/elements.dart'
- show ClassElement,
- Element,
- FunctionElement,
- PrefixElement;
-import '../tree/tree.dart' hide unparse;
-import '../types/types.dart' as ti show TypeMask;
-import '../util/util.dart' show SMI_MASK;
-
-abstract class ConstantValueVisitor<R> {
- const ConstantValueVisitor();
-
- R visitFunction(FunctionConstantValue constant);
- R visitNull(NullConstantValue constant);
- R visitInt(IntConstantValue constant);
- R visitDouble(DoubleConstantValue constant);
- R visitTrue(TrueConstantValue constant);
- R visitFalse(FalseConstantValue constant);
- R visitString(StringConstantValue constant);
- R visitList(ListConstantValue constant);
- R visitMap(MapConstantValue constant);
- R visitConstructed(ConstructedConstantValue constant);
- R visitType(TypeConstantValue constant);
- R visitInterceptor(InterceptorConstantValue constant);
- R visitDummy(DummyConstantValue constant);
- R visitDeferred(DeferredConstantValue constant);
-}
-
-abstract class ConstantValue {
- const ConstantValue();
-
- bool get isNull => false;
- bool get isBool => false;
- bool get isTrue => false;
- bool get isFalse => false;
- bool get isInt => false;
- bool get isDouble => false;
- bool get isNum => false;
- bool get isString => false;
- bool get isList => false;
- bool get isMap => false;
- bool get isConstructedObject => false;
- bool get isFunction => false;
- /** Returns true if the constant is null, a bool, a number or a string. */
- bool get isPrimitive => false;
- /** Returns true if the constant is a list, a map or a constructed object. */
- bool get isObject => false;
- bool get isType => false;
- bool get isInterceptor => false;
- bool get isDummy => false;
-
- bool get isNaN => false;
- bool get isMinusZero => false;
- bool get isZero => false;
- bool get isOne => false;
-
- // TODO(johnniwinther): Replace with a 'type' getter.
- DartType computeType(Compiler compiler);
-
- ti.TypeMask computeMask(Compiler compiler);
-
- List<ConstantValue> getDependencies();
-
- accept(ConstantValueVisitor visitor);
-
- /// The value of this constant in Dart syntax, if possible.
- ///
- /// For [ConstructedConstantValue]s there is no way to create a valid const
- /// expression from the value so the unparse of these is best effort.
- ///
- /// For the synthetic constants, [DeferredConstantValue],
- /// [DummyConstantValue], [InterceptorConstantValue] the unparse is
- /// descriptive only.
- String unparse();
-
- /// Returns a structured representation of this constant suited for debugging.
- String toStructuredString();
-
- String toString() {
- assertDebugMode("Use Constant.unparse() or Constant.toStructuredString() "
- "instead of Constant.toString().");
- return toStructuredString();
- }
-}
-
-class FunctionConstantValue extends ConstantValue {
- Element element;
-
- FunctionConstantValue(this.element);
-
- bool get isFunction => true;
-
- bool operator ==(var other) {
- if (other is !FunctionConstantValue) return false;
- return identical(other.element, element);
- }
-
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
-
- DartString toDartString() {
- return new DartString.literal(element.name);
- }
-
- // TODO(johnniwinther): remove computeType.
- DartType computeType(Compiler compiler) => element.computeType(compiler);
-
- ti.TypeMask computeMask(Compiler compiler) {
- return compiler.typesTask.functionType;
- }
-
- int get hashCode => (17 * element.hashCode) & 0x7fffffff;
-
- accept(ConstantValueVisitor visitor) => visitor.visitFunction(this);
-
- String unparse() {
- if (element.isStatic) {
- return '${element.enclosingClass.name}.${element.name}';
- } else {
- return '${element.name}';
- }
- }
-
- String toStructuredString() {
- return 'FunctionConstant(${unparse()})';
- }
-}
-
-abstract class PrimitiveConstantValue extends ConstantValue {
- get primitiveValue;
-
- const PrimitiveConstantValue();
-
- bool get isPrimitive => true;
-
- bool operator ==(var other) {
- if (other is !PrimitiveConstantValue) return false;
- PrimitiveConstantValue otherPrimitive = other;
- // We use == instead of 'identical' so that DartStrings compare correctly.
- return primitiveValue == otherPrimitive.primitiveValue;
- }
-
- int get hashCode => throw new UnsupportedError('PrimitiveConstant.hashCode');
-
- // Primitive constants don't have dependencies.
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
-
- DartString toDartString();
-
- /// This value in Dart syntax.
- String unparse() => primitiveValue.toString();
-}
-
-class NullConstantValue extends PrimitiveConstantValue {
- /** The value a Dart null is compiled to in JavaScript. */
- static const String JsNull = "null";
-
- factory NullConstantValue() => const NullConstantValue._internal();
-
- const NullConstantValue._internal();
-
- bool get isNull => true;
-
- get primitiveValue => null;
-
- DartType computeType(Compiler compiler) {
- return compiler.nullClass.computeType(compiler);
- }
-
- ti.TypeMask computeMask(Compiler compiler) {
- return compiler.typesTask.nullType;
- }
-
- // The magic constant has no meaning. It is just a random value.
- int get hashCode => 785965825;
-
- DartString toDartString() => const LiteralDartString("null");
-
- accept(ConstantValueVisitor visitor) => visitor.visitNull(this);
-
- String toStructuredString() => 'NullConstant';
-}
-
-abstract class NumConstantValue extends PrimitiveConstantValue {
- const NumConstantValue();
-
- num get primitiveValue;
-
- bool get isNum => true;
-}
-
-class IntConstantValue extends NumConstantValue {
- final int primitiveValue;
-
- factory IntConstantValue(int value) {
- switch (value) {
- case 0: return const IntConstantValue._internal(0);
- case 1: return const IntConstantValue._internal(1);
- case 2: return const IntConstantValue._internal(2);
- case 3: return const IntConstantValue._internal(3);
- case 4: return const IntConstantValue._internal(4);
- case 5: return const IntConstantValue._internal(5);
- case 6: return const IntConstantValue._internal(6);
- case 7: return const IntConstantValue._internal(7);
- case 8: return const IntConstantValue._internal(8);
- case 9: return const IntConstantValue._internal(9);
- case 10: return const IntConstantValue._internal(10);
- case -1: return const IntConstantValue._internal(-1);
- case -2: return const IntConstantValue._internal(-2);
- default: return new IntConstantValue._internal(value);
- }
- }
-
- const IntConstantValue._internal(this.primitiveValue);
-
- bool get isInt => true;
-
- bool isUInt31() => primitiveValue >= 0 && primitiveValue < (1 << 31);
-
- bool isUInt32() => primitiveValue >= 0 && primitiveValue < (1 << 32);
-
- bool isPositive() => primitiveValue >= 0;
-
- bool get isZero => primitiveValue == 0;
-
- bool get isOne => primitiveValue == 1;
-
- DartType computeType(Compiler compiler) {
- return compiler.intClass.rawType;
- }
-
- ti.TypeMask computeMask(Compiler compiler) {
- if (isUInt31()) return compiler.typesTask.uint31Type;
- if (isUInt32()) return compiler.typesTask.uint32Type;
- if (isPositive()) return compiler.typesTask.positiveIntType;
- return compiler.typesTask.intType;
- }
-
- // We have to override the equality operator so that ints and doubles are
- // treated as separate constants.
- // The is [:!IntConstant:] check at the beginning of the function makes sure
- // that we compare only equal to integer constants.
- bool operator ==(var other) {
- if (other is !IntConstantValue) return false;
- IntConstantValue otherInt = other;
- return primitiveValue == otherInt.primitiveValue;
- }
-
- int get hashCode => primitiveValue & SMI_MASK;
-
- DartString toDartString() {
- return new DartString.literal(primitiveValue.toString());
- }
-
- accept(ConstantValueVisitor visitor) => visitor.visitInt(this);
-
- String toStructuredString() => 'IntConstant(${unparse()})';
-}
-
-class DoubleConstantValue extends NumConstantValue {
- final double primitiveValue;
-
- factory DoubleConstantValue(double value) {
- if (value.isNaN) {
- return const DoubleConstantValue._internal(double.NAN);
- } else if (value == double.INFINITY) {
- return const DoubleConstantValue._internal(double.INFINITY);
- } else if (value == -double.INFINITY) {
- return const DoubleConstantValue._internal(-double.INFINITY);
- } else if (value == 0.0 && !value.isNegative) {
- return const DoubleConstantValue._internal(0.0);
- } else if (value == 1.0) {
- return const DoubleConstantValue._internal(1.0);
- } else {
- return new DoubleConstantValue._internal(value);
- }
- }
-
- const DoubleConstantValue._internal(this.primitiveValue);
-
- bool get isDouble => true;
-
- bool get isNaN => primitiveValue.isNaN;
-
- // We need to check for the negative sign since -0.0 == 0.0.
- bool get isMinusZero => primitiveValue == 0.0 && primitiveValue.isNegative;
-
- bool get isZero => primitiveValue == 0.0;
-
- bool get isOne => primitiveValue == 1.0;
-
- DartType computeType(Compiler compiler) {
- return compiler.doubleClass.rawType;
- }
-
- ti.TypeMask computeMask(Compiler compiler) {
- // We have to distinguish -0.0 from 0, but for all practical purposes
- // -0.0 is an integer.
- // TODO(17235): this kind of special casing should only happen in the
- // backend.
- if (isMinusZero && compiler.backend.constantSystem.isInt(this)) {
- return compiler.typesTask.uint31Type;
- }
- assert(!compiler.backend.constantSystem.isInt(this));
- return compiler.typesTask.doubleType;
- }
-
- bool operator ==(var other) {
- if (other is !DoubleConstantValue) return false;
- DoubleConstantValue otherDouble = other;
- double otherValue = otherDouble.primitiveValue;
- if (primitiveValue == 0.0 && otherValue == 0.0) {
- return primitiveValue.isNegative == otherValue.isNegative;
- } else if (primitiveValue.isNaN) {
- return otherValue.isNaN;
- } else {
- return primitiveValue == otherValue;
- }
- }
-
- int get hashCode => primitiveValue.hashCode;
-
- DartString toDartString() {
- return new DartString.literal(primitiveValue.toString());
- }
-
- accept(ConstantValueVisitor visitor) => visitor.visitDouble(this);
-
- String toStructuredString() => 'DoubleConstant(${unparse()})';
-}
-
-abstract class BoolConstantValue extends PrimitiveConstantValue {
- factory BoolConstantValue(value) {
- return value ? new TrueConstantValue() : new FalseConstantValue();
- }
-
- const BoolConstantValue._internal();
-
- bool get isBool => true;
-
- DartType computeType(Compiler compiler) {
- return compiler.boolClass.rawType;
- }
-
- ti.TypeMask computeMask(Compiler compiler) {
- return compiler.typesTask.boolType;
- }
-
- BoolConstantValue negate();
-
- String toStructuredString() => 'BoolConstant(${unparse()})';
-}
-
-class TrueConstantValue extends BoolConstantValue {
- factory TrueConstantValue() => const TrueConstantValue._internal();
-
- const TrueConstantValue._internal() : super._internal();
-
- bool get isTrue => true;
-
- bool get primitiveValue => true;
-
- FalseConstantValue negate() => new FalseConstantValue();
-
- bool operator ==(var other) => identical(this, other);
-
- // The magic constant is just a random value. It does not have any
- // significance.
- int get hashCode => 499;
-
- DartString toDartString() => const LiteralDartString("true");
-
- accept(ConstantValueVisitor visitor) => visitor.visitTrue(this);
-}
-
-class FalseConstantValue extends BoolConstantValue {
- factory FalseConstantValue() => const FalseConstantValue._internal();
-
- const FalseConstantValue._internal() : super._internal();
-
- bool get isFalse => true;
-
- bool get primitiveValue => false;
-
- TrueConstantValue negate() => new TrueConstantValue();
-
- bool operator ==(var other) => identical(this, other);
-
- // The magic constant is just a random value. It does not have any
- // significance.
- int get hashCode => 536555975;
-
- DartString toDartString() => const LiteralDartString("false");
-
- accept(ConstantValueVisitor visitor) => visitor.visitFalse(this);
-}
-
-class StringConstantValue extends PrimitiveConstantValue {
- final DartString primitiveValue;
-
- final int hashCode;
-
- // TODO(floitsch): cache StringConstants.
- // TODO(floitsch): compute hashcode without calling toString() on the
- // DartString.
- StringConstantValue(DartString value)
- : this.primitiveValue = value,
- this.hashCode = value.slowToString().hashCode;
-
- bool get isString => true;
-
- DartType computeType(Compiler compiler) {
- return compiler.stringClass.rawType;
- }
-
- ti.TypeMask computeMask(Compiler compiler) {
- return compiler.typesTask.stringType;
- }
-
- bool operator ==(var other) {
- if (other is !StringConstantValue) return false;
- StringConstantValue otherString = other;
- return hashCode == otherString.hashCode &&
- primitiveValue == otherString.primitiveValue;
- }
-
- DartString toDartString() => primitiveValue;
-
- int get length => primitiveValue.length;
-
- accept(ConstantValueVisitor visitor) => visitor.visitString(this);
-
- // TODO(johnniwinther): Ensure correct escaping.
- String unparse() => '"${primitiveValue.slowToString()}"';
-
- String toStructuredString() => 'StringConstant(${unparse()})';
-}
-
-abstract class ObjectConstantValue extends ConstantValue {
- final InterfaceType type;
-
- ObjectConstantValue(this.type);
-
- bool get isObject => true;
-
- DartType computeType(Compiler compiler) => type;
-
- void _unparseTypeArguments(StringBuffer sb) {
- if (!type.treatAsRaw) {
- sb.write('<');
- sb.write(type.typeArguments.join(', '));
- sb.write('>');
- }
- }
-}
-
-class TypeConstantValue extends ObjectConstantValue {
- /// The user type that this constant represents.
- final DartType representedType;
-
- TypeConstantValue(this.representedType, InterfaceType type) : super(type);
-
- bool get isType => true;
-
- bool operator ==(other) {
- return other is TypeConstantValue &&
- representedType == other.representedType;
- }
-
- ti.TypeMask computeMask(Compiler compiler) {
- return compiler.typesTask.typeType;
- }
-
- int get hashCode => representedType.hashCode * 13;
-
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
-
- accept(ConstantValueVisitor visitor) => visitor.visitType(this);
-
- String unparse() => '$representedType';
-
- String toStructuredString() => 'TypeConstant(${representedType})';
-}
-
-class ListConstantValue extends ObjectConstantValue {
- final List<ConstantValue> entries;
- final int hashCode;
-
- ListConstantValue(InterfaceType type, List<ConstantValue> entries)
- : this.entries = entries,
- hashCode = _computeHash(type, entries),
- super(type);
-
- bool get isList => true;
-
- static int _computeHash(DartType type, List<ConstantValue> entries) {
- // TODO(floitsch): create a better hash.
- int hash = 7;
- for (ConstantValue input in entries) {
- hash ^= input.hashCode;
- }
- hash ^= type.hashCode;
- return hash;
- }
-
- bool operator ==(var other) {
- if (other is !ListConstantValue) return false;
- ListConstantValue otherList = other;
- if (hashCode != otherList.hashCode) return false;
- if (type != otherList.type) return false;
- if (entries.length != otherList.entries.length) return false;
- for (int i = 0; i < entries.length; i++) {
- if (entries[i] != otherList.entries[i]) return false;
- }
- return true;
- }
-
- List<ConstantValue> getDependencies() => entries;
-
- int get length => entries.length;
-
- ti.TypeMask computeMask(Compiler compiler) {
- return compiler.typesTask.constListType;
- }
-
- accept(ConstantValueVisitor visitor) => visitor.visitList(this);
-
- String unparse() {
- StringBuffer sb = new StringBuffer();
- _unparseTypeArguments(sb);
- sb.write('[');
- for (int i = 0 ; i < length ; i++) {
- if (i > 0) sb.write(',');
- sb.write(entries[i].unparse());
- }
- sb.write(']');
- return sb.toString();
- }
-
- String toStructuredString() {
- StringBuffer sb = new StringBuffer();
- sb.write('ListConstant([');
- for (int i = 0 ; i < length ; i++) {
- if (i > 0) sb.write(',');
- sb.write(entries[i].toStructuredString());
- }
- sb.write('])');
- return sb.toString();
- }
-}
-
-class MapConstantValue extends ObjectConstantValue {
- final List<ConstantValue> keys;
- final List<ConstantValue> values;
- final int hashCode;
-
- MapConstantValue(InterfaceType type,
- List<ConstantValue> keys,
- List<ConstantValue> values)
- : this.keys = keys,
- this.values = values,
- this.hashCode = computeHash(type, keys, values),
- super(type) {
- assert(keys.length == values.length);
- }
-
- bool get isMap => true;
-
- static int computeHash(DartType type,
- List<ConstantValue> keys,
- List<ConstantValue> values) {
- // TODO(floitsch): create a better hash.
- int hash = 0;
- for (ConstantValue key in keys) {
- hash ^= key.hashCode;
- }
- for (ConstantValue value in values) {
- hash ^= value.hashCode;
- }
- hash ^= type.hashCode;
- return hash;
- }
-
- ti.TypeMask computeMask(Compiler compiler) {
- return compiler.typesTask.constMapType;
- }
-
- bool operator ==(var other) {
- if (other is !MapConstantValue) return false;
- MapConstantValue otherMap = other;
- if (hashCode != otherMap.hashCode) return false;
- if (type != other.type) return false;
- if (length != other.length) return false;
- for (int i = 0; i < length; i++) {
- if (keys[i] != otherMap.keys[i]) return false;
- if (values[i] != otherMap.values[i]) return false;
- }
- return true;
- }
-
- List<ConstantValue> getDependencies() {
- List<ConstantValue> result = <ConstantValue>[];
- result.addAll(keys);
- result.addAll(values);
- return result;
- }
-
- int get length => keys.length;
-
- accept(ConstantValueVisitor visitor) => visitor.visitMap(this);
-
- String unparse() {
- StringBuffer sb = new StringBuffer();
- _unparseTypeArguments(sb);
- sb.write('{');
- for (int i = 0 ; i < length ; i++) {
- if (i > 0) sb.write(',');
- sb.write(keys[i].unparse());
- sb.write(':');
- sb.write(values[i].unparse());
- }
- sb.write('}');
- return sb.toString();
- }
-
- String toStructuredString() {
- StringBuffer sb = new StringBuffer();
- sb.write('MapConstant({');
- for (int i = 0; i < length; i++) {
- if (i > 0) sb.write(',');
- sb.write(keys[i].toStructuredString());
- sb.write(':');
- sb.write(values[i].toStructuredString());
- }
- sb.write('})');
- return sb.toString();
- }
-}
-
-class InterceptorConstantValue extends ConstantValue {
- /// The type for which this interceptor holds the methods. The constant
- /// is a dispatch table for this type.
- final DartType dispatchedType;
-
- InterceptorConstantValue(this.dispatchedType);
-
- bool get isInterceptor => true;
-
- bool operator ==(other) {
- return other is InterceptorConstantValue
- && dispatchedType == other.dispatchedType;
- }
-
- int get hashCode => dispatchedType.hashCode * 43;
-
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
-
- accept(ConstantValueVisitor visitor) => visitor.visitInterceptor(this);
-
- DartType computeType(Compiler compiler) => const DynamicType();
-
- ti.TypeMask computeMask(Compiler compiler) {
- return compiler.typesTask.nonNullType;
- }
-
- String unparse() {
- return 'interceptor($dispatchedType)';
- }
-
- String toStructuredString() {
- return 'InterceptorConstant(${dispatchedType.getStringAsDeclared("o")})';
- }
-}
-
-class DummyConstantValue extends ConstantValue {
- final ti.TypeMask typeMask;
-
- DummyConstantValue(this.typeMask);
-
- bool get isDummy => true;
-
- bool operator ==(other) {
- return other is DummyConstantValue
- && typeMask == other.typeMask;
- }
-
- get hashCode => typeMask.hashCode;
-
- List<ConstantValue> getDependencies() => const <ConstantValue>[];
-
- accept(ConstantValueVisitor visitor) => visitor.visitDummy(this);
-
- DartType computeType(Compiler compiler) => const DynamicType();
-
- ti.TypeMask computeMask(Compiler compiler) => typeMask;
-
- String unparse() => 'dummy($typeMask)';
-
- String toStructuredString() => 'DummyConstant($typeMask)';
-}
-
-class ConstructedConstantValue extends ObjectConstantValue {
- final List<ConstantValue> fields;
- final int hashCode;
-
- ConstructedConstantValue(InterfaceType type, List<ConstantValue> fields)
- : this.fields = fields,
- hashCode = computeHash(type, fields),
- super(type) {
- assert(type != null);
- }
-
- bool get isConstructedObject => true;
-
- static int computeHash(DartType type, List<ConstantValue> fields) {
- // TODO(floitsch): create a better hash.
- int hash = 0;
- for (ConstantValue field in fields) {
- hash ^= field.hashCode;
- }
- hash ^= type.hashCode;
- return hash;
- }
-
- bool operator ==(var otherVar) {
- if (otherVar is !ConstructedConstantValue) return false;
- ConstructedConstantValue other = otherVar;
- if (hashCode != other.hashCode) return false;
- if (type != other.type) return false;
- if (fields.length != other.fields.length) return false;
- for (int i = 0; i < fields.length; i++) {
- if (fields[i] != other.fields[i]) return false;
- }
- return true;
- }
-
- List<ConstantValue> getDependencies() => fields;
-
- ti.TypeMask computeMask(Compiler compiler) {
- if (compiler.backend.isInterceptorClass(type.element)) {
- return compiler.typesTask.nonNullType;
- }
- return new ti.TypeMask.nonNullExact(type.element, compiler.world);
- }
-
- accept(ConstantValueVisitor visitor) => visitor.visitConstructed(this);
-
- Map<Element, ConstantValue> get fieldElements {
- // TODO(ahe): Refactor constant system to store this information directly.
- ClassElement classElement = type.element;
- int count = 0;
- Map<Element, ConstantValue> result = new Map<Element, ConstantValue>();
- classElement.implementation.forEachInstanceField((holder, field) {
- result[field] = fields[count++];
- }, includeSuperAndInjectedMembers: true);
- return result;
- }
-
- String unparse() {
- StringBuffer sb = new StringBuffer();
- sb.write(type.name);
- _unparseTypeArguments(sb);
- sb.write('(');
- int i = 0;
- fieldElements.forEach((Element field, ConstantValue value) {
- if (i > 0) sb.write(',');
- sb.write(field.name);
- sb.write('=');
- sb.write(value.unparse());
- i++;
- });
- sb.write(')');
- return sb.toString();
- }
-
- String toStructuredString() {
- StringBuffer sb = new StringBuffer();
- sb.write('ConstructedConstant(');
- sb.write(type);
- sb.write('(');
- int i = 0;
- fieldElements.forEach((Element field, ConstantValue value) {
- if (i > 0) sb.write(',');
- sb.write(field.name);
- sb.write('=');
- sb.write(value.toStructuredString());
- i++;
- });
- sb.write('))');
- return sb.toString();
- }
-}
-
-/// A reference to a constant in another output unit.
-/// Used for referring to deferred constants.
-class DeferredConstantValue extends ConstantValue {
- DeferredConstantValue(this.referenced, this.prefix);
-
- final ConstantValue referenced;
- final PrefixElement prefix;
-
- bool get isReference => true;
-
- bool operator ==(other) {
- return other is DeferredConstantValue
- && referenced == other.referenced
- && prefix == other.prefix;
- }
-
- get hashCode => (referenced.hashCode * 17 + prefix.hashCode) & 0x3fffffff;
-
- List<ConstantValue> getDependencies() => <ConstantValue>[referenced];
-
- accept(ConstantValueVisitor visitor) => visitor.visitDeferred(this);
-
- DartType computeType(Compiler compiler) => referenced.computeType(compiler);
-
- ti.TypeMask computeMask(Compiler compiler) {
- return referenced.computeMask(compiler);
- }
-
- String unparse() => 'deferred(${referenced.unparse()})';
-
- String toStructuredString() => 'DeferredConstant($referenced)';
-}

Powered by Google App Engine
This is Rietveld 408576698