| // 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'; |
| } |
| } |