From f2d96ef8956436f5af13b1d73f1635919a4945ad Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 30 Jul 2016 15:39:47 +0300 Subject: [PATCH] =?UTF-8?q?OptimizationDumper=20=D1=82=D0=B5=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D1=8C=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83?= =?UTF-8?q?=D0=B5=D1=82=20PrintVisitor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ownlang/utils/OptimizationDumper.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/annimon/ownlang/utils/OptimizationDumper.java b/src/main/java/com/annimon/ownlang/utils/OptimizationDumper.java index 8babf0b..45df8bb 100644 --- a/src/main/java/com/annimon/ownlang/utils/OptimizationDumper.java +++ b/src/main/java/com/annimon/ownlang/utils/OptimizationDumper.java @@ -10,6 +10,7 @@ import com.annimon.ownlang.parser.optimization.DeadCodeElimination; import com.annimon.ownlang.parser.optimization.ExpressionSimplification; import com.annimon.ownlang.parser.optimization.InstructionCombining; import com.annimon.ownlang.parser.optimization.Optimizable; +import com.annimon.ownlang.parser.visitors.PrintVisitor; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -45,19 +46,19 @@ public final class OptimizationDumper { int optimizationPasses = 1; int lastBatchModificationCount; int batchModificationCount = 0; - result.put("Source", node.toString()); + result.put("Source", nodeToString(node)); do { lastBatchModificationCount = batchModificationCount; batchModificationCount = 0; for (Optimizable optimization : OPTIMIZATIONS) { - final String lastSource = node.toString(); + final String lastSource = nodeToString(node); node = optimization.optimize(node); - final String currentSource = node.toString(); + final String currentSource = nodeToString(node); if (!lastSource.equals(currentSource)) { final String optName = String.format("%s, %d pass", optimization.getClass().getSimpleName(), optimizationPasses); - result.put(optName, node.toString()); + result.put(optName, nodeToString(node)); } batchModificationCount += optimization.optimizationsCount(); } @@ -66,6 +67,11 @@ public final class OptimizationDumper { return result; } + private static String nodeToString(Node n) { +// return n.toString(); + return n.accept(new PrintVisitor(), new StringBuilder()).toString(); + } + private static void writeStepsToFile(Map optimizationSteps) throws IOException { Arrays.stream(WORK_DIR.listFiles((d, name) -> name.endsWith(".txt"))) .forEach(File::delete); @@ -84,12 +90,14 @@ public final class OptimizationDumper { private static void writeSummary(final Map optimizationSteps) throws IOException { final StringBuilder sb = new StringBuilder(); + sb.append("[pr]"); for (Map.Entry entry : optimizationSteps.entrySet()) { sb.append(entry.getKey()); - sb.append("\n\n"); + sb.append("\n[code own]"); sb.append(entry.getValue()); - sb.append("\n\n-----------\n\n"); + sb.append("[/code][sl]\n"); } + sb.append("[/pr]"); writeContent(new File(WORK_DIR, "summary.txt"), writer -> writer.write(sb.toString())); }