public static UIntPtr And(this UIntPtr x, UIntPtr y)
 {
     Push(x);
     Push(y);
     Emit.And();
     return(Return <UIntPtr>());
 }
 public static IntPtr And(this IntPtr x, IntPtr y)
 {
     Push(x);
     Push(y);
     Emit.And();
     return(Return <IntPtr>());
 }
示例#3
0
        public Emit <Func <int> > EmitByteCode(CompilerContext context, Emit <Func <int> > emiter)
        {
            if (Operator == BinaryOperator.CONCAT)
            {
                return(EmitConcat(context, emiter));
            }
            emiter = Left.EmitByteCode(context, emiter);
            emiter = Right.EmitByteCode(context, emiter);
            switch (Operator)
            {
            case BinaryOperator.ADD: {
                emiter = emiter.Add();
                break;
            }

            case BinaryOperator.SUB: {
                emiter = emiter.Subtract();
                break;
            }

            case BinaryOperator.MULTIPLY: {
                emiter = emiter.Multiply();
                break;
            }

            case BinaryOperator.DIVIDE: {
                emiter = emiter.Divide();
                break;
            }

            case BinaryOperator.EQUALS: {
                emiter = emiter.CompareEqual();
                break;
            }

            case BinaryOperator.DIFFERENT: {
                emiter = emiter.CompareEqual();
                emiter = emiter.Not();
                break;
            }

            case BinaryOperator.OR: {
                emiter = emiter.Or();
                break;
            }

            case BinaryOperator.AND: {
                emiter = emiter.And();
                break;
            }

            case BinaryOperator.LESSER: {
                emiter = emiter.CompareLessThan();
                break;
            }

            case BinaryOperator.GREATER: {
                emiter = emiter.CompareGreaterThan();
                break;
            }
            }
            return(emiter);
        }
示例#4
0
 [Fact] public void TestAnd() => TestRoundTrip("a == 1 && b != 2",
                                               Emit.And(
                                                   Emit.Eq(Emit.Name("a"), Emit.Const(1)),
                                                   Emit.Neq(Emit.Name("b"), Emit.Const(2))),
                                               ScriptParser.Expression);
示例#5
0
 [Fact] public void OrderTest04() => TestRoundTrip(
     "a > b && c < d",
     Emit.And(
         Emit.Gt(Emit.Name("a"), Emit.Name("b")),
         Emit.Lt(Emit.Name("c"), Emit.Name("d"))
         ), ScriptParser.Expression);
示例#6
0
 [Fact] public void OrderTest02() => TestRoundTrip(
     "a && b || c",
     Emit.Or(
         Emit.And(Emit.Name("a"), Emit.Name("b")),
         Emit.Name("c")),
     ScriptParser.Expression);
示例#7
0
 [Fact] public void ParenthesesTest4() =>
 TestParse("((a > b) && c <= b)",
           Emit.And(
               Emit.Gt(Emit.Name("a"), Emit.Name("b")),
               Emit.Lte(Emit.Name("c"), Emit.Name("b"))),
           ScriptParser.Expression);
示例#8
0
 [Fact] public void ParenthesesTest1() =>
 TestRoundTrip("a > b && c <= b",
               Emit.And(
                   Emit.Gt(Emit.Name("a"), Emit.Name("b")),
                   Emit.Lte(Emit.Name("c"), Emit.Name("b"))),
               ScriptParser.Expression);