anchor.diff:  
     // -- query --
   
  -  TypeMask fromBaseTypeToTypeMask(BaseType baseType) {
  -    if (!baseType.isClass()) return null;
  +  TypeMask fromClassBaseTypeToTypeMask(ClassBaseType baseType) {
       ClassBaseType classBaseType = baseType;
       ClassElement cls = classBaseType.element;
       return new TypeMask.nonNullExact(cls.rawType);
     }
   
  +  /**
  +   * Returns the [TypeMask] representation of [concreteType]. Returns [:null:]
  +   * if and only if [:concreteType.isUnknown():].
  +   */
     TypeMask fromConcreteToTypeMask(ConcreteType concreteType) {
       if (concreteType == null) return null;
       TypeMask typeMask;
  +    bool nullable = false;
       for (BaseType baseType in concreteType.baseTypes) {
  -      TypeMask current = fromBaseTypeToTypeMask(baseType);
  -      typeMask = typeMask == null ? current : typeMask.union(current, compiler);
  -    }
  -    return typeMask;
  +      if (baseType.isUnknown()) {
  +        return null;
  +      } else if (baseType.isNull()) {
  +        nullable = true;
  +      } else {
  +        TypeMask current = fromClassBaseTypeToTypeMask(baseType);
  +        typeMask = typeMask == null
  +            ? current
  +            : typeMask.union(current, compiler);
  +      }
  +    }
  +    return nullable
  +        ? typeMask == null ? null : typeMask.nullable()
  +        : typeMask;
     }
   
     /**
  
positive.code:    * Get the inferred concrete return type of [element].
     */
    TypeMask getReturnTypeOfElement(Element element) {
      return null;
    }
  
    // --- analysis ---
  
negative.code:         compiler.listClass.lookupConstructor(
              new Selector.callConstructor(const SourceString(''),
                                           compiler.listClass.getLibrary()));
      nullTypeMask = new TypeMask.exact(compiler.nullClass.computeType(compiler));
    }
  
    /**
  