コード例 #1
0
        private GenericParameter GetGenericParameter(GenericParameterType type, uint var)
        {
            IGenericParameterProvider method;
            IGenericContext           genericContext = this.reader.context;
            int num = (int)var;

            if (genericContext == null)
            {
                return(this.GetUnboundGenericParameter(type, num));
            }
            if (type == GenericParameterType.Type)
            {
                method = genericContext.Type;
            }
            else
            {
                if (type != GenericParameterType.Method)
                {
                    throw new NotSupportedException();
                }
                method = genericContext.Method;
            }
            if (!genericContext.IsDefinition)
            {
                SignatureReader.CheckGenericContext(method, num);
            }
            if (num >= method.GenericParameters.Count)
            {
                return(this.GetUnboundGenericParameter(type, num));
            }
            return(method.GenericParameters[num]);
        }
コード例 #2
0
        public void ReadMethodSignature(IMethodSignature method)
        {
            Collection <ParameterDefinition> parameters;
            byte num = base.ReadByte();

            if ((num & 32) != 0)
            {
                method.HasThis = true;
                num            = (byte)(num & -33);
            }
            if ((num & 64) != 0)
            {
                method.ExplicitThis = true;
                num = (byte)(num & -65);
            }
            method.CallingConvention = (MethodCallingConvention)num;
            MethodReference methodReference = method as MethodReference;

            if (methodReference != null && !methodReference.DeclaringType.IsArray)
            {
                this.reader.context = methodReference;
            }
            if ((num & 16) != 0)
            {
                uint num1 = base.ReadCompressedUInt32();
                if (methodReference != null && !methodReference.IsDefinition)
                {
                    SignatureReader.CheckGenericContext(methodReference, (int)(num1 - 1));
                }
            }
            uint num2 = base.ReadCompressedUInt32();

            method.MethodReturnType.ReturnType = this.ReadTypeSignature();
            if (num2 == 0)
            {
                return;
            }
            MethodReference methodReference1 = method as MethodReference;

            if (methodReference1 == null)
            {
                parameters = method.Parameters;
            }
            else
            {
                ParameterDefinitionCollection parameterDefinitionCollection  = new ParameterDefinitionCollection(method, (int)num2);
                ParameterDefinitionCollection parameterDefinitionCollection1 = parameterDefinitionCollection;
                methodReference1.parameters = parameterDefinitionCollection;
                parameters = parameterDefinitionCollection1;
            }
            for (int i = 0; (long)i < (ulong)num2; i++)
            {
                parameters.Add(new ParameterDefinition(this.ReadTypeSignature()));
            }
        }
コード例 #3
0
        public void ReadGenericInstanceSignature(IGenericParameterProvider provider, IGenericInstance instance)
        {
            uint num = base.ReadCompressedUInt32();

            if (!provider.IsDefinition)
            {
                SignatureReader.CheckGenericContext(provider, (int)(num - 1));
            }
            Collection <TypeReference> genericArguments = instance.GenericArguments;

            for (int i = 0; (long)i < (ulong)num; i++)
            {
                genericArguments.Add(this.ReadTypeSignature());
            }
        }