From 8a123f8722eaf1e65f31ac968fe8f6738a8f539d Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Wed, 5 Dec 2012 13:22:29 +0400 Subject: [PATCH] added copy() method to Instruction --- .../jet/lang/cfg/pseudocode/AbstractJumpInstruction.java | 7 +++++++ .../lang/cfg/pseudocode/ConditionalJumpInstruction.java | 5 +++++ .../jet/lang/cfg/pseudocode/InstructionImpl.java | 2 ++ .../lang/cfg/pseudocode/LocalDeclarationInstruction.java | 5 +++++ .../cfg/pseudocode/NondeterministicJumpInstruction.java | 5 +++++ .../jet/lang/cfg/pseudocode/ReadUnitValueInstruction.java | 5 +++++ .../jet/lang/cfg/pseudocode/ReadValueInstruction.java | 5 +++++ .../jet/lang/cfg/pseudocode/ReturnNoValueInstruction.java | 5 +++++ .../jet/lang/cfg/pseudocode/ReturnValueInstruction.java | 5 +++++ .../lang/cfg/pseudocode/SubroutineEnterInstruction.java | 5 +++++ .../lang/cfg/pseudocode/SubroutineExitInstruction.java | 5 +++++ .../lang/cfg/pseudocode/SubroutineSinkInstruction.java | 5 +++++ .../lang/cfg/pseudocode/UnconditionalJumpInstruction.java | 5 +++++ .../cfg/pseudocode/UnsupportedElementInstruction.java | 5 +++++ .../cfg/pseudocode/VariableDeclarationInstruction.java | 8 ++++++++ .../jet/lang/cfg/pseudocode/WriteValueInstruction.java | 5 +++++ 16 files changed, 82 insertions(+) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/AbstractJumpInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/AbstractJumpInstruction.java index 07ec6970c0e..04b0b3b94fa 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/AbstractJumpInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/AbstractJumpInstruction.java @@ -50,4 +50,11 @@ public abstract class AbstractJumpInstruction extends InstructionImpl { public void setResolvedTarget(Instruction resolvedTarget) { this.resolvedTarget = outgoingEdgeTo(resolvedTarget); } + + abstract AbstractJumpInstruction copy(@NotNull Label newLabel); + + @Override + public Instruction copy() { + return copy(targetLabel); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ConditionalJumpInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ConditionalJumpInstruction.java index eb84ee13b61..7566a413940 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ConditionalJumpInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ConditionalJumpInstruction.java @@ -71,4 +71,9 @@ public class ConditionalJumpInstruction extends AbstractJumpInstruction { String instr = onTrue ? "jt" : "jf"; return instr + "(" + getTargetLabel().getName() + ")"; } + + @Override + AbstractJumpInstruction copy(@NotNull Label newLabel) { + return new ConditionalJumpInstruction(onTrue, newLabel); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/InstructionImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/InstructionImpl.java index 07d1d8c4299..7399879db8d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/InstructionImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/InstructionImpl.java @@ -66,4 +66,6 @@ public abstract class InstructionImpl implements Instruction { public boolean isDead() { return isDead; } + + public abstract Instruction copy(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/LocalDeclarationInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/LocalDeclarationInstruction.java index fd8639d94f9..1d52147f04b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/LocalDeclarationInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/LocalDeclarationInstruction.java @@ -71,4 +71,9 @@ public class LocalDeclarationInstruction extends InstructionWithNext { public String toString() { return "d" + "(" + element.getText() + ")"; } + + @Override + public Instruction copy() { + return new LocalDeclarationInstruction((JetDeclaration) element, body); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/NondeterministicJumpInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/NondeterministicJumpInstruction.java index 5ec67f482b0..c24077d2b41 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/NondeterministicJumpInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/NondeterministicJumpInstruction.java @@ -88,4 +88,9 @@ public class NondeterministicJumpInstruction extends InstructionImpl{ sb.append(")"); return sb.toString(); } + + @Override + public Instruction copy() { + return new NondeterministicJumpInstruction(getTargetLabels()); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReadUnitValueInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReadUnitValueInstruction.java index 0ff3f6f8d95..f5a687c7c56 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReadUnitValueInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReadUnitValueInstruction.java @@ -37,4 +37,9 @@ public class ReadUnitValueInstruction extends InstructionWithNext { public String toString() { return "read (Unit)"; } + + @Override + public Instruction copy() { + return new ReadUnitValueInstruction((JetExpression) element); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReadValueInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReadValueInstruction.java index 6b80bc0fe9c..976f544c928 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReadValueInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReadValueInstruction.java @@ -37,4 +37,9 @@ public class ReadValueInstruction extends InstructionWithNext { public String toString() { return "r(" + element.getText() + ")"; } + + @Override + public Instruction copy() { + return new ReadValueInstruction(element); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReturnNoValueInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReturnNoValueInstruction.java index 5d6bf5c0540..b276a348ee0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReturnNoValueInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReturnNoValueInstruction.java @@ -47,4 +47,9 @@ public class ReturnNoValueInstruction extends AbstractJumpInstruction implements public String toString() { return "ret " + getTargetLabel(); } + + @Override + AbstractJumpInstruction copy(@NotNull Label newLabel) { + return new ReturnNoValueInstruction(element, newLabel); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReturnValueInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReturnValueInstruction.java index 1546a3afa14..dbce22a3de0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReturnValueInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/ReturnValueInstruction.java @@ -48,4 +48,9 @@ public class ReturnValueInstruction extends AbstractJumpInstruction implements J public JetElement getElement() { return element; } + + @Override + AbstractJumpInstruction copy(@NotNull Label newLabel) { + return new ReturnValueInstruction((JetExpression) element, newLabel); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineEnterInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineEnterInstruction.java index 51dd20ecf22..cacccf5e127 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineEnterInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineEnterInstruction.java @@ -43,4 +43,9 @@ public class SubroutineEnterInstruction extends InstructionWithNext { public String toString() { return ""; } + + @Override + public Instruction copy() { + return new SubroutineEnterInstruction(subroutine); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineExitInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineExitInstruction.java index c3ad2ee983f..8bd0d8e25bb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineExitInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineExitInstruction.java @@ -59,4 +59,9 @@ public class SubroutineExitInstruction extends InstructionImpl { public String toString() { return debugLabel; } + + @Override + public Instruction copy() { + return new SubroutineExitInstruction(subroutine, debugLabel); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineSinkInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineSinkInstruction.java index 6b469ee6243..3d5c9cc705e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineSinkInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/SubroutineSinkInstruction.java @@ -53,4 +53,9 @@ public class SubroutineSinkInstruction extends InstructionImpl { public String toString() { return debugLabel; } + + @Override + public Instruction copy() { + return new SubroutineSinkInstruction(subroutine, debugLabel); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/UnconditionalJumpInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/UnconditionalJumpInstruction.java index ac43dd6b6ab..73ef9318533 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/UnconditionalJumpInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/UnconditionalJumpInstruction.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.lang.cfg.pseudocode; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.cfg.Label; /** @@ -38,4 +39,8 @@ public class UnconditionalJumpInstruction extends AbstractJumpInstruction { return "jmp(" + getTargetLabel().getName() + ")"; } + @Override + AbstractJumpInstruction copy(@NotNull Label newLabel) { + return new UnconditionalJumpInstruction(newLabel); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/UnsupportedElementInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/UnsupportedElementInstruction.java index c870ca1ea9b..337a94281ae 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/UnsupportedElementInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/UnsupportedElementInstruction.java @@ -37,4 +37,9 @@ public class UnsupportedElementInstruction extends InstructionWithNext { public String toString() { return "unsupported(" + element + " : " + element.getText() + ")"; } + + @Override + public Instruction copy() { + return new UnsupportedElementInstruction(element); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/VariableDeclarationInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/VariableDeclarationInstruction.java index 1e5b4fad9ce..a7891652a12 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/VariableDeclarationInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/VariableDeclarationInstruction.java @@ -47,4 +47,12 @@ public class VariableDeclarationInstruction extends InstructionWithNext { public String toString() { return "v(" + element.getText() + ")"; } + + @Override + public Instruction copy() { + if (element instanceof JetParameter) { + return new VariableDeclarationInstruction((JetParameter) element); + } + return new VariableDeclarationInstruction((JetVariableDeclaration) element); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/WriteValueInstruction.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/WriteValueInstruction.java index 8bda648c072..89c8031e438 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/WriteValueInstruction.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/pseudocode/WriteValueInstruction.java @@ -50,4 +50,9 @@ public class WriteValueInstruction extends InstructionWithNext { } return "w(" + lValue.getText() + ")"; } + + @Override + public Instruction copy() { + return new WriteValueInstruction(element, lValue); + } }