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)); } }
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(); }