From ac41cab3406c473d22a7ca9acc015edbf2e1fed4 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Sat, 26 May 2012 13:34:29 +0400 Subject: [PATCH] added PseudocodeUtil responsible for creation --- .../lang/cfg/pseudocode/PseudocodeUtil.java | 69 +++++++++++++++++++ .../jetbrains/jet/cfg/JetControlFlowTest.java | 54 +++------------ 2 files changed, 79 insertions(+), 44 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/PseudocodeUtil.java diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/PseudocodeUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/PseudocodeUtil.java new file mode 100644 index 00000000000..3612cc1a997 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/PseudocodeUtil.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.cfg.pseudocode; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.cfg.JetControlFlowProcessor; +import org.jetbrains.jet.lang.diagnostics.Diagnostic; +import org.jetbrains.jet.lang.psi.JetDeclaration; +import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.resolve.BindingTrace; +import org.jetbrains.jet.util.slicedmap.ReadOnlySlice; +import org.jetbrains.jet.util.slicedmap.WritableSlice; + +import java.util.Collection; + +/** + * @author svtk + */ +public class PseudocodeUtil { + + public static Pseudocode generatePseudocode(@NotNull JetDeclaration declaration, @NotNull final BindingContext bindingContext) { + BindingTrace mockTrace = new BindingTrace() { + @Override + public BindingContext getBindingContext() { + return bindingContext; + } + + @Override + public void record(WritableSlice slice, K key, V value) { + } + + @Override + public void record(WritableSlice slice, K key) { + } + + @Override + public V get(ReadOnlySlice slice, K key) { + return bindingContext.get(slice, key); + } + + @NotNull + @Override + public Collection getKeys(WritableSlice slice) { + return bindingContext.getKeys(slice); + } + + @Override + public void report(@NotNull Diagnostic diagnostic) { + } + }; + return new JetControlFlowProcessor(mockTrace).generatePseudocode(declaration); + } + + +} diff --git a/compiler/tests/org/jetbrains/jet/cfg/JetControlFlowTest.java b/compiler/tests/org/jetbrains/jet/cfg/JetControlFlowTest.java index 17aa231055b..faddb91de9e 100644 --- a/compiler/tests/org/jetbrains/jet/cfg/JetControlFlowTest.java +++ b/compiler/tests/org/jetbrains/jet/cfg/JetControlFlowTest.java @@ -29,15 +29,10 @@ import org.jetbrains.jet.JetLiteFixture; import org.jetbrains.jet.JetTestCaseBuilder; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.analyzer.AnalyzeExhaust; -import org.jetbrains.jet.lang.cfg.JetControlFlowProcessor; import org.jetbrains.jet.lang.cfg.pseudocode.*; -import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode; -import org.jetbrains.jet.util.slicedmap.ReadOnlySlice; -import org.jetbrains.jet.util.slicedmap.WritableSlice; import java.io.File; import java.io.FileNotFoundException; @@ -80,41 +75,12 @@ public class JetControlFlowTest extends JetLiteFixture { final Map data = new LinkedHashMap(); AnalyzeExhaust analyzeExhaust = JetTestUtils.analyzeFile(file); List declarations = file.getDeclarations(); - final BindingContext bindingContext = analyzeExhaust.getBindingContext(); - - BindingTrace mockTrace = new BindingTrace() { - @Override - public BindingContext getBindingContext() { - return bindingContext; - } - - @Override - public void record(WritableSlice slice, K key, V value) { - } - - @Override - public void record(WritableSlice slice, K key) { - } - - @Override - public V get(ReadOnlySlice slice, K key) { - return bindingContext.get(slice, key); - } - - @NotNull - @Override - public Collection getKeys(WritableSlice slice) { - return bindingContext.getKeys(slice); - } - - @Override - public void report(@NotNull Diagnostic diagnostic) { - } - }; + BindingContext bindingContext = analyzeExhaust.getBindingContext(); for (JetDeclaration declaration : declarations) { - Pseudocode pseudocode = new JetControlFlowProcessor(mockTrace).generatePseudocode(declaration); + Pseudocode pseudocode = PseudocodeUtil.generatePseudocode(declaration, bindingContext); data.put(declaration, pseudocode); - for (Pseudocode localPseudocode : pseudocode.getLocalDeclarations()) { + for (LocalDeclarationInstruction instruction : pseudocode.getLocalDeclarations()) { + Pseudocode localPseudocode = instruction.getBody(); data.put(localPseudocode.getCorrespondingElement(), localPseudocode); } } @@ -166,7 +132,7 @@ public class JetControlFlowTest extends JetLiteFixture { instructionDump.append("=====================\n"); //check edges directions - Collection instructions = ((PseudocodeImpl)pseudocode).getMutableInstructionList(); + Collection instructions = ((PseudocodeImpl)pseudocode).getAllInstructions(); for (Instruction instruction : instructions) { if (!((InstructionImpl)instruction).isDead()) { for (Instruction nextInstruction : instruction.getNextInstructions()) { @@ -198,7 +164,7 @@ public class JetControlFlowTest extends JetLiteFixture { } public void dfsDump(PseudocodeImpl pseudocode, StringBuilder nodes, StringBuilder edges, Map nodeNames) { - dfsDump(nodes, edges, pseudocode.getMutableInstructionList().get(0), nodeNames); + dfsDump(nodes, edges, pseudocode.getAllInstructions().get(0), nodeNames); } private void dfsDump(StringBuilder nodes, StringBuilder edges, Instruction instruction, Map nodeNames) { @@ -260,7 +226,7 @@ public class JetControlFlowTest extends JetLiteFixture { } public void dumpInstructions(PseudocodeImpl pseudocode, @NotNull StringBuilder out) { - List instructions = pseudocode.getMutableInstructionList(); + List instructions = pseudocode.getAllInstructions(); Set remainedAfterPostProcessInstructions = Sets.newHashSet(pseudocode.getInstructions()); List labels = pseudocode.getLabels(); List locals = new ArrayList(); @@ -316,7 +282,7 @@ public class JetControlFlowTest extends JetLiteFixture { public void visitLocalDeclarationInstruction(LocalDeclarationInstruction instruction) { int index = count[0]; // instruction.getBody().dumpSubgraph(out, "subgraph cluster_" + index, count, "color=blue;\nlabel = \"f" + index + "\";", nodeToName); - printEdge(out, nodeToName.get(instruction), nodeToName.get(((PseudocodeImpl)instruction.getBody()).getMutableInstructionList().get(0)), null); + printEdge(out, nodeToName.get(instruction), nodeToName.get(((PseudocodeImpl)instruction.getBody()).getAllInstructions().get(0)), null); visitInstructionWithNext(instruction); } @@ -431,7 +397,7 @@ public class JetControlFlowTest extends JetLiteFixture { int[] count = new int[1]; Map nodeToName = new HashMap(); for (Pseudocode pseudocode : pseudocodes) { - dumpNodes(((PseudocodeImpl)pseudocode).getMutableInstructionList(), out, count, nodeToName, Sets.newHashSet(pseudocode.getInstructions())); + dumpNodes(((PseudocodeImpl)pseudocode).getAllInstructions(), out, count, nodeToName, Sets.newHashSet(pseudocode.getInstructions())); } int i = 0; for (Pseudocode pseudocode : pseudocodes) { @@ -447,7 +413,7 @@ public class JetControlFlowTest extends JetLiteFixture { out.println("subgraph cluster_" + i + " {\n" + "label=\"" + label + "\";\n" + "color=blue;\n"); - dumpEdges(((PseudocodeImpl)pseudocode).getMutableInstructionList(), out, count, nodeToName); + dumpEdges(((PseudocodeImpl)pseudocode).getAllInstructions(), out, count, nodeToName); out.println("}"); i++; }