Esempio n. 1
0
 // cf. MetadataDecoder<>.DecodeParameterOrThrow.
 private ParameterSignature DecodeParameter(ref BlobReader signatureReader)
 {
     bool isByRef = false;
     while (true)
     {
         var typeCode = signatureReader.ReadSignatureTypeCode();
         switch (typeCode)
         {
             case SignatureTypeCode.RequiredModifier:
             case SignatureTypeCode.OptionalModifier:
                 // Skip modifiers.
                 break;
             case SignatureTypeCode.ByReference:
                 isByRef = true;
                 break;
             default:
                 var type = DecodeType(ref signatureReader, typeCode);
                 return new ParameterSignature(type, isByRef);
         }
     }
 }
Esempio n. 2
0
 // cf. MetadataDecoder<>.DecodeGenericTypeInstanceOrThrow.
 private TypeSignature DecodeGenericTypeInstance(ref BlobReader signatureReader)
 {
     var typeCode = signatureReader.ReadSignatureTypeCode();
     var typeHandle = signatureReader.ReadTypeHandle();
     var typeArguments = DecodeGenericTypeArguments(ref signatureReader);
     int typeArgumentOffset = 0;
     var type = DecodeType(typeHandle, typeArguments, ref typeArgumentOffset);
     if (typeArgumentOffset != typeArguments.Length)
     {
         // Generic type reference names must include arity
         // to avoid loading referenced assemblies.
         throw UnhandledMetadata();
     }
     return type;
 }
Esempio n. 3
0
 // Ignore modifiers and decode type.
 private TypeSignature DecodeModifiersAndType(ref BlobReader signatureReader)
 {
     while (true)
     {
         var typeCode = signatureReader.ReadSignatureTypeCode();
         switch (typeCode)
         {
             case SignatureTypeCode.RequiredModifier:
             case SignatureTypeCode.OptionalModifier:
                 // Skip modifiers.
                 break;
             default:
                 return DecodeType(ref signatureReader, typeCode);
         }
     }
 }