/// <summary> /// Returns a boolean value if we can determine whether the type is managed /// without looking at its fields and Unset otherwise. /// </summary> private static ThreeState IsManagedTypeHelper(NamedTypeSymbol type) { // To match dev10, we treat enums as their underlying types. if (type.IsEnumType()) { type = type.GetEnumUnderlyingType(); } // Short-circuit common cases. switch (type.SpecialType) { case SpecialType.System_Void: case SpecialType.System_Boolean: case SpecialType.System_Char: case SpecialType.System_SByte: case SpecialType.System_Byte: case SpecialType.System_Int16: case SpecialType.System_UInt16: case SpecialType.System_Int32: case SpecialType.System_UInt32: case SpecialType.System_Int64: case SpecialType.System_UInt64: case SpecialType.System_Decimal: case SpecialType.System_Single: case SpecialType.System_Double: case SpecialType.System_IntPtr: case SpecialType.System_UIntPtr: case SpecialType.System_TypedReference: case SpecialType.System_ArgIterator: case SpecialType.System_RuntimeArgumentHandle: return(ThreeState.False); case SpecialType.None: default: // CONSIDER: could provide cases for other common special types. break; // Proceed with additional checks. } if (type.AllTypeArgumentCount() > 0) { return(ThreeState.True); } switch (type.TypeKind) { case TypeKind.Enum: return(ThreeState.False); case TypeKind.Struct: return(ThreeState.Unknown); default: return(ThreeState.True); } }
/// <summary> /// Returns a boolean value if we can determine whether the type is managed /// without looking at its fields and Unset otherwise. /// </summary> private static ThreeState IsManagedTypeHelper(NamedTypeSymbol type) { // To match dev10, we treat enums as their underlying types. if (type.IsEnumType()) { type = type.GetEnumUnderlyingType(); } // Short-circuit common cases. switch (type.SpecialType) { case SpecialType.System_Void: case SpecialType.System_Boolean: case SpecialType.System_Char: case SpecialType.System_SByte: case SpecialType.System_Byte: case SpecialType.System_Int16: case SpecialType.System_UInt16: case SpecialType.System_Int32: case SpecialType.System_UInt32: case SpecialType.System_Int64: case SpecialType.System_UInt64: case SpecialType.System_Decimal: case SpecialType.System_Single: case SpecialType.System_Double: case SpecialType.System_IntPtr: case SpecialType.System_UIntPtr: case SpecialType.System_TypedReference: case SpecialType.System_ArgIterator: case SpecialType.System_RuntimeArgumentHandle: return ThreeState.False; case SpecialType.None: default: // CONSIDER: could provide cases for other common special types. break; // Proceed with additional checks. } if (type.AllTypeArgumentCount() > 0) { return ThreeState.True; } switch (type.TypeKind) { case TypeKind.Enum: return ThreeState.False; case TypeKind.Struct: return ThreeState.Unknown; default: return ThreeState.True; } }