Exemple #1
0
        public override CompiledDelegate Compile(CompileContext ctx)
        {
            var testEval   = test.Compile(ctx);
            var ifTrueEval = ifTrue != null?ifTrue.Compile(ctx) : null;

            var ifFalseEval = ifFalse != null?ifFalse.Compile(ctx) : null;

            if (ifTrueEval == null && ifFalseEval == null)
            {
                return((invoke) =>
                {
                    testEval(invoke);
                    return null;
                });
            }
            else if (ifTrueEval == null)
            {
                return((invoke) => DefaultOperators.IsTrue(testEval(invoke)) ? null : ifFalseEval(invoke));
            }
            else if (ifFalseEval == null)
            {
                return((invoke) => DefaultOperators.IsTrue(testEval(invoke)) ? ifTrueEval(invoke) : null);
            }
            else
            {
                return((invoke) => DefaultOperators.IsTrue(testEval(invoke)) ? ifTrueEval(invoke) : ifFalseEval(invoke));
            }
        }
Exemple #2
0
        public override CompiledDelegate Compile(CompileContext ctx)
        {
            var lhs         = operand.Compile(ctx);
            var typeOperand = this.typeOperand;

            var oper   = OperInfo;
            var method = oper.method;

            switch (ExpressionType)
            {
            case ExpressionType.TypeAs:
                return((invoke) => DefaultOperators.TypeAs(lhs(invoke), typeOperand));

            case ExpressionType.TypeIs:
                return((invoke) => DefaultOperators.TypeIs(lhs(invoke), typeOperand));
            }
            throw new NotImplementedException();
        }