Exemplo n.º 1
0
 public static bool IsReadOnly(this TypeAccessModifiers modifiers) => (modifiers & TypeAccessModifiers.Readable) != 0;
Exemplo n.º 2
0
        public static TypeAccessModifiers GetRequiredAccessModifiers(this ITypeSymbol source, ITypeSymbol destination, out TypeAccessModifiers destModifiers)
        {
            Debug.Assert(source != null && destination != null);

            var sourceExtended      = source as IExtendedTypeSymbol;
            var destinationExtended = destination as IExtendedTypeSymbol;

            var sourceModifiers = sourceExtended?.AccessModifiers ?? TypeAccessModifiers.None;

            destModifiers = destinationExtended?.AccessModifiers ?? TypeAccessModifiers.None;
            if (sourceModifiers == destModifiers)
            {
                return(TypeAccessModifiers.None);
            }

            if ((destModifiers & TypeAccessModifiers.Readable) != 0 && sourceModifiers == 0)
            {
                sourceModifiers = TypeAccessModifiers.Readable;
            }


            var requiredModifiers = sourceModifiers ^ destModifiers;

            return(requiredModifiers);
        }
Exemplo n.º 3
0
 public static bool IsNone(this TypeAccessModifiers modifiers) => modifiers == TypeAccessModifiers.None;
Exemplo n.º 4
0
 public ExtendedArrayTypeSymbol(TypeSymbolWithAnnotations arrayWithAnnotations, ArrayTypeSymbol underlyingArray, TypeAccessModifiers accessModifiers) : base(underlyingArray.ElementType, underlyingArray.BaseTypeNoUseSiteDiagnostics)
 {
     _underlyingArray = underlyingArray;
     _accessModifiers = accessModifiers;
 }
Exemplo n.º 5
0
        //public static bool IsRef(this TypeAccessModifiers modifiers) => (modifiers & TypeAccessModifiers.Ref) != 0;

        public static bool IsTransient(this TypeAccessModifiers modifiers) => (modifiers & TypeAccessModifiers.Transient) != 0;
Exemplo n.º 6
0
        public static TypeSymbol CreateExtendedTypeSymbol(CSharpSyntaxNode syntax, TypeSymbolWithAnnotations baseSymbol, TypeAccessModifiers accessModifiers)
        {
            if (baseSymbol.Kind == SymbolKind.NamedType)
            {
                return(new ExtendedNamedTypeSymbol(baseSymbol, accessModifiers));
            }

            if (baseSymbol.Kind == SymbolKind.ArrayType)
            {
                return(new ExtendedArrayTypeSymbol(baseSymbol, (ArrayTypeSymbol)baseSymbol.TypeSymbol, accessModifiers));
            }

            if (baseSymbol.Kind == SymbolKind.TypeParameter)
            {
                return(new ExtendedTypeParameterSymbol((TypeParameterSymbol)baseSymbol.TypeSymbol, accessModifiers));
            }

            throw new NotSupportedException($"The syntax `{syntax}` is not supported for extended type");
        }
Exemplo n.º 7
0
 public ExtendedNamedTypeSymbol(TypeSymbolWithAnnotations elementType, TypeAccessModifiers accessModifiers) : base((NamedTypeSymbol)elementType.TypeSymbol)
 {
     _elementType     = elementType;
     _accessModifiers = accessModifiers;
 }
Exemplo n.º 8
0
        internal override TypeSymbol MakeExtendedTypeSymbol(PEModuleSymbol moduleSymbol, TypeSymbol type, TypeAccessModifiers typeAccessModifiers)
        {
            switch (type.TypeKind)
            {
            case TypeKind.Array:
                return(new ExtendedArrayTypeSymbol(TypeSymbolWithAnnotations.Create(type), (ArrayTypeSymbol)type, typeAccessModifiers));

            case TypeKind.Class:
            case TypeKind.Interface:
            case TypeKind.Struct:
            case TypeKind.Enum:
                return(new ExtendedNamedTypeSymbol(TypeSymbolWithAnnotations.Create(type), typeAccessModifiers));

            case TypeKind.TypeParameter:
                return(new ExtendedTypeParameterSymbol((TypeParameterSymbol)type, typeAccessModifiers));

            case TypeKind.ConstLiteral:
            case TypeKind.Module:
            case TypeKind.Submission:
            case TypeKind.Pointer:
            default:
                throw ExceptionUtilities.UnexpectedValue(type.TypeKind);
            }
        }
Exemplo n.º 9
0
 public static bool IsRef(this TypeAccessModifiers modifiers) => (modifiers & TypeAccessModifiers.Ref) != 0;
Exemplo n.º 10
0
 protected TypeSymbol MakeExtendedTypeSymbol(TypeSymbol elementType, TypeAccessModifiers typeAccessModifieres)
 {
     return(_factory.MakeExtendedTypeSymbol(this.moduleSymbol, elementType, typeAccessModifieres));
 }
Exemplo n.º 11
0
 public ExtendedTypeParameterSymbol(TypeParameterSymbol underlyingTypeParameter, TypeAccessModifiers modifiers) : base(underlyingTypeParameter)
 {
     AccessModifiers = modifiers;
 }
Exemplo n.º 12
0
 internal abstract TypeSymbol MakeExtendedTypeSymbol(ModuleSymbol moduleSymbol, TypeSymbol type, TypeAccessModifiers typeAccessModifiers);