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(); }
public void Visit(RelationalBranchDecision decision) { PutLabel(decision); output .AppendFormat( "if (x {0} {1}) goto {2}", decision.Operator.Negate().GetOpeatorText(), decision.Operand, GetLabelText(decision.Right)) .AppendLine(); GenerateCodeOrJump(decision.Left); strategy.IntermediateGenerateCode(); }