blob: 737be5e3a513e0e65e71bfbdddc8a275208e2a29 [file] [log] [blame]
// Copyright (c) 2014, 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.
part of types;
class ValueTypeMask extends ForwardingTypeMask {
final TypeMask forwardTo;
final value;
ValueTypeMask(this.forwardTo, this.value);
TypeMask nullable() {
return isNullable
? this
: new ValueTypeMask(forwardTo.nullable(), value);
}
TypeMask nonNullable() {
return isNullable
? new ValueTypeMask(forwardTo.nonNullable(), value)
: this;
}
bool get isValue => true;
bool equalsDisregardNull(other) {
if (other is! ValueTypeMask) return false;
return super.equalsDisregardNull(other) && value == other.value;
}
TypeMask intersection(TypeMask other, ClassWorld classWorld) {
TypeMask forwardIntersection = forwardTo.intersection(other, classWorld);
if (forwardIntersection.isEmpty) return forwardIntersection;
return forwardIntersection.isNullable
? nullable()
: nonNullable();
}
bool operator==(other) => super == other;
int get hashCode {
return computeHashCode(value, isNullable, forwardTo);
}
String toString() {
return 'Value mask: [$value] type: $forwardTo';
}
}