core: import edu.neu.ccs.demeter.dj.*; import java.util.*; import edu.neu.ccs.demeter.*; add: class CopyVisitor extends UniversalVisitor { public constructor CopyVisitor() {{ super(); }} {{ private java.util.Stack history = new java.util.Stack(); public CopyVisitor(Class firstClass) { try { history.push(firstClass.newInstance()); } catch(Exception e) { e.printStackTrace(); } } }} public Object get_copy() {{ return history.peek(); }} Object get_return_val() {{ return get_copy() ; }} public void before_adjacencies(Cd_graph source, Adjacency_Nlist dest) {{ Cd_graph it = (Cd_graph) history.peek(); Adjacency_Nlist p = new Adjacency_Nlist(); it.set_adjacencies(p); history.push(p); }} public void after_adjacencies(Cd_graph source, Adjacency_Nlist dest) {{ history.pop(); }} public void before_source(Adjacency source, Vertex dest) {{ Adjacency it = (Adjacency) history.peek(); Vertex p = new Vertex(); it.set_source(p); history.push(p); }} public void after_source(Adjacency source, Vertex dest) {{ history.pop(); }} public void before_ns(Adjacency source, Neighbors dest) {{ Adjacency it = (Adjacency) history.peek(); Class c = dest.getClass(); Object p = null; try { p = c.newInstance(); } catch(Exception e) { e.printStackTrace(); } it.set_ns((Neighbors) p); history.push(p); }} public void after_ns(Adjacency source, Neighbors dest) {{ history.pop(); }} public void before_construct_ns(Neighbors_wc source, Any_vertex_List dest) {{ Neighbors_wc it = (Neighbors_wc) history.peek(); Any_vertex_List p = new Any_vertex_List(); it.set_construct_ns(p); history.push(p); }} public void after_construct_ns(Neighbors_wc source, Any_vertex_List dest) {{ history.pop(); }} public void before_alternat_ns(Alternat_ns source, Term_Bar_list dest) {{ Alternat_ns it = (Alternat_ns) history.peek(); Term_Bar_list p = new Term_Bar_list(); it.set_alternat_ns(p); history.push(p); }} public void after_alternat_ns(Alternat_ns source, Term_Bar_list dest) {{ history.pop(); }} public void before_common(Alternat_ns source, Common dest) {{ Alternat_ns it = (Alternat_ns) history.peek(); Common p = new Common(); it.set_common(p); history.push(p); }} public void after_common(Alternat_ns source, Common dest) {{ history.pop(); }} public void before_vertex_name(Vertex source, Ident dest) {{ Vertex it = (Vertex) history.peek(); it.set_vertex_name(dest); }} public void before_string(Regular_syntax source, String dest) {{ Regular_syntax it = (Regular_syntax) history.peek(); it.set_string(dest); }} public void before_vertex(Opt_labeled_term source, Term dest) {{ Opt_labeled_term it = (Opt_labeled_term) history.peek(); Class c = dest.getClass(); Object p = null; try { p = c.newInstance(); } catch(Exception e) { e.printStackTrace(); } it.set_vertex((Term) p); history.push(p); }} public void after_vertex(Opt_labeled_term source, Term dest) {{ history.pop(); }} public void before_label_name(Labeled source, Ident dest) {{ Labeled it = (Labeled) history.peek(); it.set_label_name(dest); }} public void before_vertex(Term source, Vertex dest) {{ Term it = (Term) history.peek(); Vertex p = new Vertex(); it.set_vertex(p); history.push(p); }} public void after_vertex(Term source, Vertex dest) {{ history.pop(); }} public void before_opt(Optional_term source, Opt_labeled_term_Sandwich dest) {{ Optional_term it = (Optional_term) history.peek(); Opt_labeled_term_Sandwich p = new Opt_labeled_term_Sandwich(); it.set_opt(p); history.push(p); }} public void after_opt(Optional_term source, Opt_labeled_term_Sandwich dest) {{ history.pop(); }} public void before_indent(PrintVisitor source, int dest) {{ PrintVisitor it = (PrintVisitor) history.peek(); it.set_indent(dest); }} public void before_needSpace(PrintVisitor source, boolean dest) {{ PrintVisitor it = (PrintVisitor) history.peek(); it.set_needSpace(dest); }} public void before_is_equal(SubgraphVisitor source, boolean dest) {{ SubgraphVisitor it = (SubgraphVisitor) history.peek(); it.set_is_equal(dest); }} public void before_is_equal(EqualVisitor source, boolean dest) {{ EqualVisitor it = (EqualVisitor) history.peek(); it.set_is_equal(dest); }} public void before_indent(DisplayVisitor source, int dest) {{ DisplayVisitor it = (DisplayVisitor) history.peek(); it.set_indent(dest); }} public void before_indent(TraceVisitor source, int dest) {{ TraceVisitor it = (TraceVisitor) history.peek(); it.set_indent(dest); }} public void before_first(Adjacency_Nlist source, Nonempty_Adjacency_Nlist dest) {{ Adjacency_Nlist it = (Adjacency_Nlist) history.peek(); Nonempty_Adjacency_Nlist p = new Nonempty_Adjacency_Nlist(); it.set_first(p); history.push(p); }} public void after_first(Adjacency_Nlist source, Nonempty_Adjacency_Nlist dest) {{ history.pop(); }} public void before_first(Any_vertex_List source, Nonempty_Any_vertex_List dest) {{ Any_vertex_List it = (Any_vertex_List) history.peek(); Nonempty_Any_vertex_List p = new Nonempty_Any_vertex_List(); it.set_first(p); history.push(p); }} public void after_first(Any_vertex_List source, Nonempty_Any_vertex_List dest) {{ history.pop(); }} public void before_first(Term_Bar_list source, Nonempty_Term_Bar_list dest) {{ Term_Bar_list it = (Term_Bar_list) history.peek(); Nonempty_Term_Bar_list p = new Nonempty_Term_Bar_list(); it.set_first(p); history.push(p); }} public void after_first(Term_Bar_list source, Nonempty_Term_Bar_list dest) {{ history.pop(); }} public void before_first(Opt_labeled_term_Sandwich source, Syntax_vertex_List dest) {{ Opt_labeled_term_Sandwich it = (Opt_labeled_term_Sandwich) history.peek(); Syntax_vertex_List p = new Syntax_vertex_List(); it.set_first(p); history.push(p); }} public void after_first(Opt_labeled_term_Sandwich source, Syntax_vertex_List dest) {{ history.pop(); }} public void before_inner(Opt_labeled_term_Sandwich source, Opt_labeled_term dest) {{ Opt_labeled_term_Sandwich it = (Opt_labeled_term_Sandwich) history.peek(); Class c = dest.getClass(); Object p = null; try { p = c.newInstance(); } catch(Exception e) { e.printStackTrace(); } it.set_inner((Opt_labeled_term) p); history.push(p); }} public void after_inner(Opt_labeled_term_Sandwich source, Opt_labeled_term dest) {{ history.pop(); }} public void before_second(Opt_labeled_term_Sandwich source, Syntax_vertex_List dest) {{ Opt_labeled_term_Sandwich it = (Opt_labeled_term_Sandwich) history.peek(); Syntax_vertex_List p = new Syntax_vertex_List(); it.set_second(p); history.push(p); }} public void after_second(Opt_labeled_term_Sandwich source, Syntax_vertex_List dest) {{ history.pop(); }} public void before_first(Syntax_vertex_List source, Nonempty_Syntax_vertex_List dest) {{ Syntax_vertex_List it = (Syntax_vertex_List) history.peek(); Nonempty_Syntax_vertex_List p = new Nonempty_Syntax_vertex_List(); it.set_first(p); history.push(p); }} public void after_first(Syntax_vertex_List source, Nonempty_Syntax_vertex_List dest) {{ history.pop(); }} public void before_it(Nonempty_Adjacency_Nlist source, Adjacency dest) {{ Nonempty_Adjacency_Nlist it = (Nonempty_Adjacency_Nlist) history.peek(); Adjacency p = new Adjacency(); it.set_it(p); history.push(p); }} public void after_it(Nonempty_Adjacency_Nlist source, Adjacency dest) {{ history.pop(); }} public void before_next(Nonempty_Adjacency_Nlist source, Nonempty_Adjacency_Nlist dest) {{ Nonempty_Adjacency_Nlist it = (Nonempty_Adjacency_Nlist) history.peek(); Nonempty_Adjacency_Nlist p = new Nonempty_Adjacency_Nlist(); it.set_next(p); history.push(p); }} public void after_next(Nonempty_Adjacency_Nlist source, Nonempty_Adjacency_Nlist dest) {{ history.pop(); }} public void before_it(Nonempty_Any_vertex_List source, Any_vertex dest) {{ Nonempty_Any_vertex_List it = (Nonempty_Any_vertex_List) history.peek(); Class c = dest.getClass(); Object p = null; try { p = c.newInstance(); } catch(Exception e) { e.printStackTrace(); } it.set_it((Any_vertex) p); history.push(p); }} public void after_it(Nonempty_Any_vertex_List source, Any_vertex dest) {{ history.pop(); }} public void before_next(Nonempty_Any_vertex_List source, Nonempty_Any_vertex_List dest) {{ Nonempty_Any_vertex_List it = (Nonempty_Any_vertex_List) history.peek(); Nonempty_Any_vertex_List p = new Nonempty_Any_vertex_List(); it.set_next(p); history.push(p); }} public void after_next(Nonempty_Any_vertex_List source, Nonempty_Any_vertex_List dest) {{ history.pop(); }} public void before_it(Nonempty_Term_Bar_list source, Term dest) {{ Nonempty_Term_Bar_list it = (Nonempty_Term_Bar_list) history.peek(); Class c = dest.getClass(); Object p = null; try { p = c.newInstance(); } catch(Exception e) { e.printStackTrace(); } it.set_it((Term) p); history.push(p); }} public void after_it(Nonempty_Term_Bar_list source, Term dest) {{ history.pop(); }} public void before_next(Nonempty_Term_Bar_list source, Nonempty_Term_Bar_list dest) {{ Nonempty_Term_Bar_list it = (Nonempty_Term_Bar_list) history.peek(); Nonempty_Term_Bar_list p = new Nonempty_Term_Bar_list(); it.set_next(p); history.push(p); }} public void after_next(Nonempty_Term_Bar_list source, Nonempty_Term_Bar_list dest) {{ history.pop(); }} public void before_it(Nonempty_Syntax_vertex_List source, Syntax_vertex dest) {{ Nonempty_Syntax_vertex_List it = (Nonempty_Syntax_vertex_List) history.peek(); Class c = dest.getClass(); Object p = null; try { p = c.newInstance(); } catch(Exception e) { e.printStackTrace(); } it.set_it((Syntax_vertex) p); history.push(p); }} public void after_it(Nonempty_Syntax_vertex_List source, Syntax_vertex dest) {{ history.pop(); }} public void before_next(Nonempty_Syntax_vertex_List source, Nonempty_Syntax_vertex_List dest) {{ Nonempty_Syntax_vertex_List it = (Nonempty_Syntax_vertex_List) history.peek(); Nonempty_Syntax_vertex_List p = new Nonempty_Syntax_vertex_List(); it.set_next(p); history.push(p); }} public void after_next(Nonempty_Syntax_vertex_List source, Nonempty_Syntax_vertex_List dest) {{ history.pop(); }} {{ 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_); Object copy = get_copy(); super.universal_trv0(_v_); universal_trv0_aft(_v_); } }} }