From e94f96d45753d0b14a3cf0441f60c3a18b8e9fce Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 6 Jun 2014 16:06:40 +0400 Subject: [PATCH] Pseudocode: Have builder return instructions rather than output values --- .../jet/lang/cfg/JetControlFlowBuilder.java | 25 +++++++------ .../cfg/JetControlFlowBuilderAdapter.java | 26 +++++++------- .../jet/lang/cfg/JetControlFlowProcessor.java | 8 ++--- .../JetControlFlowInstructionsGenerator.java | 36 +++++++++---------- 4 files changed, 46 insertions(+), 49 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 b2f168f55c3..23fb11c0a5a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilder.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilder.java @@ -21,7 +21,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue; import org.jetbrains.jet.lang.cfg.pseudocode.Pseudocode; import org.jetbrains.jet.lang.cfg.pseudocode.TypePredicate; -import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.AccessTarget; +import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.*; import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.psi.*; @@ -103,16 +103,16 @@ public interface JetControlFlowBuilder { void loadUnit(@NotNull JetExpression expression); @NotNull - PseudoValue loadConstant(@NotNull JetExpression expression, @Nullable CompileTimeConstant constant); + ValuedInstruction loadConstant(@NotNull JetExpression expression, @Nullable CompileTimeConstant constant); @NotNull - PseudoValue createAnonymousObject(@NotNull JetObjectLiteralExpression expression); + ValuedInstruction createAnonymousObject(@NotNull JetObjectLiteralExpression expression); @NotNull - PseudoValue createFunctionLiteral(@NotNull JetFunctionLiteralExpression expression); + ValuedInstruction createFunctionLiteral(@NotNull JetFunctionLiteralExpression expression); @NotNull - PseudoValue loadStringTemplate(@NotNull JetStringTemplateExpression expression, @NotNull List inputValues); + ValuedInstruction loadStringTemplate(@NotNull JetStringTemplateExpression expression, @NotNull List inputValues); @NotNull - PseudoValue magic( + MagicInstruction magic( @NotNull JetElement instructionElement, @Nullable JetElement valueElement, @NotNull List inputValues, @@ -121,23 +121,22 @@ public interface JetControlFlowBuilder { ); @NotNull - PseudoValue merge( + MergeInstruction merge( @NotNull JetExpression expression, @NotNull List inputValues ); @NotNull - PseudoValue readThis(@NotNull JetExpression expression, @Nullable ReceiverParameterDescriptor parameterDescriptor); - + ReadValueInstruction readThis(@NotNull JetExpression expression, @Nullable ReceiverParameterDescriptor parameterDescriptor); @NotNull - PseudoValue readVariable( + ReadValueInstruction readVariable( @NotNull JetExpression expression, @NotNull ResolvedCall resolvedCall, @NotNull Map receiverValues ); - @Nullable - PseudoValue call( + @NotNull + CallInstruction call( @NotNull JetExpression expression, @NotNull ResolvedCall resolvedCall, @NotNull Map receiverValues, @@ -150,7 +149,7 @@ public interface JetControlFlowBuilder { NOT_NULL_ASSERTION } @NotNull - PseudoValue predefinedOperation( + OperationInstruction predefinedOperation( @NotNull JetExpression expression, @NotNull PredefinedOperation operation, @NotNull List inputValues 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 ce21685711b..89c05a7b574 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilderAdapter.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowBuilderAdapter.java @@ -21,7 +21,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue; import org.jetbrains.jet.lang.cfg.pseudocode.Pseudocode; import org.jetbrains.jet.lang.cfg.pseudocode.TypePredicate; -import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.AccessTarget; +import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.*; import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.psi.*; @@ -44,31 +44,31 @@ public abstract class JetControlFlowBuilderAdapter implements JetControlFlowBuil @NotNull @Override - public PseudoValue loadConstant(@NotNull JetExpression expression, @Nullable CompileTimeConstant constant) { + public ValuedInstruction loadConstant(@NotNull JetExpression expression, @Nullable CompileTimeConstant constant) { return getDelegateBuilder().loadConstant(expression, constant); } @NotNull @Override - public PseudoValue createAnonymousObject(@NotNull JetObjectLiteralExpression expression) { + public ValuedInstruction createAnonymousObject(@NotNull JetObjectLiteralExpression expression) { return getDelegateBuilder().createAnonymousObject(expression); } @NotNull @Override - public PseudoValue createFunctionLiteral(@NotNull JetFunctionLiteralExpression expression) { + public ValuedInstruction createFunctionLiteral(@NotNull JetFunctionLiteralExpression expression) { return getDelegateBuilder().createFunctionLiteral(expression); } @NotNull @Override - public PseudoValue loadStringTemplate(@NotNull JetStringTemplateExpression expression, @NotNull List inputValues) { + public ValuedInstruction loadStringTemplate(@NotNull JetStringTemplateExpression expression, @NotNull List inputValues) { return getDelegateBuilder().loadStringTemplate(expression, inputValues); } @NotNull @Override - public PseudoValue magic( + public MagicInstruction magic( @NotNull JetElement instructionElement, @Nullable JetElement valueElement, @NotNull List inputValues, @@ -80,30 +80,28 @@ public abstract class JetControlFlowBuilderAdapter implements JetControlFlowBuil @NotNull @Override - public PseudoValue merge( - @NotNull JetExpression expression, @NotNull List inputValues - ) { + public MergeInstruction merge(@NotNull JetExpression expression, @NotNull List inputValues) { return getDelegateBuilder().merge(expression, inputValues); } @NotNull @Override - public PseudoValue readThis(@NotNull JetExpression expression, @Nullable ReceiverParameterDescriptor parameterDescriptor) { + public ReadValueInstruction readThis(@NotNull JetExpression expression, @Nullable ReceiverParameterDescriptor parameterDescriptor) { return getDelegateBuilder().readThis(expression, parameterDescriptor); } @NotNull @Override - public PseudoValue readVariable( + public ReadValueInstruction readVariable( @NotNull JetExpression expression, @NotNull ResolvedCall resolvedCall, @NotNull Map receiverValues) { return getDelegateBuilder().readVariable(expression, resolvedCall, receiverValues); } - @Nullable + @NotNull @Override - public PseudoValue call( + public CallInstruction call( @NotNull JetExpression expression, @NotNull ResolvedCall resolvedCall, @NotNull Map receiverValues, @@ -114,7 +112,7 @@ public abstract class JetControlFlowBuilderAdapter implements JetControlFlowBuil @NotNull @Override - public PseudoValue predefinedOperation( + public OperationInstruction predefinedOperation( @NotNull JetExpression expression, @NotNull PredefinedOperation operation, @NotNull List inputValues 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 2b2f314d900..d95fddbec9c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java @@ -185,13 +185,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); + return builder.magic(instructionElement, null, values, defaultTypeMap(values), true).getOutputValue(); } @NotNull private PseudoValue createNonSyntheticValue(@NotNull JetElement to, @NotNull List from) { List values = elementsToValues(from); - return builder.magic(to, to, values, defaultTypeMap(values), false); + return builder.magic(to, to, values, defaultTypeMap(values), false).getOutputValue(); } @NotNull @@ -883,7 +883,7 @@ public class JetControlFlowProcessor { Collections.singletonList(loopRangeValue), Collections.singletonMap(loopRangeValue, loopRangeTypeSet), true - ); + ).getOutputValue(); if (loopParameter != null) { generateInitializer(loopParameter, value); @@ -1128,7 +1128,7 @@ public class JetControlFlowProcessor { resolvedCall, getReceiverValues(resolvedCall, false), Collections.emptyMap() - ) + ).getOutputValue() : createSyntheticValue(entry, initializer); if (generateWriteForEntries) { generateInitializer(entry, writtenValue != null ? writtenValue : createSyntheticValue(entry)); 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 21878b53024..ccd7a406c32 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 @@ -401,32 +401,32 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd @NotNull @Override - public PseudoValue loadConstant(@NotNull JetExpression expression, @Nullable CompileTimeConstant constant) { + public ValuedInstruction loadConstant(@NotNull JetExpression expression, @Nullable CompileTimeConstant constant) { return read(expression); } @NotNull @Override - public PseudoValue createAnonymousObject(@NotNull JetObjectLiteralExpression expression) { + public ValuedInstruction createAnonymousObject(@NotNull JetObjectLiteralExpression expression) { return read(expression); } @NotNull @Override - public PseudoValue createFunctionLiteral(@NotNull JetFunctionLiteralExpression expression) { + public ValuedInstruction createFunctionLiteral(@NotNull JetFunctionLiteralExpression expression) { return read(expression); } @NotNull @Override - public PseudoValue loadStringTemplate(@NotNull JetStringTemplateExpression expression, @NotNull List inputValues) { + public ValuedInstruction loadStringTemplate(@NotNull JetStringTemplateExpression expression, @NotNull List inputValues) { if (inputValues.isEmpty()) return read(expression); return magic(expression, expression, inputValues, PseudocodePackage.expectedTypeFor(AllTypes.instance$, inputValues), false); } @NotNull @Override - public PseudoValue magic( + public MagicInstruction magic( @NotNull JetElement instructionElement, @Nullable JetElement valueElement, @NotNull List inputValues, @@ -437,26 +437,26 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd instructionElement, valueElement, getCurrentScope(), synthetic, inputValues, expectedTypes, valueFactory ); add(instruction); - return instruction.getOutputValue(); + return instruction; } @NotNull @Override - public PseudoValue merge(@NotNull JetExpression expression, @NotNull List inputValues) { + public MergeInstruction merge(@NotNull JetExpression expression, @NotNull List inputValues) { MergeInstruction instruction = MergeInstruction.object$.create(expression, getCurrentScope(), inputValues, valueFactory); add(instruction); - return instruction.getOutputValue(); + return instruction; } @NotNull @Override - public PseudoValue readThis(@NotNull JetExpression expression, @Nullable ReceiverParameterDescriptor parameterDescriptor) { + public ReadValueInstruction readThis(@NotNull JetExpression expression, @Nullable ReceiverParameterDescriptor parameterDescriptor) { return read(expression); } @NotNull @Override - public PseudoValue readVariable( + public ReadValueInstruction readVariable( @NotNull JetExpression expression, @NotNull ResolvedCall resolvedCall, @NotNull Map receiverValues @@ -464,16 +464,16 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd return read(expression, resolvedCall, receiverValues); } - @Nullable + @NotNull @Override - public PseudoValue call( + public CallInstruction call( @NotNull JetExpression expression, @NotNull ResolvedCall resolvedCall, @NotNull Map receiverValues, @NotNull Map arguments ) { JetType returnType = resolvedCall.getResultingDescriptor().getReturnType(); - OperationInstruction instruction = CallInstruction.object$.create( + CallInstruction instruction = CallInstruction.object$.create( expression, getCurrentScope(), resolvedCall, @@ -482,12 +482,12 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd returnType != null && KotlinBuiltIns.getInstance().isNothing(returnType) ? null : valueFactory ); add(instruction); - return instruction.getOutputValue(); + return instruction; } @NotNull @Override - public PseudoValue predefinedOperation( + public OperationInstruction predefinedOperation( @NotNull JetExpression expression, @NotNull PredefinedOperation operation, @NotNull List inputValues @@ -515,7 +515,7 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd } @NotNull - private PseudoValue read( + private ReadValueInstruction read( @NotNull JetExpression expression, @Nullable ResolvedCall resolvedCall, @NotNull Map receiverValues) { @@ -523,11 +523,11 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd ReadValueInstruction instruction = ReadValueInstruction.object$.create(expression, getCurrentScope(), accessTarget, receiverValues, valueFactory); add(instruction); - return instruction.getOutputValue(); + return instruction; } @NotNull - private PseudoValue read(@NotNull JetExpression expression) { + private ReadValueInstruction read(@NotNull JetExpression expression) { return read(expression, null, Collections.emptyMap()); } }