Exemplo n.º 1
0
        public static MethodSig Read(BinaryStreamReader signatureBlobReader)
        {
            var callingConvention = (CallingConventions)signatureBlobReader.ReadByte();

            MethodSig result;

            switch (callingConvention & ~CallingConventions.HasThis & ~CallingConventions.ExplicitThis)
            {
            case CallingConventions.Default:
                result = new Default();
                break;

            case CallingConventions.C:
                result = new C();
                break;

            case CallingConventions.StdCall:
                result = new StdCall();
                break;

            case CallingConventions.FastCall:
                result = new FastCall();
                break;

            case CallingConventions.VarArg:
                result = new VarArg();
                break;

            case CallingConventions.Generic:
            {
                var typed = new Generic();
                typed.ReadDetails(signatureBlobReader);
                result = typed;
            }
            break;

            default:
                throw new BadImageFormatException("Invalid calling convention byte " + callingConvention + ".");
            }

            result.ReadParameters(signatureBlobReader);

            return(result);
        }
Exemplo n.º 2
0
        public static MethodSig Read(BinaryStreamReader signatureBlobReader)
        {
            var callingConvention = (CallingConventions)signatureBlobReader.ReadByte();

            MethodSig result;
            switch (callingConvention & ~CallingConventions.HasThis & ~CallingConventions.ExplicitThis)
            {
                case CallingConventions.Default:
                    result = new Default();
                    break;

                case CallingConventions.C:
                    result = new C();
                    break;

                case CallingConventions.StdCall:
                    result = new StdCall();
                    break;

                case CallingConventions.FastCall:
                    result = new FastCall();
                    break;

                case CallingConventions.VarArg:
                    result = new VarArg();
                    break;

                case CallingConventions.Generic:
                    {
                        var typed = new Generic();
                        typed.ReadDetails(signatureBlobReader);
                        result = typed;
                    }
                    break;

                default:
                    throw new BadImageFormatException("Invalid calling convention byte "+callingConvention+".");
            }

            result.ReadParameters(signatureBlobReader);

            return result;
        }