internal SignatureConverter( PEFileToObjectModel peFileToObjectModel, MemoryReader signatureMemoryReader, MetadataObject metadataOwnerObject ) //^ requires signatureMemoryReader.Length > 0; { this.PEFileToObjectModel = peFileToObjectModel; this.SignatureMemoryReader = signatureMemoryReader; this.MetadataOwnerObject = metadataOwnerObject; this.ModuleMethodReference = metadataOwnerObject as IModuleMethodReference; this.ModuleMemberReference = metadataOwnerObject as IModuleMemberReference; TypeMember/*?*/ moduleTypeMember = metadataOwnerObject as TypeMember; if (moduleTypeMember != null) { this.ModuleGenericType = moduleTypeMember.ContainingTypeDefinition as IModuleGenericType; this.ModuleGenericMethod = moduleTypeMember as IModuleGenericMethod; return; } IModuleGenericType/*?*/ moduleGenericType = metadataOwnerObject as IModuleGenericType; if (moduleGenericType != null) { this.ModuleGenericType = moduleGenericType; return; } GenericTypeParameter/*?*/ genericTypeParam = metadataOwnerObject as GenericTypeParameter; if (genericTypeParam != null) { this.ModuleGenericType = genericTypeParam.OwningGenericType; return; } GenericMethodParameter/*?*/ genericMethodParam = metadataOwnerObject as GenericMethodParameter; if (genericMethodParam != null) { this.ModuleGenericType = genericMethodParam.OwningGenericMethod.ContainingTypeDefinition as IModuleGenericType; this.ModuleGenericMethod = genericMethodParam.OwningGenericMethod; return; } }
internal GenericTypeParameter/*?*/ GetGenericTypeParamAtRow( uint genericParamRowId, IModuleGenericType moduleTypeOwner ) //^ requires genericParamRowId >= 1; { if (this.ModuleGenericParamArray[genericParamRowId] == null) { lock (GlobalLock.LockingObject) { if (this.ModuleGenericParamArray[genericParamRowId] == null) { GenericParamRow genericParamRow = this.PEFileReader.GenericParamTable[genericParamRowId]; IName genericParamName = this.GetNameFromOffset(genericParamRow.Name); this.ModuleGenericParamArray[genericParamRowId] = new GenericTypeParameter(this, genericParamRow.Number, genericParamRow.Flags, genericParamName, genericParamRowId, moduleTypeOwner); } } } return this.ModuleGenericParamArray[genericParamRowId] as GenericTypeParameter; }