示例#1
0
 public override void Emit(IlCompilerContext ctx)
 {
     _expression.Emit(ctx);
     ctx.StackDepth--;
     ctx.Il.Emit(OpCodes.Castclass, _type);
     ctx.StackDepth++;
 }
示例#2
0
 public override void Emit(IlCompilerContext ctx)
 {
     _target.Emit(ctx);
     _value.Emit(ctx);
     ctx.Il.Emit(OpCodes.Stfld, _field);
     ctx.StackDepth -= 2;
 }
示例#3
0
        public override void Emit(IlCompilerContext ctx)
        {
            var field = ctx.SelfType.GetFields(BindingFlagsEx.All)[Index];

            ctx.Il.Emit(OpCodes.Ldarg_0);
            ctx.Il.Emit(OpCodes.Ldfld, field);
            ctx.StackDepth++;
        }
示例#4
0
        public override void Emit(IlCompilerContext ctx)
        {
            var ctor = _type.GetConstructor(new Type[] {});

            // ReSharper disable once AssignNullToNotNullAttribute
            ctx.Il.Emit(OpCodes.Newobj, ctor);
            ctx.StackDepth++;
        }
示例#5
0
 public override void Emit(IlCompilerContext ctx)
 {
     foreach (var arg in _args)
     {
         arg.Emit(ctx);
         ctx.StackDepth--;
     }
     ctx.Il.EmitCall(OpCodes.Call, _method, null);
     if (_method.ReturnType != typeof(void))
     {
         ctx.StackDepth++;
     }
 }
示例#6
0
 public override void Emit(IlCompilerContext ctx)
 {
     _target.Emit(ctx);
     ctx.StackDepth--;
     foreach (var arg in _args)
     {
         arg.Emit(ctx);
         ctx.StackDepth--;
     }
     if (_method.IsVirtual)
     {
         ctx.Il.EmitCall(OpCodes.Callvirt, _method, null);
     }
     else
     {
         ctx.Il.EmitCall(OpCodes.Call, _method, null);
     }
     if (_method.ReturnType != typeof(void))
     {
         ctx.StackDepth++;
     }
 }
示例#7
0
 public override void Emit(IlCompilerContext ctx)
 {
     ctx.Il.Emit(_value ? OpCodes.Ldc_I4_1 : OpCodes.Ldc_I4_0);
     ctx.StackDepth++;
 }
示例#8
0
 public override void Emit(IlCompilerContext ctx)
 {
     _expression.Emit(ctx);
     ctx.Il.Emit(OpCodes.Unbox_Any, _type);
 }
示例#9
0
 public override void Emit(IlCompilerContext ctx)
 {
     ctx.Il.Emit(OpCodes.Ldloc, VariableIndex);
     ctx.StackDepth++;
 }
示例#10
0
 public override void Emit(IlCompilerContext ctx)
 {
     ctx.Il.Emit(OpCodes.Ldarg, ParameterIndex);
     ctx.StackDepth++;
 }
示例#11
0
 public abstract void Emit(IlCompilerContext ctx);