Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ EmitCall() [1/2]

override void System.Reflection.Emit.DynamicILGenerator.EmitCall ( OpCode opcode,
MethodInfo methodInfo,
Type[] optionalParameterTypes )
inline

Definition at line 214 of file DynamicILGenerator.cs.

215 {
216 if (methodInfo == null)
217 {
218 throw new ArgumentNullException("methodInfo");
219 }
220 if (!opcode.Equals(OpCodes.Call) && !opcode.Equals(OpCodes.Callvirt) && !opcode.Equals(OpCodes.Newobj))
221 {
222 throw new ArgumentException(SR.Argument_NotMethodCallOpcode, "opcode");
223 }
224 if (methodInfo.ContainsGenericParameters)
225 {
226 throw new ArgumentException(SR.Argument_GenericsInvalid, "methodInfo");
227 }
228 if (methodInfo.DeclaringType != null && methodInfo.DeclaringType.ContainsGenericParameters)
229 {
230 throw new ArgumentException(SR.Argument_GenericsInvalid, "methodInfo");
231 }
232 int num = 0;
233 int memberRefToken = GetMemberRefToken(methodInfo, optionalParameterTypes);
235 InternalEmit(opcode);
236 if (methodInfo.ReturnType != typeof(void))
237 {
238 num++;
239 }
240 num -= methodInfo.GetParameterTypes().Length;
241 if (!(methodInfo is SymbolMethod) && !methodInfo.IsStatic && !opcode.Equals(OpCodes.Newobj))
242 {
243 num--;
244 }
245 if (optionalParameterTypes != null)
246 {
247 num -= optionalParameterTypes.Length;
248 }
249 UpdateStackSize(opcode, num);
250 PutInteger4(memberRefToken);
251 }
int GetMemberRefToken(MethodBase methodInfo, Type[] optionalParameterTypes)
void UpdateStackSize(OpCode opcode, int stackchange)
void InternalEmit(OpCode opcode)

References System.SR.Argument_GenericsInvalid, System.SR.Argument_NotMethodCallOpcode, System.Reflection.Emit.OpCodes.Call, System.Reflection.Emit.OpCodes.Callvirt, System.Reflection.MethodBase.ContainsGenericParameters, System.Type.ContainsGenericParameters, System.Reflection.MemberInfo.DeclaringType, System.Reflection.Emit.ILGenerator.EnsureCapacity(), System.Reflection.Emit.OpCode.Equals(), System.Reflection.Emit.DynamicILGenerator.GetMemberRefToken(), System.Reflection.MethodBase.GetParameterTypes(), System.Reflection.Emit.ILGenerator.InternalEmit(), System.Reflection.MethodBase.IsStatic, System.Reflection.Emit.OpCodes.Newobj, System.Reflection.Emit.ILGenerator.PutInteger4(), System.Reflection.MethodInfo.ReturnType, and System.Reflection.Emit.ILGenerator.UpdateStackSize().