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); }
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); } }
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); }
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; }
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; }