@Override
 public void caseAIfStmt(AIfStmt node) {
   inAIfStmt(node);
   if (node.getN2() != null) {
     node.getN2().apply(this);
   }
   if (node.getI2() != null) {
     node.getI2().apply(this);
   }
   if (node.getEnd() != null) {
     node.getEnd().apply(this);
   }
   if (node.getOptElse() != null) {
     node.getOptElse().apply(this);
   }
   {
     List<PStmt> copy = new ArrayList<PStmt>(node.getStmt());
     Collections.reverse(copy);
     for (PStmt e : copy) {
       e.apply(this);
     }
   }
   if (node.getN1() != null) {
     node.getN1().apply(this);
   }
   if (node.getThen() != null) {
     node.getThen().apply(this);
   }
   if (node.getExpr() != null) {
     node.getExpr().apply(this);
   }
   if (node.getI1() != null) {
     node.getI1().apply(this);
   }
   outAIfStmt(node);
 }
 @Override
 public void caseAIfStmt(AIfStmt node) {
   inAIfStmt(node);
   if (node.getIf() != null) {
     node.getIf().apply(this);
   }
   if (node.getLparen() != null) {
     node.getLparen().apply(this);
   }
   if (node.getExpr() != null) {
     node.getExpr().apply(this);
   }
   if (node.getRparen() != null) {
     node.getRparen().apply(this);
   }
   if (node.getThenclause() != null) {
     node.getThenclause().apply(this);
   }
   if (node.getElse() != null) {
     node.getElse().apply(this);
   }
   if (node.getElseclause() != null) {
     node.getElseclause().apply(this);
   }
   outAIfStmt(node);
 }