| // Copyright (c) 2013, 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; |
| |
| /** |
| * A type mask that wraps an other one, and delecate all its |
| * implementation methods to it. |
| */ |
| abstract class ForwardingTypeMask implements TypeMask { |
| |
| TypeMask get forwardTo; |
| |
| ForwardingTypeMask(); |
| |
| bool get isEmpty => forwardTo.isEmpty; |
| bool get isNullable => forwardTo.isNullable; |
| bool get isExact => forwardTo.isExact; |
| |
| bool get isUnion => false; |
| bool get isContainer => false; |
| bool get isForwarding => true; |
| |
| bool isInMask(TypeMask other, Compiler compiler) { |
| return forwardTo.isInMask(other, compiler); |
| } |
| |
| bool containsMask(TypeMask other, Compiler compiler) { |
| return forwardTo.containsMask(other, compiler); |
| } |
| |
| bool containsOnlyInt(Compiler compiler) { |
| return forwardTo.containsOnlyInt(compiler); |
| } |
| |
| bool containsOnlyDouble(Compiler compiler) { |
| return forwardTo.containsOnlyDouble(compiler); |
| } |
| |
| bool containsOnlyNum(Compiler compiler) { |
| return forwardTo.containsOnlyNum(compiler); |
| } |
| |
| bool containsOnlyBool(Compiler compiler) { |
| return forwardTo.containsOnlyBool(compiler); |
| } |
| |
| bool containsOnlyString(Compiler compiler) { |
| return forwardTo.containsOnlyString(compiler); |
| } |
| |
| bool containsOnly(ClassElement element) { |
| return forwardTo.containsOnly(element); |
| } |
| |
| bool satisfies(ClassElement cls, Compiler compiler) { |
| return forwardTo.satisfies(cls, compiler); |
| } |
| |
| bool contains(ClassElement type, Compiler compiler) { |
| return forwardTo.contains(type, compiler); |
| } |
| |
| bool containsAll(Compiler compiler) { |
| return forwardTo.containsAll(compiler); |
| } |
| |
| ClassElement singleClass(Compiler compiler) { |
| return forwardTo.singleClass(compiler); |
| } |
| |
| TypeMask union(other, Compiler compiler) { |
| if (this == other) { |
| return this; |
| } else if (equalsDisregardNull(other)) { |
| return other.isNullable ? other : this; |
| } else if (other.isEmpty) { |
| return other.isNullable ? this.nullable() : this; |
| } |
| return forwardTo.union(other, compiler); |
| } |
| |
| TypeMask intersection(TypeMask other, Compiler compiler) { |
| return forwardTo.intersection(other, compiler); |
| } |
| |
| bool needsNoSuchMethodHandling(Selector selector, Compiler compiler) { |
| return forwardTo.needsNoSuchMethodHandling(selector, compiler); |
| } |
| |
| bool canHit(Element element, Selector selector, Compiler compiler) { |
| return forwardTo.canHit(element, selector, compiler); |
| } |
| |
| Element locateSingleElement(Selector selector, Compiler compiler) { |
| return forwardTo.locateSingleElement(selector, compiler); |
| } |
| |
| TypeMask simplify(Compiler compiler) => forwardTo.simplify(compiler); |
| |
| bool equalsDisregardNull(other); |
| } |