TypeSpec ApplyGenerics(ITypeDefOrRef type, IList <TypeSig> generics) { ClassOrValueTypeSig typeSig = type.ToTypeSig().ToClassOrValueTypeSig(); GenericInstSig genericSig = new GenericInstSig(typeSig, generics); return(new TypeSpecUser(genericSig)); }
public static bool IsSystemNullable(this ClassOrValueTypeSig sig) { return(sig is ValueTypeSig && sig.TypeDefOrRef.Compare(systemString, nullableString)); }
private void Load(MosaModule module, TypeDef typeDef) { TypeSig typeSig = typeDef.ToTypeSig(); // Check to see if its one of our classes we need for SZ Arrays if (typeDef.Name.Contains("SZArrayHelper`1")) { szHelperSig = typeSig as ClassOrValueTypeSig; } else if (typeDef.Name.Contains("IList`1")) { iListSig = typeSig as ClassOrValueTypeSig; } MosaType mosaType = metadata.Controller.CreateType(); using (var type = metadata.Controller.MutateType(mosaType)) { type.Module = module; type.UnderlyingObject = new UnitDesc <TypeDef, TypeSig>(typeDef.Module, typeDef, typeSig); type.Namespace = typeDef.Namespace; type.Name = typeDef.Name; type.IsInterface = typeDef.IsInterface; type.IsEnum = typeDef.IsEnum; type.IsDelegate = typeDef.BaseType != null && typeDef.BaseType.DefinitionAssembly.IsCorLib() && (typeDef.BaseType.FullName == "System.Delegate" || typeDef.BaseType.FullName == "System.MulticastDelegate"); type.IsModule = typeDef.IsGlobalModuleType; type.IsExplicitLayout = typeDef.IsExplicitLayout; if (typeDef.IsExplicitLayout) { type.ClassSize = (int)typeDef.ClassSize; type.PackingSize = typeDef.PackingSize; } type.TypeAttributes = (MosaTypeAttributes)typeDef.Attributes; type.TypeCode = (MosaTypeCode)typeSig.ElementType; // Load members foreach (var fieldDef in typeDef.Fields) { MosaField mosaField = metadata.Controller.CreateField(); using (var field = metadata.Controller.MutateField(mosaField)) LoadField(mosaType, field, fieldDef); type.Fields.Add(mosaField); metadata.Cache.AddField(mosaField); LoadedUnits.Add(mosaField); } foreach (var methodDef in typeDef.Methods) { MosaMethod mosaMethod = metadata.Controller.CreateMethod(); using (var method = metadata.Controller.MutateMethod(mosaMethod)) LoadMethod(mosaType, method, methodDef); type.Methods.Add(mosaMethod); metadata.Cache.AddMethod(mosaMethod); LoadedUnits.Add(mosaMethod); } foreach (var propertyDef in typeDef.Properties) { MosaProperty mosaProperty = metadata.Controller.CreateProperty(); using (var property = metadata.Controller.MutateProperty(mosaProperty)) LoadProperty(mosaType, property, propertyDef); type.Properties.Add(mosaProperty); metadata.Cache.AddProperty(mosaProperty); LoadedUnits.Add(mosaProperty); } } typeCache[typeSig] = mosaType; metadata.Controller.AddType(mosaType); metadata.Cache.AddType(mosaType); LoadedUnits.Add(mosaType); }