Ejemplo n.º 1
0
        public override void GenCode(ICodeGenerator cg)
        {
            var gen = cg.GetGenerator;

            LeftOperand.GenCode(cg);
            RightOperand.GenCode(cg);
            gen.Emit(OpCodes.Sub);
        }
Ejemplo n.º 2
0
 public override void GenCode(ICodeGenerator cg)
 {
     LeftOperand.GenCode(cg);
     RightOperand.GenCode(cg);
     if (LeftOperand.ReturnType.PrimitiveType is StringType)
     {
         MethodInfo method = typeof(string).GetMethod("Compare", new Type[] { typeof(string), typeof(string) });
         cg.GetGenerator.Emit(OpCodes.Call, method);
         cg.GetGenerator.Emit(OpCodes.Ldc_I4_0);
     }
     cg.GetGenerator.Emit(OpCodes.Ceq);
 }
Ejemplo n.º 3
0
        public override void GenCode(ICodeGenerator cg)
        {
            var gen        = cg.GetGenerator;
            var falseLabel = gen.DefineLabel();
            var endLabel   = gen.DefineLabel();

            LeftOperand.GenCode(cg);
            gen.Emit(OpCodes.Brfalse, falseLabel);

            RightOperand.GenCode(cg);
            gen.Emit(OpCodes.Brfalse, falseLabel);

            gen.Emit(OpCodes.Ldc_I4_1);
            gen.Emit(OpCodes.Br, endLabel);

            gen.MarkLabel(falseLabel);
            gen.Emit(OpCodes.Ldc_I4_0);

            gen.MarkLabel(endLabel);
        }
Ejemplo n.º 4
0
        public override void GenCode(ICodeGenerator cg)
        {
            var gen       = cg.GetGenerator;
            var trueLabel = gen.DefineLabel();
            var endLabel  = gen.DefineLabel();

            //Si leftOperand es true saltar a trueLabel
            LeftOperand.GenCode(cg);
            gen.Emit(OpCodes.Brtrue, trueLabel);
            //Si el segundo lo es idem
            RightOperand.GenCode(cg);
            gen.Emit(OpCodes.Brtrue, trueLabel);
            //Si ninguno es true ponemos 0 en la pila y saltamos al final
            gen.Emit(OpCodes.Ldc_I4_0);
            gen.Emit(OpCodes.Br, endLabel);
            //Si alguno es true ponemos uno en la pila y seguimos hasta el final
            gen.MarkLabel(trueLabel);
            gen.Emit(OpCodes.Ldc_I4_1);
            //Fin del codigo
            gen.MarkLabel(endLabel);
        }
 public override void GenCode(ICodeGenerator cg)
 {
     LeftOperand.GenCode(cg);
     RightOperand.GenCode(cg);
 }