# HG changeset patch # User Peter Hofer # Date 1305712258 -7200 # Node ID 79590d6b4a7cef3ca42fdf7c5c898ac6f6de1d72 # Parent 4149feada801ec0ddc8379a960c088fc199f3334 IdealGraphPrinterObserver, GraphvizPrinterObserver: replace possibly invalid characters in file names diff -r 4149feada801 -r 79590d6b4a7c graal/GraalCompiler/src/com/sun/c1x/debug/GraphvizPrinterObserver.java --- a/graal/GraalCompiler/src/com/sun/c1x/debug/GraphvizPrinterObserver.java Wed May 18 11:27:10 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/debug/GraphvizPrinterObserver.java Wed May 18 11:50:58 2011 +0200 @@ -23,6 +23,7 @@ package com.sun.c1x.debug; import java.io.*; +import java.util.regex.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.vis.*; @@ -38,6 +39,8 @@ */ public class GraphvizPrinterObserver implements CompilationObserver { + private static final Pattern INVALID_CHAR = Pattern.compile("[^A-Za-z0-9_.-]"); + private final boolean pdf; private int n; @@ -59,7 +62,9 @@ String name = event.getMethod().holder().name(); name = name.substring(1, name.length() - 1).replace('/', '.'); name = name + "." + event.getMethod().name(); + String filename = name + "_" + (n++) + "_" + event.getLabel(); + filename = INVALID_CHAR.matcher(filename).replaceAll("_"); OutputStream out = null; try { diff -r 4149feada801 -r 79590d6b4a7c graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinter.java --- a/graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinter.java Wed May 18 11:27:10 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinter.java Wed May 18 11:50:58 2011 +0200 @@ -63,20 +63,33 @@ } /** - * Starts a new graph document containing a single group of graphs with the given name, short name and byte code - * index (BCI) as properties. + * Starts a new graph document. */ - public void begin(String name, String shortName, int bci) { - stream.println(""); + public void begin() { + stream.println(""); + } + + /** + * Starts a new group of graphs with the given name, short name and method byte code index (BCI) as properties. + */ + public void beginGroup(String name, String shortName, int bci) { + stream.println(""); stream.printf("

%s

%n", escape(name)); stream.printf(" %n", escape(name), escape(shortName), bci); } /** - * Finishes the graph document. + * Ends the current group. + */ + public void endGroup() { + stream.println("
"); + } + + /** + * Finishes the graph document and flushes the output stream. */ public void end() { - stream.println("
"); + stream.println(""); stream.flush(); } diff -r 4149feada801 -r 79590d6b4a7c graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinterObserver.java --- a/graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinterObserver.java Wed May 18 11:27:10 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/debug/IdealGraphPrinterObserver.java Wed May 18 11:50:58 2011 +0200 @@ -23,6 +23,7 @@ package com.sun.c1x.debug; import java.io.*; +import java.util.regex.*; import com.oracle.graal.graph.*; import com.sun.c1x.*; @@ -32,11 +33,13 @@ /** * Observes compilation events and uses {@link IdealGraphPrinter} to generate a graph representation that can be * inspected with the Ideal Graph Visualizer. - * + * * @author Peter Hofer */ public class IdealGraphPrinterObserver implements CompilationObserver { + private static final Pattern INVALID_CHAR = Pattern.compile("[^A-Za-z0-9_.-]"); + private IdealGraphPrinter printer; private OutputStream stream; @@ -48,7 +51,10 @@ String name = event.getMethod().holder().name(); name = name.substring(1, name.length() - 1).replace('/', '.'); name = name + "." + event.getMethod().name(); + String filename = name + ".igv.xml"; + filename = INVALID_CHAR.matcher(filename).replaceAll("_"); + try { stream = new FileOutputStream(filename); printer = new IdealGraphPrinter(stream); @@ -57,7 +63,8 @@ printer.addOmittedClass(FrameState.class); } - printer.begin(name, name, -1); + printer.begin(); + printer.beginGroup(name, name, -1); } catch (IOException e) { e.printStackTrace(); } @@ -76,6 +83,7 @@ public void compilationFinished(CompilationEvent event) { if (printer != null) { try { + printer.endGroup(); printer.end(); stream.close(); } catch (IOException e) {