internal override NamedTypeSymbol GetDeclaredSpecialType(SpecialType type) { #if DEBUG foreach (var module in this.Modules) { Debug.Assert(module.GetReferencedAssemblies().Length == 0); } #endif if (_lazySpecialTypes == null) { Interlocked.CompareExchange( ref _lazySpecialTypes, new NamedTypeSymbol[(int)SpecialType.Count + 1], null ); } if ((object)_lazySpecialTypes[(int)type] == null) { MetadataTypeName emittedFullName = MetadataTypeName.FromFullName( SpecialTypes.GetMetadataName(type), useCLSCompliantNameArityEncoding: true ); NamedTypeSymbol corType = new MissingMetadataTypeSymbol.TopLevel( this.moduleSymbol, ref emittedFullName, type ); Interlocked.CompareExchange(ref _lazySpecialTypes[(int)type], corType, null); } return(_lazySpecialTypes[(int)type]); }
public void IntegrityTest() { for (int i = 1; i <= (int)SpecialType.Count; i++) { string name = SpecialTypes.GetMetadataName((SpecialType)i); Assert.Equal((SpecialType)i, SpecialTypes.GetTypeFromMetadataName(name)); } for (int i = 0; i <= (int)SpecialType.Count; i++) { Cci.PrimitiveTypeCode code = SpecialTypes.GetTypeCode((SpecialType)i); if (code != Cci.PrimitiveTypeCode.NotPrimitive) { Assert.Equal((SpecialType)i, SpecialTypes.GetTypeFromMetadataName(code)); } } for (int i = 0; i <= (int)Cci.PrimitiveTypeCode.Invalid; i++) { SpecialType id = SpecialTypes.GetTypeFromMetadataName((Cci.PrimitiveTypeCode)i); if (id != SpecialType.None) { Assert.Equal((Cci.PrimitiveTypeCode)i, SpecialTypes.GetTypeCode(id)); } } Assert.Equal(SpecialType.System_Boolean, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.Boolean)); Assert.Equal(SpecialType.System_Char, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.Char)); Assert.Equal(SpecialType.System_Void, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.Void)); Assert.Equal(SpecialType.System_String, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.String)); Assert.Equal(SpecialType.System_Int64, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.Int64)); Assert.Equal(SpecialType.System_Int32, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.Int32)); Assert.Equal(SpecialType.System_Int16, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.Int16)); Assert.Equal(SpecialType.System_SByte, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.Int8)); Assert.Equal(SpecialType.System_UInt64, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.UInt64)); Assert.Equal(SpecialType.System_UInt32, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.UInt32)); Assert.Equal(SpecialType.System_UInt16, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.UInt16)); Assert.Equal(SpecialType.System_Byte, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.UInt8)); Assert.Equal(SpecialType.System_Single, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.Float32)); Assert.Equal(SpecialType.System_Double, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.Float64)); Assert.Equal(SpecialType.System_IntPtr, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.IntPtr)); Assert.Equal(SpecialType.System_UIntPtr, SpecialTypes.GetTypeFromMetadataName(Cci.PrimitiveTypeCode.UIntPtr)); }
CoreType Create(SpecialType type) => CreateFromFullName(SpecialTypes.GetMetadataName(type));