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

◆ EmitMethodCall() [4/4]

void System.Linq.Expressions.Compiler.LambdaCompiler.EmitMethodCall ( MethodInfo mi,
IArgumentProvider args,
Type objectType,
CompilationFlags flags )
inlineprivate

Definition at line 1359 of file LambdaCompiler.cs.

1360 {
1362 OpCode opCode = (UseVirtual(mi) ? OpCodes.Callvirt : OpCodes.Call);
1363 if (opCode == OpCodes.Callvirt && objectType.IsValueType)
1364 {
1366 }
1367 if ((flags & CompilationFlags.EmitAsTailCallMask) == CompilationFlags.EmitAsTail && !MethodHasByRefParameter(mi))
1368 {
1370 }
1371 if (mi.CallingConvention == CallingConventions.VarArgs)
1372 {
1373 int argumentCount = args.ArgumentCount;
1374 Type[] array = new Type[argumentCount];
1375 for (int i = 0; i < argumentCount; i++)
1376 {
1377 array[i] = args.GetArgument(i).Type;
1378 }
1380 }
1381 else
1382 {
1383 _ilg.Emit(opCode, mi);
1384 }
1386 }
void EmitWriteBack(List< WriteBack > writeBacks)
List< WriteBack > EmitArguments(MethodBase method, IArgumentProvider args)
virtual void Emit(OpCode opcode)
virtual void EmitCall(OpCode opcode, MethodInfo methodInfo, Type[]? optionalParameterTypes)
static readonly OpCode Tailcall
Definition OpCodes.cs:439
static readonly OpCode Callvirt
Definition OpCodes.cs:225
static readonly OpCode Constrained
Definition OpCodes.cs:443
static readonly OpCode Call
Definition OpCodes.cs:83

References System.Linq.Expressions.Compiler.LambdaCompiler._ilg, System.array, System.Reflection.Emit.OpCodes.Call, System.Reflection.Emit.OpCodes.Callvirt, System.Reflection.Emit.OpCodes.Constrained, System.Reflection.Emit.ILGenerator.Emit(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitArguments(), System.Reflection.Emit.ILGenerator.EmitCall(), System.Linq.Expressions.Compiler.LambdaCompiler.EmitWriteBack(), System.Linq.Expressions.Compiler.LambdaCompiler.MethodHasByRefParameter(), System.Reflection.Emit.OpCodes.Tailcall, and System.Linq.Expressions.Compiler.LambdaCompiler.UseVirtual().