private void Load()
        {
            var image = _module.Image;

            int[] implementations;
            image.GetMethodImplsByBody(_method.RID, out implementations);

            int count = implementations.Length;

            _list.Capacity = count;

            for (int i = 0; i < count; i++)
            {
                _list.Add(MethodSignature.Load(_module, MetadataToken.DecompressMethodDefOrRef(implementations[i])));
            }
        }
Ejemplo n.º 2
0
        internal static GenericMethodReference LoadMethodSpec(Module module, int rid)
        {
            var image = module.Image;

            var genericMethodRef = image.MethodSpecSignatures[rid - 1] as GenericMethodReference;

            if (genericMethodRef != null)
            {
                return(genericMethodRef);
            }

            MethodSpecRow row;

            image.GetMethodSpec(rid, out row);

            genericMethodRef = new GenericMethodReference();

            genericMethodRef._declaringMethod = MethodReference.LoadMethodDefOrRef(module, MetadataToken.DecompressMethodDefOrRef(row.Method));

            using (var accessor = image.OpenBlob(row.Instantiation))
            {
                byte sigType = accessor.ReadByte();                 // Should be equal to SignatureType.GenericInst
                if (sigType != Metadata.SignatureType.GenericInst)
                {
                    throw new CodeModelException(string.Format(SR.AssemblyLoadError, module.Location));
                }

                var genericArguments = TypeSignature.LoadGenericArguments(accessor, module);
                genericMethodRef._genericArguments = ReadOnlyList <TypeSignature> .Create(genericArguments);
            }

            module.AddSignature(ref genericMethodRef);
            image.MethodSpecSignatures[rid - 1] = genericMethodRef;

            return(genericMethodRef);
        }