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>()); }
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); }
[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);
[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);
[Fact] public void OrderTest02() => TestRoundTrip( "a && b || c", Emit.Or( Emit.And(Emit.Name("a"), Emit.Name("b")), Emit.Name("c")), ScriptParser.Expression);
[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);
[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);