internal override TypeSymbol SetUnknownNullabilityForReferenceTypes() { TypeSymbolWithAnnotations oldPointedAtType = PointedAtType; TypeSymbolWithAnnotations newPointedAtType = oldPointedAtType.SetUnknownNullabilityForReferenceTypes(); if (oldPointedAtType.IsSameAs(newPointedAtType)) { return(this); } else { return(new PointerTypeSymbol(newPointedAtType)); } }
internal override TypeSymbol SetUnknownNullabilityForReferenceTypes() { TypeSymbolWithAnnotations oldElementType = ElementType; TypeSymbolWithAnnotations newElementType = oldElementType.SetUnknownNullabilityForReferenceTypes(); if (oldElementType.IsSameAs(newElementType)) { return(this); } else { return(IsSZArray ? ArrayTypeSymbol.CreateSZArray(newElementType, _baseType) : ArrayTypeSymbol.CreateMDArray(newElementType, Rank, Sizes, LowerBounds, _baseType)); } }
private ArrayTypeSymbol SubstituteArrayType(ArrayTypeSymbol t) { var oldElement = t.ElementType; TypeSymbolWithAnnotations element = oldElement.SubstituteTypeWithTupleUnification(this); if (element.IsSameAs(oldElement)) { return(t); } if (t.IsSZArray) { ImmutableArray <NamedTypeSymbol> interfaces = t.InterfacesNoUseSiteDiagnostics(); Debug.Assert(0 <= interfaces.Length && interfaces.Length <= 2); if (interfaces.Length == 1) { Debug.Assert(interfaces[0] is NamedTypeSymbol); // IList<T> interfaces = ImmutableArray.Create <NamedTypeSymbol>(SubstituteNamedType(interfaces[0])); } else if (interfaces.Length == 2) { Debug.Assert(interfaces[0] is NamedTypeSymbol); // IList<T> interfaces = ImmutableArray.Create <NamedTypeSymbol>(SubstituteNamedType(interfaces[0]), SubstituteNamedType(interfaces[1])); } else if (interfaces.Length != 0) { throw ExceptionUtilities.Unreachable; } return(ArrayTypeSymbol.CreateSZArray( element, t.BaseTypeNoUseSiteDiagnostics, interfaces)); } return(ArrayTypeSymbol.CreateMDArray( element, t.Rank, t.Sizes, t.LowerBounds, t.BaseTypeNoUseSiteDiagnostics)); }
internal override bool ApplyNullableTransforms(ImmutableArray <bool> transforms, INonNullTypesContext nonNullTypesContext, ref int position, out TypeSymbol result) { TypeSymbolWithAnnotations oldPointedAtType = PointedAtType; TypeSymbolWithAnnotations newPointedAtType; if (!oldPointedAtType.ApplyNullableTransforms(transforms, nonNullTypesContext, ref position, out newPointedAtType)) { result = this; return(false); } if (oldPointedAtType.IsSameAs(newPointedAtType)) { result = this; } else { result = new PointerTypeSymbol(newPointedAtType); } return(true); }
internal override bool ApplyNullableTransforms(ImmutableArray <bool> transforms, INonNullTypesContext nonNullTypesContext, ref int position, out TypeSymbol result) { TypeSymbolWithAnnotations oldElementType = ElementType; TypeSymbolWithAnnotations newElementType; if (!oldElementType.ApplyNullableTransforms(transforms, nonNullTypesContext, ref position, out newElementType)) { result = this; return(false); } if (oldElementType.IsSameAs(newElementType)) { result = this; } else { result = IsSZArray ? ArrayTypeSymbol.CreateSZArray(newElementType, _baseType) : ArrayTypeSymbol.CreateMDArray(newElementType, Rank, Sizes, LowerBounds, _baseType); } return(true); }