public void EmitReturn(Type returnType)
 {
     if (returnType == typeof(void))
     {
         for (int i = stackCount; i > 0; i--)
         {
             Emit(OpCodes.Pop);
         }
         ilSize += InstructionSize.Get(OpCodes.Ret);
         AdjustStack(OpCodes.Ret, 0);
     }
     else
     {
         for (int i = stackCount - 1; i > 0; i--)
         {
             Emit(OpCodes.Pop);
         }
         if (stackCount == 0)
         {
             Emit(OpCodes.Ldc_I4_0);
         }
         ilSize += InstructionSize.Get(OpCodes.Ret);
         AdjustStack(OpCodes.Ret, 1);
     }
 }
 public void Emit(OpCode opCode, FieldInfo field)
 {
     ilSize += InstructionSize.Get(opCode);
     AdjustStack(opCode);
 }
 public void Emit(OpCode opCode, IEnumerable <LabelRef> labels)
 {
     ilSize += InstructionSize.Get(opCode, labels.Count());
     AdjustStack(opCode);
 }
 public void Emit(OpCode opCode, LabelRef labelRef)
 {
     ilSize += InstructionSize.Get(opCode);
     AdjustStack(opCode);
 }
 public void Emit(OpCode opCode, ILocalRef localBuilder)
 {
     ilSize += InstructionSize.Get(opCode);
     AdjustStack(opCode);
 }
 public void Emit(OpCode opCode, string arg)
 {
     ilSize += InstructionSize.Get(opCode);
     AdjustStack(opCode);
 }
 public void EmitCall(OpCode opCode, MethodInfo methodInfo, int argumentCount)
 {
     ilSize += InstructionSize.Get(opCode);
     AdjustStack(opCode, argumentCount, methodInfo.ReturnType != typeof(void) ? 1 : 0);
 }
 public void EmitNew(OpCode opCode, ConstructorInfo constructor, int?argumentCount = null,
                     int?resultCount = null)
 {
     ilSize += InstructionSize.Get(opCode);
     AdjustStack(opCode, argumentCount ?? constructor.GetParameters().Length, resultCount);
 }
 public void EmitPtr(OpCode opCode, MethodInfo methodInfo)
 {
     ilSize += InstructionSize.Get(opCode);
     AdjustStack(opCode);
 }
 public void Emit(OpCode opCode, Type type, int?argumentCount = null, int?resultCount = null)
 {
     ilSize += InstructionSize.Get(opCode);
     AdjustStack(opCode, argumentCount, resultCount);
 }