コード例 #1
0
        RetType ReadRetType(byte [] data, int pos, out int start)
        {
            RetType rt = new RetType();

            start         = pos;
            rt.CustomMods = this.ReadCustomMods(data, start, out start);
            int         curs = start;
            ElementType flag = (ElementType)Utilities.ReadCompressedInteger(data, start, out start);

            switch (flag)
            {
            case ElementType.Void:
                rt.ByRef = rt.TypedByRef = false;
                rt.Void  = true;
                break;

            case ElementType.TypedByRef:
                rt.ByRef      = rt.Void = false;
                rt.TypedByRef = true;
                break;

            case ElementType.ByRef:
                rt.TypedByRef = rt.Void = false;
                rt.ByRef      = true;
                rt.Type       = this.ReadType(data, start, out start);
                break;

            default:
                rt.TypedByRef = rt.Void = rt.ByRef = false;
                rt.Type       = this.ReadType(data, curs, out start);
                break;
            }
            return(rt);
        }
コード例 #2
0
 void Write(RetType retType)
 {
     Write(retType.CustomMods);
     if (retType.Void)
     {
         Write(ElementType.Void);
     }
     else if (retType.TypedByRef)
     {
         Write(ElementType.TypedByRef);
     }
     else if (retType.ByRef)
     {
         Write(ElementType.ByRef);
         Write(retType.Type);
     }
     else
     {
         Write(retType.Type);
     }
 }
コード例 #3
0
ファイル: SignatureWriter.cs プロジェクト: KAW0/Alter-Native
		void Write (RetType retType)
		{
			Write (retType.CustomMods);
			if (retType.Void)
				Write (ElementType.Void);
			else if (retType.TypedByRef)
				Write (ElementType.TypedByRef);
			else if (retType.ByRef) {
				Write (ElementType.ByRef);
				Write (retType.Type);
			} else
				Write (retType.Type);
		}
コード例 #4
0
        void CompleteMethodSig(MethodReference meth, MethodSig sig)
        {
            sig.HasThis = meth.HasThis;
            sig.ExplicitThis = meth.ExplicitThis;
            if (sig.HasThis)
                sig.CallingConvention |= 0x20;
            if (sig.ExplicitThis)
                sig.CallingConvention |= 0x40;

            if ((meth.CallingConvention & MethodCallingConvention.VarArg) != 0)
                sig.CallingConvention |= 0x5;

            sig.ParamCount = meth.Parameters.Count;
            sig.Parameters = GetParametersSig (meth.Parameters);

            RetType rtSig = new RetType ();
            rtSig.CustomMods = GetCustomMods (meth.ReturnType.ReturnType);

            if (meth.ReturnType.ReturnType.FullName == Constants.Void)
                rtSig.Void = true;
            else if (meth.ReturnType.ReturnType.FullName == Constants.TypedReference)
                rtSig.TypedByRef = true;
            else if (meth.ReturnType.ReturnType is ReferenceType) {
                rtSig.ByRef = true;
                rtSig.Type = GetSigType (
                    (meth.ReturnType.ReturnType as ReferenceType).ElementType);
            } else
                rtSig.Type = GetSigType (meth.ReturnType.ReturnType);

            sig.RetType = rtSig;
        }
コード例 #5
0
ファイル: SignatureReader.cs プロジェクト: sidecut/xaeios
        RetType ReadRetType(byte [] data, int pos, out int start)
        {
            RetType rt = new RetType ();
            start = pos;
            rt.CustomMods = ReadCustomMods (data, start, out start);
            int curs = start;
            ElementType flag = (ElementType) Utilities.ReadCompressedInteger (data, start, out start);
            switch (flag) {
            case ElementType.Void :
                rt.ByRef = rt.TypedByRef = false;
                rt.Void = true;
                break;
            case ElementType.TypedByRef :
                rt.ByRef = rt.Void = false;
                rt.TypedByRef = true;
                break;
            case ElementType.ByRef :
                rt.TypedByRef = rt.Void = false;
                rt.ByRef = true;

                if (rt.CustomMods == null || rt.CustomMods.Length == 0)
                    rt.CustomMods = ReadCustomMods (data, start, out start);

                rt.Type = ReadType (data, start, out start);
                break;
            default :
                rt.TypedByRef = rt.Void = rt.ByRef = false;
                rt.Type = ReadType (data, curs, out start);
                break;
            }
            return rt;
        }