@Override
 public AstNode whileLoop(AstNode condition, AstNode body) {
   WhileLoop w = new WhileLoop();
   w.setCondition(condition);
   w.setBody(body);
   return w;
 }
  /**
   * @param node The node we want to have wrapped.
   * @return The (new) node parent (the block probably)
   */
  private AstNode makeSureBlockExistsAround(AstNode node) {
    AstNode parent = node.getParent();

    if (parent instanceof IfStatement) {
      /* the parent is an if and there are no braces, so we should make a new block */
      IfStatement i = (IfStatement) parent;

      /* replace the if or the then, depending on what the current node is */
      if (i.getThenPart().equals(node)) {
        i.setThenPart(createBlockWithNode(node));
      } else if (i.getElsePart() != null) {
        if (i.getElsePart().equals(node)) i.setElsePart(createBlockWithNode(node));
      }

    } else if (parent instanceof WhileLoop) {
      /* the parent is a while and there are no braces, so we should make a new block */
      /* I don't think you can find this in the real world, but just to be sure */
      WhileLoop w = (WhileLoop) parent;
      if (w.getBody().equals(node)) w.setBody(createBlockWithNode(node));
    } else if (parent instanceof ForLoop) {
      /* the parent is a for and there are no braces, so we should make a new block */
      /* I don't think you can find this in the real world, but just to be sure */
      ForLoop f = (ForLoop) parent;
      if (f.getBody().equals(node)) f.setBody(createBlockWithNode(node));
    }

    return node.getParent();
  }