From e792b3f1db4fd4484ca77a782037959fd24936d8 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 1 Jul 2014 13:54:39 +0400 Subject: [PATCH] Pseudocode: Do not store "synthetic" flag of magic instructions --- .../jet/lang/cfg/JetControlFlowBuilder.java | 3 +-- .../cfg/JetControlFlowBuilderAdapter.java | 5 ++-- .../jet/lang/cfg/JetControlFlowProcessor.java | 9 ++++--- .../JetControlFlowInstructionsGenerator.java | 9 ++++--- .../eval/operationInstructions.kt | 24 ++++++++----------- 5 files changed, 21 insertions(+), 29 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilder.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilder.java index 6f25e60a7ac..6b7ebec6d1d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilder.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilder.java @@ -115,8 +115,7 @@ public interface JetControlFlowBuilder { @NotNull JetElement instructionElement, @Nullable JetElement valueElement, @NotNull List inputValues, - @NotNull Map expectedTypes, - boolean synthetic + @NotNull Map expectedTypes ); @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilderAdapter.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilderAdapter.java index e0d602d2dd7..b236f18e29c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilderAdapter.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilderAdapter.java @@ -71,10 +71,9 @@ public abstract class JetControlFlowBuilderAdapter implements JetControlFlowBuil @NotNull JetElement instructionElement, @Nullable JetElement valueElement, @NotNull List inputValues, - @NotNull Map expectedTypes, - boolean synthetic + @NotNull Map expectedTypes ) { - return getDelegateBuilder().magic(instructionElement, valueElement, inputValues, expectedTypes, synthetic); + return getDelegateBuilder().magic(instructionElement, valueElement, inputValues, expectedTypes); } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java index b083a9cea2f..49d54d2c4f0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java @@ -180,13 +180,13 @@ public class JetControlFlowProcessor { @NotNull private PseudoValue createSyntheticValue(@NotNull JetElement instructionElement, JetElement... from) { List values = elementsToValues(from.length > 0 ? Arrays.asList(from) : Collections.emptyList()); - return builder.magic(instructionElement, null, values, defaultTypeMap(values), true).getOutputValue(); + return builder.magic(instructionElement, null, values, defaultTypeMap(values)).getOutputValue(); } @NotNull private PseudoValue createNonSyntheticValue(@NotNull JetElement to, @NotNull List from) { List values = elementsToValues(from); - return builder.magic(to, to, values, defaultTypeMap(values), false).getOutputValue(); + return builder.magic(to, to, values, defaultTypeMap(values)).getOutputValue(); } @NotNull @@ -886,8 +886,7 @@ public class JetControlFlowProcessor { loopRange != null ? loopRange : expression, null, Collections.singletonList(loopRangeValue), - Collections.singletonMap(loopRangeValue, loopRangeTypePredicate), - true + Collections.singletonMap(loopRangeValue, loopRangeTypePredicate) ).getOutputValue(); if (loopParameter != null) { @@ -1387,7 +1386,7 @@ public class JetControlFlowProcessor { if (expectedTypePredicate == null) { expectedTypePredicate = AllTypes.instance$; } - builder.magic(specifier, specifier, arguments, PseudocodePackage.expectedTypeFor(expectedTypePredicate, arguments), false); + builder.magic(specifier, specifier, arguments, PseudocodePackage.expectedTypeFor(expectedTypePredicate, arguments)); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/JetControlFlowInstructionsGenerator.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/JetControlFlowInstructionsGenerator.java index b82642652c2..0107e6f948b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/JetControlFlowInstructionsGenerator.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/JetControlFlowInstructionsGenerator.java @@ -418,7 +418,7 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd @Override public InstructionWithValue loadStringTemplate(@NotNull JetStringTemplateExpression expression, @NotNull List inputValues) { if (inputValues.isEmpty()) return read(expression); - return magic(expression, expression, inputValues, PseudocodePackage.expectedTypeFor(AllTypes.instance$, inputValues), false); + return magic(expression, expression, inputValues, PseudocodePackage.expectedTypeFor(AllTypes.instance$, inputValues)); } @NotNull @@ -427,11 +427,10 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd @NotNull JetElement instructionElement, @Nullable JetElement valueElement, @NotNull List inputValues, - @NotNull Map expectedTypes, - boolean synthetic + @NotNull Map expectedTypes ) { MagicInstruction instruction = MagicInstruction.object$.create( - instructionElement, valueElement, getCurrentScope(), synthetic, inputValues, expectedTypes, valueFactory + instructionElement, valueElement, getCurrentScope(), inputValues, expectedTypes, valueFactory ); add(instruction); return instruction; @@ -497,7 +496,7 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd throw new IllegalArgumentException("Invalid operation: " + operation); } - return magic(expression, expression, inputValues, expectedTypes, false); + return magic(expression, expression, inputValues, expectedTypes); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/instructions/eval/operationInstructions.kt b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/instructions/eval/operationInstructions.kt index ff33814e5a2..642b6a0f988 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/instructions/eval/operationInstructions.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/instructions/eval/operationInstructions.kt @@ -97,34 +97,30 @@ public class CallInstruction private( // consume input values (so that they aren't considered unused) // denote value transformation which can't be expressed by other instructions (such as call or read) // pass more than one value to instruction which formally requires only one (e.g. jump) -// "Synthetic" means that the instruction does not correspond to some operation explicitly expressed by PSI element -// Examples: providing initial values for parameters, missing right-hand side in assignments public class MagicInstruction( element: JetElement, lexicalScope: LexicalScope, - val synthetic: Boolean, inputValues: List, val expectedTypes: Map ) : OperationInstruction(element, lexicalScope, inputValues), StrictlyValuedOperationInstruction { + public val synthetic: Boolean get() = outputValue.element == null + override fun accept(visitor: InstructionVisitor) = visitor.visitMagic(this) override fun accept(visitor: InstructionVisitorWithResult): R = visitor.visitMagic(this) - override fun createCopy() = MagicInstruction(element, lexicalScope, synthetic, inputValues, expectedTypes).setResult(resultValue) + override fun createCopy() = MagicInstruction(element, lexicalScope, inputValues, expectedTypes).setResult(resultValue) override fun toString() = renderInstruction("magic", render(element)) class object { - fun create( - element: JetElement, - valueElement: JetElement?, - lexicalScope: LexicalScope, - synthetic: Boolean, - inputValues: List, - expectedTypes: Map, - factory: PseudoValueFactory - ): MagicInstruction = MagicInstruction( - element, lexicalScope, synthetic, inputValues, expectedTypes + fun create(element: JetElement, + valueElement: JetElement?, + lexicalScope: LexicalScope, + inputValues: List, + expectedTypes: Map, + factory: PseudoValueFactory): MagicInstruction = MagicInstruction( + element, lexicalScope, inputValues, expectedTypes ).setResult(factory, valueElement) as MagicInstruction } }