package CSU670_Plugin.gen;
import edu.neu.ccs.demeter.dj.*;
import edu.neu.ccs.demeter.aplib.cd.ClassDefVisitor;
import edu.neu.ccs.demeter.aplib.cd.ClassDef;
import java.io.*;
import java.util.*;
import edu.neu.ccs.demeter.*;
class SubgraphVisitor extends UniversalVisitor {
  protected boolean is_equal =  true ;
  public boolean get_is_equal() { return is_equal; }
  public void set_is_equal(boolean new_is_equal) { is_equal = new_is_equal; }
  public SubgraphVisitor() { super(); }
  public SubgraphVisitor(boolean is_equal) {
    super();
    set_is_equal(is_equal);
  }

    private java.util.Stack history = new java.util.Stack();
    public SubgraphVisitor(Object obj) {
      history.push(obj);
    }
  
  public void before_aspects(AspectFile source, Aspects dest) {
    if (is_equal) {
      AspectFile obj = (AspectFile) history.peek();
      Object temp1 = obj.get_aspects();
      if(temp1==null) { is_equal = false; return; }
      history.push(temp1);
    }
  }
  public void after_aspects(AspectFile source, Aspects dest) {
    if (is_equal) history.pop();
  }
  public void before(AspectFile host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_aspectbody(Aspect source, AspectBody dest) {
    if (is_equal) {
      Aspect obj = (Aspect) history.peek();
      Object temp2 = obj.get_aspectbody();
      if(temp2==null) { is_equal = false; return; }
      history.push(temp2);
    }
  }
  public void after_aspectbody(Aspect source, AspectBody dest) {
    if (is_equal) history.pop();
  }
  public void before(Aspect host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(AspectBody host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_aspectname(AspectCD source, AspectName dest) {
    if (is_equal) {
      AspectCD obj = (AspectCD) history.peek();
      Object temp3 = obj.get_aspectname();
      if(temp3==null) { is_equal = false; return; }
      history.push(temp3);
    }
  }
  public void after_aspectname(AspectCD source, AspectName dest) {
    if (is_equal) history.pop();
  }
  public void before_cdbody(AspectCD source, CDBody dest) {
    if (is_equal) {
      AspectCD obj = (AspectCD) history.peek();
      Object temp4 = obj.get_cdbody();
      if(temp4==null) { is_equal = false; return; }
      history.push(temp4);
    }
  }
  public void after_cdbody(AspectCD source, CDBody dest) {
    if (is_equal) history.pop();
  }
  public void before(AspectCD host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_aspectname(AspectTV source, AspectName dest) {
    if (is_equal) {
      AspectTV obj = (AspectTV) history.peek();
      Object temp5 = obj.get_aspectname();
      if(temp5==null) { is_equal = false; return; }
      history.push(temp5);
    }
  }
  public void after_aspectname(AspectTV source, AspectName dest) {
    if (is_equal) history.pop();
  }
  public void before_tvbody(AspectTV source, TVBody dest) {
    if (is_equal) {
      AspectTV obj = (AspectTV) history.peek();
      Object temp6 = obj.get_tvbody();
      if(temp6==null) { is_equal = false; return; }
      history.push(temp6);
    }
  }
  public void after_tvbody(AspectTV source, TVBody dest) {
    if (is_equal) history.pop();
  }
  public void before(AspectTV host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_tvdeclarations(TVBody source, TVDeclarations dest) {
    if (is_equal) {
      TVBody obj = (TVBody) history.peek();
      Object temp7 = obj.get_tvdeclarations();
      if(temp7==null) { is_equal = false; return; }
      history.push(temp7);
    }
  }
  public void after_tvdeclarations(TVBody source, TVDeclarations dest) {
    if (is_equal) history.pop();
  }
  public void before(TVBody host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_tvdeclarationbody(TVDeclaration source, TVDeclarationBody dest) {
    if (is_equal) {
      TVDeclaration obj = (TVDeclaration) history.peek();
      Object temp8 = obj.get_tvdeclarationbody();
      if(temp8==null) { is_equal = false; return; }
      history.push(temp8);
    }
  }
  public void after_tvdeclarationbody(TVDeclaration source, TVDeclarationBody dest) {
    if (is_equal) history.pop();
  }
  public void before(TVDeclaration host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(TVDeclarationBody host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_decchosenbody(DecChosen source, DecChosenBody dest) {
    if (is_equal) {
      DecChosen obj = (DecChosen) history.peek();
      Object temp9 = obj.get_decchosenbody();
      if(temp9==null) { is_equal = false; return; }
      history.push(temp9);
    }
  }
  public void after_decchosenbody(DecChosen source, DecChosenBody dest) {
    if (is_equal) history.pop();
  }
  public void before(DecChosen host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(DecChosenBody host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(ChosenSelector host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp10 = host.get_ident();
    Object temp11 = ((ChosenSelector) obj).get_ident();
    if(temp10 == null && temp11 == null) {}
    else if(temp10 == null ||
            temp11 == null ||
            !temp10.equals(temp11)) { is_equal = false; return; }
  }
  public void before(ChosenCD host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp12 = host.get_ident();
    Object temp13 = ((ChosenCD) obj).get_ident();
    if(temp12 == null && temp13 == null) {}
    else if(temp12 == null ||
            temp13 == null ||
            !temp12.equals(temp13)) { is_equal = false; return; }
  }
  public void before_decname(DecStrategy source, DecName dest) {
    if (is_equal) {
      DecStrategy obj = (DecStrategy) history.peek();
      Object temp14 = obj.get_decname();
      if(temp14==null) { is_equal = false; return; }
      history.push(temp14);
    }
  }
  public void after_decname(DecStrategy source, DecName dest) {
    if (is_equal) history.pop();
  }
  public void before_strategyexpression(DecStrategy source, StrategyExpression dest) {
    if (is_equal) {
      DecStrategy obj = (DecStrategy) history.peek();
      Object temp15 = obj.get_strategyexpression();
      if(temp15==null) { is_equal = false; return; }
      history.push(temp15);
    }
  }
  public void after_strategyexpression(DecStrategy source, StrategyExpression dest) {
    if (is_equal) history.pop();
  }
  public void before(DecStrategy host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_nodesubsetname(DecNodeSet source, NodeSubsetName dest) {
    if (is_equal) {
      DecNodeSet obj = (DecNodeSet) history.peek();
      Object temp16 = obj.get_nodesubsetname();
      if(temp16==null) { is_equal = false; return; }
      history.push(temp16);
    }
  }
  public void after_nodesubsetname(DecNodeSet source, NodeSubsetName dest) {
    if (is_equal) history.pop();
  }
  public void before_decnodesetbody(DecNodeSet source, DecNodeSetBody dest) {
    if (is_equal) {
      DecNodeSet obj = (DecNodeSet) history.peek();
      Object temp17 = obj.get_decnodesetbody();
      if(temp17==null) { is_equal = false; return; }
      history.push(temp17);
    }
  }
  public void after_decnodesetbody(DecNodeSet source, DecNodeSetBody dest) {
    if (is_equal) history.pop();
  }
  public void before(DecNodeSet host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(NodeSubsetName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp18 = host.get_ident();
    Object temp19 = ((NodeSubsetName) obj).get_ident();
    if(temp18 == null && temp19 == null) {}
    else if(temp18 == null ||
            temp19 == null ||
            !temp18.equals(temp19)) { is_equal = false; return; }
  }
  public void before(DecNodeSetBody host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Simple host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_op(BCompound source, BinaryOp dest) {
    if (is_equal) {
      BCompound obj = (BCompound) history.peek();
      Object temp20 = obj.get_op();
      if(temp20==null) { is_equal = false; return; }
      history.push(temp20);
    }
  }
  public void after_op(BCompound source, BinaryOp dest) {
    if (is_equal) history.pop();
  }
  public void before_args(BCompound source, DecNodeSetBody_PCList dest) {
    if (is_equal) {
      BCompound obj = (BCompound) history.peek();
      Object temp21 = obj.get_args();
      if(temp21==null) { is_equal = false; return; }
      history.push(temp21);
    }
  }
  public void after_args(BCompound source, DecNodeSetBody_PCList dest) {
    if (is_equal) history.pop();
  }
  public void before(BCompound host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_op(UCompound source, UnaryOp dest) {
    if (is_equal) {
      UCompound obj = (UCompound) history.peek();
      Object temp22 = obj.get_op();
      if(temp22==null) { is_equal = false; return; }
      history.push(temp22);
    }
  }
  public void after_op(UCompound source, UnaryOp dest) {
    if (is_equal) history.pop();
  }
  public void before_arg(UCompound source, DecNodeSetBody dest) {
    if (is_equal) {
      UCompound obj = (UCompound) history.peek();
      Object temp23 = obj.get_arg();
      if(temp23==null) { is_equal = false; return; }
      history.push(temp23);
    }
  }
  public void after_arg(UCompound source, DecNodeSetBody dest) {
    if (is_equal) history.pop();
  }
  public void before(UCompound host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Operator host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(BinaryOp host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(UnaryOp host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Union host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Intersection host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Complement host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_items(ClassNameSet source, ClassName_BCList dest) {
    if (is_equal) {
      ClassNameSet obj = (ClassNameSet) history.peek();
      Object temp24 = obj.get_items();
      if(temp24==null) { is_equal = false; return; }
      history.push(temp24);
    }
  }
  public void after_items(ClassNameSet source, ClassName_BCList dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassNameSet host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_decname(GraphNodes source, DecName dest) {
    if (is_equal) {
      GraphNodes obj = (GraphNodes) history.peek();
      Object temp25 = obj.get_decname();
      if(temp25==null) { is_equal = false; return; }
      history.push(temp25);
    }
  }
  public void after_decname(GraphNodes source, DecName dest) {
    if (is_equal) history.pop();
  }
  public void before(GraphNodes host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_classnameprefix(GraphNodeRegExp source, ClassNamePrefix dest) {
    if (is_equal) {
      GraphNodeRegExp obj = (GraphNodeRegExp) history.peek();
      Object temp26 = obj.get_classnameprefix();
      if(temp26==null) { is_equal = false; return; }
      history.push(temp26);
    }
  }
  public void after_classnameprefix(GraphNodeRegExp source, ClassNamePrefix dest) {
    if (is_equal) history.pop();
  }
  public void before_wildcard(GraphNodeRegExp source, WildCard dest) {
    if (is_equal) {
      GraphNodeRegExp obj = (GraphNodeRegExp) history.peek();
      Object temp27 = obj.get_wildcard();
      if(temp27==null) { is_equal = false; return; }
      history.push(temp27);
    }
  }
  public void after_wildcard(GraphNodeRegExp source, WildCard dest) {
    if (is_equal) history.pop();
  }
  public void before(GraphNodeRegExp host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(WildCard host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(AspectName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp28 = host.get_ident();
    Object temp29 = ((AspectName) obj).get_ident();
    if(temp28 == null && temp29 == null) {}
    else if(temp28 == null ||
            temp29 == null ||
            !temp28.equals(temp29)) { is_equal = false; return; }
  }
  public void before(ClassNamePrefix host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp30 = host.get_ident();
    Object temp31 = ((ClassNamePrefix) obj).get_ident();
    if(temp30 == null && temp31 == null) {}
    else if(temp30 == null ||
            temp31 == null ||
            !temp30.equals(temp31)) { is_equal = false; return; }
  }
  public void before(DecName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp32 = host.get_ident();
    Object temp33 = ((DecName) obj).get_ident();
    if(temp32 == null && temp33 == null) {}
    else if(temp32 == null ||
            temp33 == null ||
            !temp32.equals(temp33)) { is_equal = false; return; }
  }
  public void before(CDBody host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp34 = host.get_text();
    Object temp35 = ((CDBody) obj).get_text();
    if(temp34 == null && temp35 == null) {}
    else if(temp34 == null ||
            temp35 == null ||
            !temp34.equals(temp35)) { is_equal = false; return; }
  }
  public void before(Regexp host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_aspect_list(Aspects source, Aspect_List dest) {
    if (is_equal) {
      Aspects obj = (Aspects) history.peek();
      Object temp36 = obj.get_aspect_list();
      if(temp36==null) { is_equal = false; return; }
      history.push(temp36);
    }
  }
  public void after_aspect_list(Aspects source, Aspect_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Aspects host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_tvdeclaration_list(TVDeclarations source, TVDeclaration_List dest) {
    if (is_equal) {
      TVDeclarations obj = (TVDeclarations) history.peek();
      Object temp37 = obj.get_tvdeclaration_list();
      if(temp37==null) { is_equal = false; return; }
      history.push(temp37);
    }
  }
  public void after_tvdeclaration_list(TVDeclarations source, TVDeclaration_List dest) {
    if (is_equal) history.pop();
  }
  public void before(TVDeclarations host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Main host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_strategy(StrategyExpression source, Strategy dest) {
    if (is_equal) {
      StrategyExpression obj = (StrategyExpression) history.peek();
      Object temp38 = obj.get_strategy();
      if(temp38==null) { is_equal = false; return; }
      history.push(temp38);
    }
  }
  public void after_strategy(StrategyExpression source, Strategy dest) {
    if (is_equal) history.pop();
  }
  public void before(StrategyExpression host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Strategy host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_parsedNameMap(SimpleStrategy source, NameMap dest) {
    if (is_equal) {
      SimpleStrategy obj = (SimpleStrategy) history.peek();
      Object temp39 = obj.get_parsedNameMap();
      if(temp39==null) { is_equal = false; return; }
      history.push(temp39);
    }
  }
  public void after_parsedNameMap(SimpleStrategy source, NameMap dest) {
    if (is_equal) history.pop();
  }
  public void before(SimpleStrategy host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_edges(StrategyGraph source, SGEdge_SList dest) {
    if (is_equal) {
      StrategyGraph obj = (StrategyGraph) history.peek();
      Object temp40 = obj.get_edges();
      if(temp40==null) { is_equal = false; return; }
      history.push(temp40);
    }
  }
  public void after_edges(StrategyGraph source, SGEdge_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(StrategyGraph host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_sourcemarker(SGEdge source, SourceMarker dest) {
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      Object temp41 = obj.get_sourcemarker();
      if(temp41==null) { is_equal = false; return; }
      history.push(temp41);
    }
  }
  public void after_sourcemarker(SGEdge source, SourceMarker dest) {
    if (is_equal) history.pop();
  }
  public void before_source(SGEdge source, GlobSpec dest) {
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      Object temp42 = obj.get_source();
      if(temp42==null) { is_equal = false; return; }
      history.push(temp42);
    }
  }
  public void after_source(SGEdge source, GlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before_targetmarker(SGEdge source, TargetMarker dest) {
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      Object temp43 = obj.get_targetmarker();
      if(temp43==null) { is_equal = false; return; }
      history.push(temp43);
    }
  }
  public void after_targetmarker(SGEdge source, TargetMarker dest) {
    if (is_equal) history.pop();
  }
  public void before_target(SGEdge source, GlobSpec dest) {
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      Object temp44 = obj.get_target();
      if(temp44==null) { is_equal = false; return; }
      history.push(temp44);
    }
  }
  public void after_target(SGEdge source, GlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before_constraint(SGEdge source, NegativeConstraint dest) {
    if (is_equal) {
      SGEdge obj = (SGEdge) history.peek();
      Object temp45 = obj.get_constraint();
      if(temp45==null) { is_equal = false; return; }
      history.push(temp45);
    }
  }
  public void after_constraint(SGEdge source, NegativeConstraint dest) {
    if (is_equal) history.pop();
  }
  public void before(SGEdge host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(SourceMarker host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(TargetMarker host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_source(PathDirective source, SourceDirective dest) {
    if (is_equal) {
      PathDirective obj = (PathDirective) history.peek();
      Object temp46 = obj.get_source();
      if(temp46==null) { is_equal = false; return; }
      history.push(temp46);
    }
  }
  public void after_source(PathDirective source, SourceDirective dest) {
    if (is_equal) history.pop();
  }
  public void before_constraint(PathDirective source, NegativeConstraint dest) {
    if (is_equal) {
      PathDirective obj = (PathDirective) history.peek();
      Object temp47 = obj.get_constraint();
      if(temp47==null) { is_equal = false; return; }
      history.push(temp47);
    }
  }
  public void after_constraint(PathDirective source, NegativeConstraint dest) {
    if (is_equal) history.pop();
  }
  public void before_segments(PathDirective source, PathSegment_List dest) {
    if (is_equal) {
      PathDirective obj = (PathDirective) history.peek();
      Object temp48 = obj.get_segments();
      if(temp48==null) { is_equal = false; return; }
      history.push(temp48);
    }
  }
  public void after_segments(PathDirective source, PathSegment_List dest) {
    if (is_equal) history.pop();
  }
  public void before_target(PathDirective source, TargetDirective dest) {
    if (is_equal) {
      PathDirective obj = (PathDirective) history.peek();
      Object temp49 = obj.get_target();
      if(temp49==null) { is_equal = false; return; }
      history.push(temp49);
    }
  }
  public void after_target(PathDirective source, TargetDirective dest) {
    if (is_equal) history.pop();
  }
  public void before(PathDirective host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_sources(SourceDirective source, ClassGlobSpec dest) {
    if (is_equal) {
      SourceDirective obj = (SourceDirective) history.peek();
      Object temp50 = obj.get_sources();
      if(temp50==null) { is_equal = false; return; }
      history.push(temp50);
    }
  }
  public void after_sources(SourceDirective source, ClassGlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before(SourceDirective host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(From host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_node(PathSegment source, PositiveConstraint dest) {
    if (is_equal) {
      PathSegment obj = (PathSegment) history.peek();
      Object temp51 = obj.get_node();
      if(temp51==null) { is_equal = false; return; }
      history.push(temp51);
    }
  }
  public void after_node(PathSegment source, PositiveConstraint dest) {
    if (is_equal) history.pop();
  }
  public void before_constraint(PathSegment source, NegativeConstraint dest) {
    if (is_equal) {
      PathSegment obj = (PathSegment) history.peek();
      Object temp52 = obj.get_constraint();
      if(temp52==null) { is_equal = false; return; }
      history.push(temp52);
    }
  }
  public void after_constraint(PathSegment source, NegativeConstraint dest) {
    if (is_equal) history.pop();
  }
  public void before(PathSegment host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_glob(Constraint source, GlobSpec dest) {
    if (is_equal) {
      Constraint obj = (Constraint) history.peek();
      Object temp53 = obj.get_glob();
      if(temp53==null) { is_equal = false; return; }
      history.push(temp53);
    }
  }
  public void after_glob(Constraint source, GlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before(Constraint host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(PositiveConstraint host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Through host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Via host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(NegativeConstraint host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Bypassing host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(OnlyThrough host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_targets(TargetDirective source, ClassGlobSpec dest) {
    if (is_equal) {
      TargetDirective obj = (TargetDirective) history.peek();
      Object temp54 = obj.get_targets();
      if(temp54==null) { is_equal = false; return; }
      history.push(temp54);
    }
  }
  public void after_targets(TargetDirective source, ClassGlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before(TargetDirective host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(To host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(ToStop host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_first(StrategyCombination source, Strategy dest) {
    if (is_equal) {
      StrategyCombination obj = (StrategyCombination) history.peek();
      Object temp55 = obj.get_first();
      if(temp55==null) { is_equal = false; return; }
      history.push(temp55);
    }
  }
  public void after_first(StrategyCombination source, Strategy dest) {
    if (is_equal) history.pop();
  }
  public void before_rest(StrategyCombination source, Strategy_Commalist dest) {
    if (is_equal) {
      StrategyCombination obj = (StrategyCombination) history.peek();
      Object temp56 = obj.get_rest();
      if(temp56==null) { is_equal = false; return; }
      history.push(temp56);
    }
  }
  public void after_rest(StrategyCombination source, Strategy_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(StrategyCombination host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Join host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Merge host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Intersect host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(StrategyReference host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp57 = host.get_ident();
    Object temp58 = ((StrategyReference) obj).get_ident();
    if(temp57 == null && temp58 == null) {}
    else if(temp57 == null ||
            temp58 == null ||
            !temp57.equals(temp58)) { is_equal = false; return; }
  }
  public void before(SymbolicNameMap host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_bindings(NameMap source, NameBinding_Commalist dest) {
    if (is_equal) {
      NameMap obj = (NameMap) history.peek();
      Object temp59 = obj.get_bindings();
      if(temp59==null) { is_equal = false; return; }
      history.push(temp59);
    }
  }
  public void after_bindings(NameMap source, NameBinding_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(NameMap host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_sgName(NameBinding source, Name dest) {
    if (is_equal) {
      NameBinding obj = (NameBinding) history.peek();
      Object temp60 = obj.get_sgName();
      if(temp60==null) { is_equal = false; return; }
      history.push(temp60);
    }
  }
  public void after_sgName(NameBinding source, Name dest) {
    if (is_equal) history.pop();
  }
  public void before_cgNames(NameBinding source, ClassGlobSpec dest) {
    if (is_equal) {
      NameBinding obj = (NameBinding) history.peek();
      Object temp61 = obj.get_cgNames();
      if(temp61==null) { is_equal = false; return; }
      history.push(temp61);
    }
  }
  public void after_cgNames(NameBinding source, ClassGlobSpec dest) {
    if (is_equal) history.pop();
  }
  public void before(NameBinding host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(GlobSpec host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_glob(OneGlob source, Glob dest) {
    if (is_equal) {
      OneGlob obj = (OneGlob) history.peek();
      Object temp62 = obj.get_glob();
      if(temp62==null) { is_equal = false; return; }
      history.push(temp62);
    }
  }
  public void after_glob(OneGlob source, Glob dest) {
    if (is_equal) history.pop();
  }
  public void before(OneGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_globs(GlobSet source, Glob_Commalist dest) {
    if (is_equal) {
      GlobSet obj = (GlobSet) history.peek();
      Object temp63 = obj.get_globs();
      if(temp63==null) { is_equal = false; return; }
      history.push(temp63);
    }
  }
  public void after_globs(GlobSet source, Glob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(GlobSet host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(Glob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(EdgeGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_name(ClassGlob source, ClassNameGlob dest) {
    if (is_equal) {
      ClassGlob obj = (ClassGlob) history.peek();
      Object temp64 = obj.get_name();
      if(temp64==null) { is_equal = false; return; }
      history.push(temp64);
    }
  }
  public void after_name(ClassGlob source, ClassNameGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_source(PartGlob source, SourceGlob dest) {
    if (is_equal) {
      PartGlob obj = (PartGlob) history.peek();
      Object temp65 = obj.get_source();
      if(temp65==null) { is_equal = false; return; }
      history.push(temp65);
    }
  }
  public void after_source(PartGlob source, SourceGlob dest) {
    if (is_equal) history.pop();
  }
  public void before_name(PartGlob source, PartNameGlob dest) {
    if (is_equal) {
      PartGlob obj = (PartGlob) history.peek();
      Object temp66 = obj.get_name();
      if(temp66==null) { is_equal = false; return; }
      history.push(temp66);
    }
  }
  public void after_name(PartGlob source, PartNameGlob dest) {
    if (is_equal) history.pop();
  }
  public void before_target(PartGlob source, TargetGlob dest) {
    if (is_equal) {
      PartGlob obj = (PartGlob) history.peek();
      Object temp67 = obj.get_target();
      if(temp67==null) { is_equal = false; return; }
      history.push(temp67);
    }
  }
  public void after_target(PartGlob source, TargetGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(PartGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_source(SubclassGlob source, SourceGlob dest) {
    if (is_equal) {
      SubclassGlob obj = (SubclassGlob) history.peek();
      Object temp68 = obj.get_source();
      if(temp68==null) { is_equal = false; return; }
      history.push(temp68);
    }
  }
  public void after_source(SubclassGlob source, SourceGlob dest) {
    if (is_equal) history.pop();
  }
  public void before_target(SubclassGlob source, TargetGlob dest) {
    if (is_equal) {
      SubclassGlob obj = (SubclassGlob) history.peek();
      Object temp69 = obj.get_target();
      if(temp69==null) { is_equal = false; return; }
      history.push(temp69);
    }
  }
  public void after_target(SubclassGlob source, TargetGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(SubclassGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_source(SuperclassGlob source, SourceGlob dest) {
    if (is_equal) {
      SuperclassGlob obj = (SuperclassGlob) history.peek();
      Object temp70 = obj.get_source();
      if(temp70==null) { is_equal = false; return; }
      history.push(temp70);
    }
  }
  public void after_source(SuperclassGlob source, SourceGlob dest) {
    if (is_equal) history.pop();
  }
  public void before_target(SuperclassGlob source, TargetGlob dest) {
    if (is_equal) {
      SuperclassGlob obj = (SuperclassGlob) history.peek();
      Object temp71 = obj.get_target();
      if(temp71==null) { is_equal = false; return; }
      history.push(temp71);
    }
  }
  public void after_target(SuperclassGlob source, TargetGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(SuperclassGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_name(SourceGlob source, ClassNameGlob dest) {
    if (is_equal) {
      SourceGlob obj = (SourceGlob) history.peek();
      Object temp72 = obj.get_name();
      if(temp72==null) { is_equal = false; return; }
      history.push(temp72);
    }
  }
  public void after_name(SourceGlob source, ClassNameGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(SourceGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_name(TargetGlob source, ClassNameGlob dest) {
    if (is_equal) {
      TargetGlob obj = (TargetGlob) history.peek();
      Object temp73 = obj.get_name();
      if(temp73==null) { is_equal = false; return; }
      history.push(temp73);
    }
  }
  public void after_name(TargetGlob source, ClassNameGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(TargetGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(ClassNameGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_classname(ClassNameExact source, ClassName dest) {
    if (is_equal) {
      ClassNameExact obj = (ClassNameExact) history.peek();
      Object temp74 = obj.get_classname();
      if(temp74==null) { is_equal = false; return; }
      history.push(temp74);
    }
  }
  public void after_classname(ClassNameExact source, ClassName dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassNameExact host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(AnyClass host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(PartNameGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_partname(PartNameExact source, PartName dest) {
    if (is_equal) {
      PartNameExact obj = (PartNameExact) history.peek();
      Object temp75 = obj.get_partname();
      if(temp75==null) { is_equal = false; return; }
      history.push(temp75);
    }
  }
  public void after_partname(PartNameExact source, PartName dest) {
    if (is_equal) history.pop();
  }
  public void before(PartNameExact host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(AnyPart host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(ClassGlobSpec host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_classglob(OneClassGlob source, ClassGlob dest) {
    if (is_equal) {
      OneClassGlob obj = (OneClassGlob) history.peek();
      Object temp76 = obj.get_classglob();
      if(temp76==null) { is_equal = false; return; }
      history.push(temp76);
    }
  }
  public void after_classglob(OneClassGlob source, ClassGlob dest) {
    if (is_equal) history.pop();
  }
  public void before(OneClassGlob host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_globs(ClassGlobSet source, ClassGlob_Commalist dest) {
    if (is_equal) {
      ClassGlobSet obj = (ClassGlobSet) history.peek();
      Object temp77 = obj.get_globs();
      if(temp77==null) { is_equal = false; return; }
      history.push(temp77);
    }
  }
  public void after_globs(ClassGlobSet source, ClassGlob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassGlobSet host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_name(ClassName source, Name dest) {
    if (is_equal) {
      ClassName obj = (ClassName) history.peek();
      Object temp78 = obj.get_name();
      if(temp78==null) { is_equal = false; return; }
      history.push(temp78);
    }
  }
  public void after_name(ClassName source, Name dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(PartName host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp79 = host.get_name();
    Object temp80 = ((PartName) obj).get_name();
    if(temp79 == null && temp80 == null) {}
    else if(temp79 == null ||
            temp80 == null ||
            !temp79.equals(temp80)) { is_equal = false; return; }
  }
  public void before_first(Name source, Nonempty_Name dest) {
    if (is_equal) {
      Name obj = (Name) history.peek();
      Object temp81 = obj.get_first();
      if(temp81==null) { is_equal = false; return; }
      history.push(temp81);
    }
  }
  public void after_first(Name source, Nonempty_Name dest) {
    if (is_equal) history.pop();
  }
  public void before(Name host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(GlobVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before(PrintVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((PrintVisitor) obj).get_indent();
    is_equal = is_equal && host.get_needSpace() == ((PrintVisitor) obj).get_needSpace();
  }
  public void before(CopyVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp82 = host.get_copy();
    Object temp83 = ((CopyVisitor) obj).get_copy();
    if(temp82 == null && temp83 == null) {}
    else if(temp82 == null ||
            temp83 == null ||
            !temp82.equals(temp83)) { is_equal = false; return; }
  }
  public void before(SubgraphVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_is_equal() == ((SubgraphVisitor) obj).get_is_equal();
  }
  public void before(EqualVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_is_equal() == ((EqualVisitor) obj).get_is_equal();
  }
  public void before(DisplayVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((DisplayVisitor) obj).get_indent();
  }
  public void before(TraceVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((TraceVisitor) obj).get_indent();
  }
  public void before(UniversalVisitor host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_first(DecNodeSetBody_PCList source, Nonempty_DecNodeSetBody_PCList dest) {
    if (is_equal) {
      DecNodeSetBody_PCList obj = (DecNodeSetBody_PCList) history.peek();
      Object temp84 = obj.get_first();
      if(temp84==null) { is_equal = false; return; }
      history.push(temp84);
    }
  }
  public void after_first(DecNodeSetBody_PCList source, Nonempty_DecNodeSetBody_PCList dest) {
    if (is_equal) history.pop();
  }
  public void before(DecNodeSetBody_PCList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_first(ClassName_BCList source, Nonempty_ClassName_BCList dest) {
    if (is_equal) {
      ClassName_BCList obj = (ClassName_BCList) history.peek();
      Object temp85 = obj.get_first();
      if(temp85==null) { is_equal = false; return; }
      history.push(temp85);
    }
  }
  public void after_first(ClassName_BCList source, Nonempty_ClassName_BCList dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassName_BCList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_first(Aspect_List source, Nonempty_Aspect_List dest) {
    if (is_equal) {
      Aspect_List obj = (Aspect_List) history.peek();
      Object temp86 = obj.get_first();
      if(temp86==null) { is_equal = false; return; }
      history.push(temp86);
    }
  }
  public void after_first(Aspect_List source, Nonempty_Aspect_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Aspect_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_first(TVDeclaration_List source, Nonempty_TVDeclaration_List dest) {
    if (is_equal) {
      TVDeclaration_List obj = (TVDeclaration_List) history.peek();
      Object temp87 = obj.get_first();
      if(temp87==null) { is_equal = false; return; }
      history.push(temp87);
    }
  }
  public void after_first(TVDeclaration_List source, Nonempty_TVDeclaration_List dest) {
    if (is_equal) history.pop();
  }
  public void before(TVDeclaration_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_first(SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    if (is_equal) {
      SGEdge_SList obj = (SGEdge_SList) history.peek();
      Object temp88 = obj.get_first();
      if(temp88==null) { is_equal = false; return; }
      history.push(temp88);
    }
  }
  public void after_first(SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(SGEdge_SList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_first(PathSegment_List source, Nonempty_PathSegment_List dest) {
    if (is_equal) {
      PathSegment_List obj = (PathSegment_List) history.peek();
      Object temp89 = obj.get_first();
      if(temp89==null) { is_equal = false; return; }
      history.push(temp89);
    }
  }
  public void after_first(PathSegment_List source, Nonempty_PathSegment_List dest) {
    if (is_equal) history.pop();
  }
  public void before(PathSegment_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_first(Strategy_Commalist source, Nonempty_Strategy_Commalist dest) {
    if (is_equal) {
      Strategy_Commalist obj = (Strategy_Commalist) history.peek();
      Object temp90 = obj.get_first();
      if(temp90==null) { is_equal = false; return; }
      history.push(temp90);
    }
  }
  public void after_first(Strategy_Commalist source, Nonempty_Strategy_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Strategy_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_first(NameBinding_Commalist source, Nonempty_NameBinding_Commalist dest) {
    if (is_equal) {
      NameBinding_Commalist obj = (NameBinding_Commalist) history.peek();
      Object temp91 = obj.get_first();
      if(temp91==null) { is_equal = false; return; }
      history.push(temp91);
    }
  }
  public void after_first(NameBinding_Commalist source, Nonempty_NameBinding_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(NameBinding_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_first(Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    if (is_equal) {
      Glob_Commalist obj = (Glob_Commalist) history.peek();
      Object temp92 = obj.get_first();
      if(temp92==null) { is_equal = false; return; }
      history.push(temp92);
    }
  }
  public void after_first(Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Glob_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_first(ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    if (is_equal) {
      ClassGlob_Commalist obj = (ClassGlob_Commalist) history.peek();
      Object temp93 = obj.get_first();
      if(temp93==null) { is_equal = false; return; }
      history.push(temp93);
    }
  }
  public void after_first(ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(ClassGlob_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_next(Nonempty_Name source, Nonempty_Name dest) {
    if (is_equal) {
      Nonempty_Name obj = (Nonempty_Name) history.peek();
      Object temp96 = obj.get_next();
      if(temp96==null) { is_equal = false; return; }
      history.push(temp96);
    }
  }
  public void after_next(Nonempty_Name source, Nonempty_Name dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Name host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp94 = host.get_it();
    Object temp95 = ((Nonempty_Name) obj).get_it();
    if(temp94 == null && temp95 == null) {}
    else if(temp94 == null ||
            temp95 == null ||
            !temp94.equals(temp95)) { is_equal = false; return; }
  }
  public void before_it(Nonempty_DecNodeSetBody_PCList source, DecNodeSetBody dest) {
    if (is_equal) {
      Nonempty_DecNodeSetBody_PCList obj = (Nonempty_DecNodeSetBody_PCList) history.peek();
      Object temp97 = obj.get_it();
      if(temp97==null) { is_equal = false; return; }
      history.push(temp97);
    }
  }
  public void after_it(Nonempty_DecNodeSetBody_PCList source, DecNodeSetBody dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_DecNodeSetBody_PCList source, Nonempty_DecNodeSetBody_PCList dest) {
    if (is_equal) {
      Nonempty_DecNodeSetBody_PCList obj = (Nonempty_DecNodeSetBody_PCList) history.peek();
      Object temp98 = obj.get_next();
      if(temp98==null) { is_equal = false; return; }
      history.push(temp98);
    }
  }
  public void after_next(Nonempty_DecNodeSetBody_PCList source, Nonempty_DecNodeSetBody_PCList dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_DecNodeSetBody_PCList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_it(Nonempty_ClassName_BCList source, ClassName dest) {
    if (is_equal) {
      Nonempty_ClassName_BCList obj = (Nonempty_ClassName_BCList) history.peek();
      Object temp99 = obj.get_it();
      if(temp99==null) { is_equal = false; return; }
      history.push(temp99);
    }
  }
  public void after_it(Nonempty_ClassName_BCList source, ClassName dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_ClassName_BCList source, Nonempty_ClassName_BCList dest) {
    if (is_equal) {
      Nonempty_ClassName_BCList obj = (Nonempty_ClassName_BCList) history.peek();
      Object temp100 = obj.get_next();
      if(temp100==null) { is_equal = false; return; }
      history.push(temp100);
    }
  }
  public void after_next(Nonempty_ClassName_BCList source, Nonempty_ClassName_BCList dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_ClassName_BCList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_it(Nonempty_Aspect_List source, Aspect dest) {
    if (is_equal) {
      Nonempty_Aspect_List obj = (Nonempty_Aspect_List) history.peek();
      Object temp101 = obj.get_it();
      if(temp101==null) { is_equal = false; return; }
      history.push(temp101);
    }
  }
  public void after_it(Nonempty_Aspect_List source, Aspect dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Aspect_List source, Nonempty_Aspect_List dest) {
    if (is_equal) {
      Nonempty_Aspect_List obj = (Nonempty_Aspect_List) history.peek();
      Object temp102 = obj.get_next();
      if(temp102==null) { is_equal = false; return; }
      history.push(temp102);
    }
  }
  public void after_next(Nonempty_Aspect_List source, Nonempty_Aspect_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Aspect_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_it(Nonempty_TVDeclaration_List source, TVDeclaration dest) {
    if (is_equal) {
      Nonempty_TVDeclaration_List obj = (Nonempty_TVDeclaration_List) history.peek();
      Object temp103 = obj.get_it();
      if(temp103==null) { is_equal = false; return; }
      history.push(temp103);
    }
  }
  public void after_it(Nonempty_TVDeclaration_List source, TVDeclaration dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_TVDeclaration_List source, Nonempty_TVDeclaration_List dest) {
    if (is_equal) {
      Nonempty_TVDeclaration_List obj = (Nonempty_TVDeclaration_List) history.peek();
      Object temp104 = obj.get_next();
      if(temp104==null) { is_equal = false; return; }
      history.push(temp104);
    }
  }
  public void after_next(Nonempty_TVDeclaration_List source, Nonempty_TVDeclaration_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_TVDeclaration_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_it(Nonempty_SGEdge_SList source, SGEdge dest) {
    if (is_equal) {
      Nonempty_SGEdge_SList obj = (Nonempty_SGEdge_SList) history.peek();
      Object temp105 = obj.get_it();
      if(temp105==null) { is_equal = false; return; }
      history.push(temp105);
    }
  }
  public void after_it(Nonempty_SGEdge_SList source, SGEdge dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    if (is_equal) {
      Nonempty_SGEdge_SList obj = (Nonempty_SGEdge_SList) history.peek();
      Object temp106 = obj.get_next();
      if(temp106==null) { is_equal = false; return; }
      history.push(temp106);
    }
  }
  public void after_next(Nonempty_SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_SGEdge_SList host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_it(Nonempty_PathSegment_List source, PathSegment dest) {
    if (is_equal) {
      Nonempty_PathSegment_List obj = (Nonempty_PathSegment_List) history.peek();
      Object temp107 = obj.get_it();
      if(temp107==null) { is_equal = false; return; }
      history.push(temp107);
    }
  }
  public void after_it(Nonempty_PathSegment_List source, PathSegment dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_PathSegment_List source, Nonempty_PathSegment_List dest) {
    if (is_equal) {
      Nonempty_PathSegment_List obj = (Nonempty_PathSegment_List) history.peek();
      Object temp108 = obj.get_next();
      if(temp108==null) { is_equal = false; return; }
      history.push(temp108);
    }
  }
  public void after_next(Nonempty_PathSegment_List source, Nonempty_PathSegment_List dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_PathSegment_List host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_it(Nonempty_Strategy_Commalist source, Strategy dest) {
    if (is_equal) {
      Nonempty_Strategy_Commalist obj = (Nonempty_Strategy_Commalist) history.peek();
      Object temp109 = obj.get_it();
      if(temp109==null) { is_equal = false; return; }
      history.push(temp109);
    }
  }
  public void after_it(Nonempty_Strategy_Commalist source, Strategy dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Strategy_Commalist source, Nonempty_Strategy_Commalist dest) {
    if (is_equal) {
      Nonempty_Strategy_Commalist obj = (Nonempty_Strategy_Commalist) history.peek();
      Object temp110 = obj.get_next();
      if(temp110==null) { is_equal = false; return; }
      history.push(temp110);
    }
  }
  public void after_next(Nonempty_Strategy_Commalist source, Nonempty_Strategy_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Strategy_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_it(Nonempty_NameBinding_Commalist source, NameBinding dest) {
    if (is_equal) {
      Nonempty_NameBinding_Commalist obj = (Nonempty_NameBinding_Commalist) history.peek();
      Object temp111 = obj.get_it();
      if(temp111==null) { is_equal = false; return; }
      history.push(temp111);
    }
  }
  public void after_it(Nonempty_NameBinding_Commalist source, NameBinding dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_NameBinding_Commalist source, Nonempty_NameBinding_Commalist dest) {
    if (is_equal) {
      Nonempty_NameBinding_Commalist obj = (Nonempty_NameBinding_Commalist) history.peek();
      Object temp112 = obj.get_next();
      if(temp112==null) { is_equal = false; return; }
      history.push(temp112);
    }
  }
  public void after_next(Nonempty_NameBinding_Commalist source, Nonempty_NameBinding_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_NameBinding_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_it(Nonempty_Glob_Commalist source, Glob dest) {
    if (is_equal) {
      Nonempty_Glob_Commalist obj = (Nonempty_Glob_Commalist) history.peek();
      Object temp113 = obj.get_it();
      if(temp113==null) { is_equal = false; return; }
      history.push(temp113);
    }
  }
  public void after_it(Nonempty_Glob_Commalist source, Glob dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    if (is_equal) {
      Nonempty_Glob_Commalist obj = (Nonempty_Glob_Commalist) history.peek();
      Object temp114 = obj.get_next();
      if(temp114==null) { is_equal = false; return; }
      history.push(temp114);
    }
  }
  public void after_next(Nonempty_Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_Glob_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  public void before_it(Nonempty_ClassGlob_Commalist source, ClassGlob dest) {
    if (is_equal) {
      Nonempty_ClassGlob_Commalist obj = (Nonempty_ClassGlob_Commalist) history.peek();
      Object temp115 = obj.get_it();
      if(temp115==null) { is_equal = false; return; }
      history.push(temp115);
    }
  }
  public void after_it(Nonempty_ClassGlob_Commalist source, ClassGlob dest) {
    if (is_equal) history.pop();
  }
  public void before_next(Nonempty_ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    if (is_equal) {
      Nonempty_ClassGlob_Commalist obj = (Nonempty_ClassGlob_Commalist) history.peek();
      Object temp116 = obj.get_next();
      if(temp116==null) { is_equal = false; return; }
      history.push(temp116);
    }
  }
  public void after_next(Nonempty_ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    if (is_equal) history.pop();
  }
  public void before(Nonempty_ClassGlob_Commalist host) {
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }
  boolean get_return_val() { return is_equal ; }
  void universal_trv0_bef(UniversalVisitor _v_) {
    super.universal_trv0_bef(_v_);
  }

  void universal_trv0_aft(UniversalVisitor _v_) {
    super.universal_trv0_aft(_v_);
  }

  void universal_trv0(UniversalVisitor _v_) {
    universal_trv0_bef(_v_);
    super.universal_trv0(_v_);
    universal_trv0_aft(_v_);
  }

}
