Pseudocode: Divide instruction classes into packages

This commit is contained in:
Alexey Sedunov
2014-06-03 14:26:23 +04:00
parent eabe2fcc8a
commit c7e4f1d02e
45 changed files with 257 additions and 90 deletions
@@ -29,7 +29,17 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.cfg.PseudocodeVariablesData.VariableInitState;
import org.jetbrains.jet.lang.cfg.PseudocodeVariablesData.VariableUseState;
import org.jetbrains.jet.lang.cfg.pseudocode.*;
import org.jetbrains.jet.lang.cfg.pseudocode.Pseudocode;
import org.jetbrains.jet.lang.cfg.pseudocode.PseudocodeUtil;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.JetElementInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.*;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.*;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.MarkInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.SubroutineExitInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.VariableDeclarationInstruction;
import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.Edges;
import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.PseudocodeTraverserPackage;
import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.TraversalOrder;
@@ -19,6 +19,10 @@ package org.jetbrains.jet.lang.cfg.pseudocodeTraverser
import org.jetbrains.jet.lang.cfg.pseudocode.*
import java.util.*
import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.TraversalOrder.FORWARD
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.SubroutineSinkInstruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.SubroutineEnterInstruction
fun Pseudocode.traverse(
traversalOrder: TraversalOrder,
@@ -16,20 +16,16 @@
package org.jetbrains.jet.lang.cfg
import org.jetbrains.jet.lang.cfg.pseudocode.Instruction
import org.jetbrains.jet.lang.cfg.pseudocode.LocalFunctionDeclarationInstruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
import org.jetbrains.jet.lang.cfg.pseudocode.Pseudocode
import org.jetbrains.jet.lang.descriptors.VariableDescriptor
import org.jetbrains.jet.lang.resolve.BindingContext
import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.*
import org.jetbrains.jet.lang.cfg.pseudocode.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.VariableDeclarationInstruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.VariableDeclarationInstruction
import org.jetbrains.jet.utils.addToStdlib.*
import kotlin.properties.Delegates
import java.util.*
import org.jetbrains.jet.lang.psi.JetDeclaration
public class PseudocodeVariableDataCollector(
private val bindingContext: BindingContext,
@@ -22,9 +22,16 @@ import kotlin.Function1;
import kotlin.Unit;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.cfg.pseudocode.Pseudocode;
import org.jetbrains.jet.lang.cfg.pseudocode.PseudocodeUtil;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.ReadValueInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.WriteValueInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.VariableDeclarationInstruction;
import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.Edges;
import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.PseudocodeTraverserPackage;
import org.jetbrains.jet.lang.cfg.pseudocode.*;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.psi.JetDeclaration;
@@ -18,7 +18,14 @@ package org.jetbrains.jet.lang.cfg;
import kotlin.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.cfg.pseudocode.*;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.MagicInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.AbstractJumpInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.ThrowExceptionInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.MarkInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.SubroutineExitInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.SubroutineSinkInstruction;
import org.jetbrains.jet.lang.psi.JetElement;
public class TailRecursionDetector extends InstructionVisitorWithResult<Boolean> implements Function1<Instruction, Boolean> {
@@ -20,6 +20,11 @@ import com.intellij.util.containers.Stack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.cfg.*;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.*;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.*;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.*;
import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.psi.*;
@@ -16,10 +16,8 @@
package org.jetbrains.jet.lang.cfg.pseudocode
import java.util.Collections
import org.jetbrains.jet.lang.psi.JetExpression
import kotlin.properties.Delegates
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
public trait PseudoValue {
public val debugName: String
@@ -17,6 +17,7 @@
package org.jetbrains.jet.lang.cfg.pseudocode
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
class PseudoValueImpl(
public override val debugName: String,
@@ -18,8 +18,12 @@ package org.jetbrains.jet.lang.cfg.pseudocode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.SubroutineEnterInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.SubroutineExitInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.SubroutineSinkInstruction;
import org.jetbrains.jet.lang.psi.JetElement;
import org.jetbrains.jet.lang.psi.JetExpression;
import java.util.List;
import java.util.Set;
@@ -21,6 +21,14 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.cfg.Label;
import org.jetbrains.jet.lang.cfg.LoopInfo;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.*;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.AbstractJumpInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.ConditionalJumpInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.NondeterministicJumpInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.SubroutineEnterInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.SubroutineExitInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.SubroutineSinkInstruction;
import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.PseudocodeTraverserPackage;
import org.jetbrains.jet.lang.psi.JetElement;
import org.jetbrains.jet.lang.psi.JetExpression;
@@ -19,6 +19,10 @@ package org.jetbrains.jet.lang.cfg.pseudocode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.cfg.JetControlFlowProcessor;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.ReadValueInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.WriteValueInstruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.VariableDeclarationInstruction;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
import org.jetbrains.jet.lang.psi.JetDeclaration;
@@ -14,11 +14,11 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions
import kotlin.jvm.KotlinSignature
import org.jetbrains.annotations.Nullable
import org.jetbrains.annotations.ReadOnly
import org.jetbrains.jet.lang.cfg.pseudocode
import org.jetbrains.jet.lang.cfg.pseudocode.Pseudocode
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue
public trait Instruction {
public var owner: Pseudocode
@@ -29,10 +29,10 @@ public trait Instruction {
public val lexicalScope: LexicalScope
public val inputValues: List<PseudoValue>
public val outputValue: PseudoValue?
public val outputValue: pseudocode.PseudoValue?
public fun getCopies(): Collection<Instruction>
public fun accept(visitor: InstructionVisitor)
public fun <R> accept(visitor: InstructionVisitorWithResult<R>): R
}
}
@@ -14,12 +14,14 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions
import java.util.Collections
import java.util.LinkedHashSet
import java.util.HashSet
import com.google.common.collect.Sets
import org.jetbrains.jet.lang.cfg.pseudocode.Pseudocode
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue
public abstract class InstructionImpl(public override val lexicalScope: LexicalScope): Instruction {
private var _owner: Pseudocode? = null
@@ -14,7 +14,12 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.*
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.*
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.*
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.*
public open class InstructionVisitor() {
public open fun visitInstructionWithReceiver(instruction: InstructionWithReceiver) {
@@ -14,7 +14,12 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.*
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.*
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.*
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.*
public abstract class InstructionVisitorWithResult<R>() {
public abstract fun visitInstruction(instruction: Instruction): R
@@ -14,10 +14,9 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions
import org.jetbrains.jet.lang.psi.JetElement
import java.util.Collections
import com.intellij.util.containers.ContainerUtil
public abstract class InstructionWithNext(
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions
import org.jetbrains.jet.lang.psi.JetElement
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions
import com.intellij.psi.PsiElement
import org.jetbrains.jet.lang.psi.JetElement
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.psi.JetDeclaration
@@ -14,9 +14,12 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionWithNext
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue
import com.intellij.util.containers.ContainerUtil
public abstract class InstructionWithReceiver(
@@ -14,9 +14,14 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval
import org.jetbrains.jet.lang.psi.JetExpression
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionWithNext
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
public class LoadUnitValueInstruction(
expression: JetExpression,
@@ -14,10 +14,16 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval
import org.jetbrains.annotations.Nullable
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValueFactory
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.InstructionWithReceiver
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl
public class ReadValueInstruction private (
element: JetElement,
@@ -14,13 +14,18 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval
import org.jetbrains.annotations.Nullable
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.psi.JetNamedDeclaration
import java.util.Arrays
import java.util.Collections
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.InstructionWithReceiver
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import java.util.Arrays
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl
public class WriteValueInstruction(
assignment: JetElement,
@@ -14,11 +14,16 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall
import kotlin.properties.Delegates
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValueFactory
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionWithNext
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
public abstract class OperationInstruction protected(
element: JetElement,
@@ -14,11 +14,15 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps
import org.jetbrains.jet.lang.cfg.Label
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.Label
import java.util.Collections
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.JetElementInstructionImpl
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
public abstract class AbstractJumpInstruction(
element: JetElement,
@@ -40,5 +44,6 @@ public abstract class AbstractJumpInstruction(
return createCopy(targetLabel, lexicalScope)
}
override val nextInstructions: Collection<Instruction> get() = Collections.singleton(resolvedTarget)
}
override val nextInstructions: Collection<Instruction>
get() = Collections.singleton(resolvedTarget)
}
@@ -14,12 +14,17 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps
import com.intellij.util.containers.ContainerUtil
import org.jetbrains.jet.lang.cfg.Label
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.Label
import java.util.Arrays
import com.intellij.util.containers.ContainerUtil
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
public class ConditionalJumpInstruction(
element: JetElement,
@@ -64,4 +69,4 @@ public class ConditionalJumpInstruction(
override fun createCopy(newLabel: Label, lexicalScope: LexicalScope): AbstractJumpInstruction =
ConditionalJumpInstruction(element, onTrue, lexicalScope, newLabel, conditionValue)
}
}
@@ -14,6 +14,8 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps
public trait JumpInstruction : Instruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
public trait JumpInstruction : Instruction
@@ -14,15 +14,20 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps
import com.google.common.collect.Lists
import com.google.common.collect.Maps
import org.jetbrains.annotations.Nullable
import org.jetbrains.jet.lang.cfg.Label
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue
import org.jetbrains.jet.lang.psi.JetElement
import java.util.*
import org.jetbrains.jet.lang.cfg.Label
import com.google.common.collect.Maps
import com.google.common.collect.Lists
import com.intellij.util.containers.ContainerUtil
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.JetElementInstructionImpl
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl
public class NondeterministicJumpInstruction(
element: JetElement,
@@ -14,10 +14,13 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps
import org.jetbrains.jet.lang.cfg.Label
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.Label
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
public class ReturnNoValueInstruction(
element: JetElement,
@@ -36,4 +39,4 @@ public class ReturnNoValueInstruction(
override fun createCopy(newLabel: Label, lexicalScope: LexicalScope): AbstractJumpInstruction =
ReturnNoValueInstruction(element, lexicalScope, newLabel)
}
}
@@ -14,11 +14,15 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps
import org.jetbrains.jet.lang.cfg.Label
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue
import org.jetbrains.jet.lang.psi.JetExpression
import org.jetbrains.jet.lang.cfg.Label
import java.util.Collections
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
public class ReturnValueInstruction(
returnExpression: JetExpression,
@@ -14,11 +14,15 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps
import org.jetbrains.jet.lang.cfg.Label
import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue
import org.jetbrains.jet.lang.psi.JetThrowExpression
import org.jetbrains.jet.lang.cfg.Label
import java.util.Collections
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
public class ThrowExceptionInstruction(
expression: JetThrowExpression,
@@ -43,4 +47,4 @@ public class ThrowExceptionInstruction(
override fun createCopy(newLabel: Label, lexicalScope: LexicalScope): AbstractJumpInstruction {
return ThrowExceptionInstruction((element as JetThrowExpression), lexicalScope, newLabel, thrownValue)
}
}
}
@@ -14,10 +14,11 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps
import org.jetbrains.jet.lang.cfg.Label
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.*
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.Label
public class UnconditionalJumpInstruction(
element: JetElement,
@@ -36,4 +37,4 @@ public class UnconditionalJumpInstruction(
override fun createCopy(newLabel: Label, lexicalScope: LexicalScope): AbstractJumpInstruction =
UnconditionalJumpInstruction(element, newLabel, lexicalScope)
}
}
@@ -14,9 +14,13 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.special
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionWithNext
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
public class CompilationErrorInstruction(
element: JetElement,
@@ -14,11 +14,17 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.special
import com.google.common.collect.Lists
import org.jetbrains.jet.lang.psi.JetElement
import java.util.ArrayList
import org.jetbrains.jet.lang.cfg.pseudocode.Pseudocode
import com.google.common.collect.Lists
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionWithNext
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl
public class LocalFunctionDeclarationInstruction(
element: JetElement,
@@ -52,4 +58,4 @@ public class LocalFunctionDeclarationInstruction(
override fun createCopy(): InstructionImpl =
LocalFunctionDeclarationInstruction(element, body, lexicalScope)
}
}
@@ -14,13 +14,14 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.special
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionWithNext
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
// This instruciton is used to let the dead code detector know the syntactic structure of unreachable code
// otherwise only individual parts of expression would be reported as unreachable
// e.g. for (i in foo) {} -- only i and foo would be marked unreachable
public class MarkInstruction(
element: JetElement,
lexicalScope: LexicalScope
@@ -14,9 +14,14 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.special
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionWithNext
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl
public class SubroutineEnterInstruction(
public val subroutine: JetElement,
@@ -34,4 +39,4 @@ public class SubroutineEnterInstruction(
override fun createCopy(): InstructionImpl =
SubroutineEnterInstruction(subroutine, lexicalScope)
}
}
@@ -14,10 +14,15 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.special
import org.jetbrains.jet.lang.psi.JetElement
import java.util.Collections
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
public class SubroutineExitInstruction(
public val subroutine: JetElement,
@@ -47,4 +52,4 @@ public class SubroutineExitInstruction(
override fun createCopy(): InstructionImpl =
SubroutineExitInstruction(subroutine, lexicalScope, isError)
}
}
@@ -14,10 +14,15 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.special
import org.jetbrains.jet.lang.psi.JetElement
import java.util.Collections
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
public class SubroutineSinkInstruction(
public val subroutine: JetElement,
@@ -38,4 +43,4 @@ public class SubroutineSinkInstruction(
override fun createCopy(): InstructionImpl =
SubroutineSinkInstruction(subroutine, lexicalScope, debugLabel)
}
}
@@ -14,9 +14,14 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.special
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionWithNext
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl
public class UnsupportedElementInstruction(
element: JetElement,
@@ -35,4 +40,4 @@ public class UnsupportedElementInstruction(
override fun createCopy(): InstructionImpl =
UnsupportedElementInstruction(element, lexicalScope)
}
}
@@ -14,11 +14,16 @@
* limitations under the License.
*/
package org.jetbrains.jet.lang.cfg.pseudocode
package org.jetbrains.jet.lang.cfg.pseudocode.instructions.special
import org.jetbrains.jet.lang.psi.JetDeclaration
import org.jetbrains.jet.lang.psi.JetParameter
import org.jetbrains.jet.lang.psi.JetVariableDeclaration
import org.jetbrains.jet.lang.psi.JetParameter
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionWithNext
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.LexicalScope
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitorWithResult
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl
public class VariableDeclarationInstruction(
element: JetDeclaration,
@@ -43,4 +48,4 @@ public class VariableDeclarationInstruction(
override fun createCopy(): InstructionImpl =
VariableDeclarationInstruction(variableDeclarationElement, lexicalScope)
}
}
@@ -19,8 +19,8 @@ package org.jetbrains.jet.cfg;
import kotlin.Function3;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.cfg.pseudocode.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocode.InstructionImpl;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl;
import org.jetbrains.jet.lang.cfg.pseudocode.PseudocodeImpl;
import org.jetbrains.jet.lang.resolve.BindingContext;
@@ -21,8 +21,9 @@ import com.intellij.openapi.util.text.StringUtil;
import kotlin.Function3;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.cfg.PseudocodeVariablesData;
import org.jetbrains.jet.lang.cfg.pseudocode.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocode.PseudocodeImpl;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.Edges;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.resolve.BindingContext;
@@ -30,7 +31,6 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.Edges;
import static org.jetbrains.jet.lang.cfg.PseudocodeVariablesData.VariableInitState;
import static org.jetbrains.jet.lang.cfg.PseudocodeVariablesData.VariableUseState;
@@ -25,7 +25,12 @@ import org.jetbrains.jet.ConfigurationKind;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.lang.cfg.pseudocode.*;
import org.jetbrains.jet.lang.cfg.pseudocode.Pseudocode;
import org.jetbrains.jet.lang.cfg.pseudocode.PseudocodeImpl;
import org.jetbrains.jet.lang.cfg.pseudocode.PseudocodeUtil;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionImpl;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.lazy.KotlinTestWithEnvironment;
@@ -19,7 +19,13 @@ package org.jetbrains.jet.cfg;
import com.google.common.collect.Sets;
import com.intellij.openapi.util.io.FileUtil;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.lang.cfg.pseudocode.*;
import org.jetbrains.jet.lang.cfg.pseudocode.Pseudocode;
import org.jetbrains.jet.lang.cfg.pseudocode.PseudocodeImpl;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionVisitor;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.InstructionWithNext;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.*;
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.*;
import org.jetbrains.jet.lang.psi.JetElement;
import org.jetbrains.jet.lang.psi.JetNamedDeclaration;
@@ -56,6 +56,18 @@ import org.jetbrains.jet.lang.diagnostics.Errors
import org.jetbrains.jet.lang.psi.psiUtil.replaced
import org.jetbrains.jet.plugin.refactoring.extractFunction.AnalysisResult.Status
import org.jetbrains.jet.plugin.refactoring.extractFunction.AnalysisResult.ErrorMessage
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.*
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.special.LocalFunctionDeclarationInstruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.WriteValueInstruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.Instruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.CallInstruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.JetElementInstruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.OperationInstruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.ReadValueInstruction
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.*
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.*
import org.jetbrains.jet.lang.cfg.pseudocode.instructions.jumps.*
import org.jetbrains.jet.lang.cfg.pseudocodeTraverser.getNextInstructions
private val DEFAULT_FUNCTION_NAME = "myFun"
private val DEFAULT_RETURN_TYPE = KotlinBuiltIns.getInstance().getUnitType()