/src/org/ooc/frontend/model/Ternary.java

http://github.com/nddrylliog/ooc · Java · 78 lines · 58 code · 15 blank · 5 comment · 6 complexity · c58e6546eef6a3e0282f9ef2d89159a3 MD5 · raw file

  1. package org.ooc.frontend.model;
  2. import java.io.IOException;
  3. import org.ooc.frontend.Visitor;
  4. import org.ooc.frontend.model.tokens.Token;
  5. /**
  6. * condition ? valueIfTrue else valueIfFalse
  7. *
  8. * @author Amos Wenger
  9. */
  10. public class Ternary extends Expression {
  11. public Ternary(Token startToken, Expression condition, Expression valueIfTrue, Expression valueIfFalse) {
  12. super(startToken);
  13. this.condition = condition;
  14. this.valueIfTrue = valueIfTrue;
  15. this.valueIfFalse = valueIfFalse;
  16. }
  17. private Expression condition;
  18. private Expression valueIfTrue;
  19. private Expression valueIfFalse;
  20. @Override
  21. public boolean replace(Node oldie, Node kiddo) {
  22. if(oldie == condition) {
  23. condition = (Expression) kiddo;
  24. return true;
  25. }
  26. if(oldie == valueIfTrue) {
  27. valueIfTrue = (Expression) kiddo;
  28. return true;
  29. }
  30. if(oldie == valueIfFalse) {
  31. valueIfFalse = (Expression) kiddo;
  32. return true;
  33. }
  34. return false;
  35. }
  36. public Type getType() {
  37. return valueIfTrue.getType();
  38. }
  39. public void accept(Visitor visitor) throws IOException {
  40. visitor.visit(this);
  41. }
  42. public void acceptChildren(Visitor visitor) throws IOException {
  43. condition.accept(visitor);
  44. valueIfTrue.accept(visitor);
  45. valueIfFalse.accept(visitor);
  46. }
  47. public boolean hasChildren() {
  48. return true;
  49. }
  50. public Expression getCondition() {
  51. return condition;
  52. }
  53. public Expression getValueIfTrue() {
  54. return valueIfTrue;
  55. }
  56. public Expression getValueIfFalse() {
  57. return valueIfFalse;
  58. }
  59. @Override
  60. public String toString() {
  61. return condition+" ? "+valueIfTrue+" : "+valueIfFalse;
  62. }
  63. }