gentracevis.beh.html

Program{
	void addTraceVisitor(String name)(@
    addClassDef(ClassDef.parse("*notparsed* *visitor* " + name
			       + " = <indent> int."));
  @)
	void generateTraceVisitor(String name, File file)=allParts{
		before Program (@
      host.openOutputFile(file);
      Program.out.println(host.genericOutputVisitorPreamble(name));
    @)
		(@ ClassName classname; @)
		before ClassDef (@
      classname = host.get_classname();

      Program.out.println(classname.makeBefore(
       "    out.println(\"before " + classname + "\");\n"
      +"    indent++;\n"
      +"    for (int i = 0; i < indent; i++) out.print(\" \");\n"));

      Program.out.println(classname.makeAfter(
       "    out.println(\"after " + classname + "\");\n"
      +"    indent--;\n"
      +"    for (int i = 0; i < indent; i++) out.print(\" \");\n"));
    @)
		before Part (@
      String part = "-> " + classname + ", "
			  + host.get_partname() + ", "
			  + host.get_classname();

      Program.out.println(host.makeBefore(classname,
       "    out.println(\"before " + part + " \");\n"
      +"    indent++;\n"
      +"    for (int i = 0; i < indent; i++) out.print(\" \");\n"));
 
      Program.out.println(host.makeAfter(classname,
      "    out.println(\"after " + part + " \");\n"
      +"    indent--;\n"
      +"    for (int i = 0; i < indent; i++) out.print(\" \");\n"));
    @)
		after Program (@
      Program.out.println("}");
      host.closeOutputFile();
    @)
	}
}