void IDecisionVisitor.Visit(RelationalBranchDecision decision) { emit .Label(GetNodeLabel(decision).Def) .Do(ldvalue) .Ldc_I4(decision.Operand) ; var label = GetNodeLabel(decision.Right); switch (decision.Operator.Negate()) { case RelationalOperator.Equal: emit.Beq(label); break; case RelationalOperator.NotEqual: emit.Bne_Un(label); break; case RelationalOperator.Less: emit.Blt(label); break; case RelationalOperator.Greater: emit.Bgt(label); break; case RelationalOperator.LessOrEqual: emit.Ble(label); break; case RelationalOperator.GreaterOrEqual: emit.Bge(label); break; default: throw new InvalidOperationException("Not supported operator"); } GenerateCodeOrJump(decision.Left); strategy.IntermediateGenerateCode(); }