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;
 }