anchor.diff:    }
   }
   
  -class Types {
  +abstract class DartTypeVisitor<R, A> {
  +  R visitType(DartType type, A argument);
  +
  +  R visitVoidType(VoidType type, A argument) =>
  +      visitType(type, argument);
  +
  +  R visitTypeVariableType(TypeVariableType type, A argument) =>
  +      visitType(type, argument);
  +
  +  R visitFunctionType(FunctionType type, A argument) =>
  +      visitType(type, argument);
  +
  +  R visitMalformedType(MalformedType type, A argument) =>
  +      visitType(type, argument);
  +
  +  R visitStatementType(StatementType type, A argument) =>
  +      visitType(type, argument);
  +
  +  R visitGenericType(GenericType type, A argument) =>
  +      visitType(type, argument);
  +
  +  R visitInterfaceType(InterfaceType type, A argument) =>
  +      visitGenericType(type, argument);
  +
  +  R visitTypedefType(TypedefType type, A argument) =>
  +      visitGenericType(type, argument);
  +
  +  R visitDynamicType(DynamicType type, A argument) =>
  +      visitInterfaceType(type, argument);
  +}
  +
  +class SubtypeVisitor extends DartTypeVisitor<bool, DartType> {
     final Compiler compiler;
  -  // TODO(karlklose): should we have a class Void?
  -  final VoidType voidType;
     final DynamicType dynamicType;
   
  -  factory Types(Compiler compiler, ClassElement dynamicElement) {
  -    LibraryElement library = new LibraryElementX(new Script(null, null));
  -    VoidType voidType = new VoidType(new VoidElementX(library));
  -    DynamicType dynamicType = new DynamicType(dynamicElement);
  -    dynamicElement.rawType = dynamicElement.thisType = dynamicType;
  -    return new Types.internal(compiler, voidType, dynamicType);
  -  }
  -
  -  Types.internal(this.compiler, this.voidType, this.dynamicType);
  -
  -  /** Returns true if t is a subtype of s */
  +  SubtypeVisitor(Compiler this.compiler, DynamicType this.dynamicType);
  +
     bool isSubtype(DartType t, DartType s) {
       if (identical(t, s) ||
           identical(t, dynamicType) ||
  
positive.code:   }
  
    TypedefType asRaw() => super.asRaw();
  }
  
  /**
  
negative.code:   bool get isRaw => true;
  
    DartType asRaw() => this;
  
    accept(DartTypeVisitor visitor, var argument);
  }
  
  /**
  