예제 #1
0
        // See the ECMA CLI spec, Partition II, section 23.2.1.
        private MiniParameterInfo[] ParseSig(byte[] sig)
        {
            PEFileReader peFile = _assembly.PEFileReader;

            peFile.InitMetaData();
            MDTables MetaData = peFile.MetaData;

            uint i = 0;

            // The first byte of the Signature holds bits for HASTHIS, EXPLICITTHIS
            // and calling convention (DEFAULT, VARARG, or GENERIC). These are OR'ed
            // together.
            i++;

            uint numParams = DecodeInteger(sig, ref i);

            // Skip over return type
            //   Skip custom modifiers.
            do
            {
                if (sig[i] == (byte)CorElementType.CModOpt)
                {
                    i++;
                }
                else if (sig[i] == (byte)CorElementType.CModReqd)
                {
                    i++;
                }
                else
                {
                    break;
                }
            } while (true);
            //   Skip return type.  Note that for constructors, it should be void.
            if (sig[i] == (byte)CorElementType.Void)
            {
                i++;
            }
            else if (sig[i] == (byte)CorElementType.TypedByRef)
            {
                i++;
            }
            else
            {
                if (sig[i] == (byte)CorElementType.ByRef)
                {
                    i++;
                }
                ParseType(sig, ref i, false, true);
            }

            MiniParameterInfo[] parameters = new MiniParameterInfo[numParams];
            for (uint paramNum = 0; paramNum < numParams; paramNum++)
            {
                parameters[paramNum] = ParseType(sig, ref i, false, false);
                //Console.WriteLine("Read a parameter: {0}", parameters[paramNum]);
            }
            return(parameters);
        }
 public MiniConstructorInfo(MiniParameterInfo[] parameters)
 {
     System.Diagnostics.Contracts.Contract.Requires(parameters != null);
     _parameters = parameters;
 }