public override void Visit(RppRelationalBinOp node) { node.Left.Accept(this); node.Right.Accept(this); }
public override void Visit(RppRelationalBinOp node) { node.Left.Accept(this); node.Right.Accept(this); bool shouldJump = _targetLabel.HasValue; if (shouldJump) { OpCode cmpAndJumpOpCode; switch (node.Op) { case "<": cmpAndJumpOpCode = _onTrue ? OpCodes.Blt : OpCodes.Bge; break; case ">": cmpAndJumpOpCode = _onTrue ? OpCodes.Bgt : OpCodes.Ble; break; case "==": cmpAndJumpOpCode = _onTrue ? OpCodes.Beq : OpCodes.Bne_Un; break; case "!=": cmpAndJumpOpCode = _onTrue ? OpCodes.Bne_Un : OpCodes.Beq; break; case ">=": cmpAndJumpOpCode = _onTrue ? OpCodes.Bge : OpCodes.Blt; break; case "<=": cmpAndJumpOpCode = _onTrue ? OpCodes.Ble : OpCodes.Bgt; break; default: throw new Exception("Don't know how to handle " + node.Op); } _body.Emit(cmpAndJumpOpCode, _targetLabel.Value); Jumped = true; } else { switch (node.Op) { case "<": _body.Emit(OpCodes.Clt); break; case ">": _body.Emit(OpCodes.Cgt); break; case "==": _body.Emit(OpCodes.Ceq); break; case "!=": _body.Emit(OpCodes.Cgt_Un); break; case ">=": _body.Emit(OpCodes.Clt); _body.Emit(OpCodes.Ldc_I4_0); _body.Emit(OpCodes.Ceq); break; case "<=": _body.Emit(OpCodes.Cgt); _body.Emit(OpCodes.Ldc_I4_0); _body.Emit(OpCodes.Ceq); break; default: throw new Exception("Unknown op " + node.Op); } } }
public virtual void Visit(RppRelationalBinOp node) { }