From 88637ba33641e4a096ec208843544eda33bb53d4 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 18 May 2016 12:22:07 +0300 Subject: [PATCH] Minor. Cleanup codegen.optimization package --- .../MandatoryMethodTransforker.kt | 2 +- .../optimization/common/MethodAnalyzer.kt | 4 +-- .../optimization/fixStack/FixStackAnalyzer.kt | 5 +--- .../optimization/fixStack/FixStackContext.kt | 14 +++++------ .../fixStack/LocalVariablesManager.kt | 2 +- .../fixStack/StackTransformationUtils.kt | 25 ------------------- 6 files changed, 12 insertions(+), 40 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/MandatoryMethodTransforker.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/MandatoryMethodTransforker.kt index 29cbb66ddd5..6695595b03e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/MandatoryMethodTransforker.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/MandatoryMethodTransforker.kt @@ -28,4 +28,4 @@ class MandatoryMethodTransformer : MethodTransformer() { labelNormalization.transform(internalClassName, methodNode) fixStack.transform(internalClassName, methodNode) } -} \ No newline at end of file +} diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/MethodAnalyzer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/MethodAnalyzer.kt index 6d8c917428f..adafd31f8f9 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/MethodAnalyzer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/MethodAnalyzer.kt @@ -208,7 +208,7 @@ open class MethodAnalyzer( private fun mergeControlFlowEdge(insn: Int, frame: Frame) { val oldFrame = frames[insn] - var changes: Boolean + val changes: Boolean if (oldFrame == null) { frames[insn] = newFrame(frame) @@ -223,4 +223,4 @@ open class MethodAnalyzer( } } -} \ No newline at end of file +} diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt index e23a36b2e09..48d5bd7bd43 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackAnalyzer.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.codegen.optimization.fixStack -import com.intellij.util.SmartList import com.intellij.util.containers.Stack import org.jetbrains.kotlin.codegen.inline.InlineCodegenUtil import org.jetbrains.kotlin.codegen.optimization.common.MethodAnalyzer @@ -26,11 +25,9 @@ import org.jetbrains.org.objectweb.asm.Opcodes import org.jetbrains.org.objectweb.asm.tree.AbstractInsnNode import org.jetbrains.org.objectweb.asm.tree.JumpInsnNode import org.jetbrains.org.objectweb.asm.tree.MethodNode -import org.jetbrains.org.objectweb.asm.tree.TryCatchBlockNode import org.jetbrains.org.objectweb.asm.tree.analysis.BasicValue import org.jetbrains.org.objectweb.asm.tree.analysis.Frame import org.jetbrains.org.objectweb.asm.tree.analysis.Interpreter -import java.util.* internal class FixStackAnalyzer( owner: String, @@ -159,4 +156,4 @@ internal class FixStackAnalyzer( private fun FixStackFrame.executeSaveStackBeforeTry(insn: AbstractInsnNode) { saveStackAndClear(insn) } -} \ No newline at end of file +} diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackContext.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackContext.kt index 3dfd5b7860e..10b4bcd379b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackContext.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/FixStackContext.kt @@ -23,13 +23,13 @@ import org.jetbrains.kotlin.codegen.inline.InlineCodegenUtil import org.jetbrains.kotlin.codegen.optimization.common.InsnSequence import org.jetbrains.kotlin.codegen.optimization.common.findPreviousOrNull import org.jetbrains.kotlin.codegen.optimization.common.hasOpcode -import org.jetbrains.kotlin.codegen.optimization.fixStack.forEachPseudoInsn import org.jetbrains.kotlin.codegen.pseudoInsns.PseudoInsn import org.jetbrains.kotlin.codegen.pseudoInsns.parsePseudoInsnOrNull import org.jetbrains.org.objectweb.asm.Opcodes -import org.jetbrains.org.objectweb.asm.tree.* -import java.util.* -import kotlin.properties.Delegates +import org.jetbrains.org.objectweb.asm.tree.AbstractInsnNode +import org.jetbrains.org.objectweb.asm.tree.JumpInsnNode +import org.jetbrains.org.objectweb.asm.tree.LabelNode +import org.jetbrains.org.objectweb.asm.tree.MethodNode internal class FixStackContext(val methodNode: MethodNode) { val breakContinueGotoNodes = linkedSetOf() @@ -103,7 +103,7 @@ internal class FixStackContext(val methodNode: MethodNode) { if (restoreLabel !is LabelNode) { throw AssertionError("${indexOf(insnNode)}: restore should be preceded by a catch block label") } - val saveNodes = findMatchingSaveNodes(insnNode, restoreLabel) + val saveNodes = findMatchingSaveNodes(restoreLabel) if (saveNodes.isEmpty()) { throw AssertionError("${indexOf(insnNode)}: in handler ${indexOf(restoreLabel)} restore is not matched with save") } @@ -115,7 +115,7 @@ internal class FixStackContext(val methodNode: MethodNode) { restoreStackMarkersForSaveMarker.getOrPut(saveNode, { SmartList() }).add(insnNode) } - private fun findMatchingSaveNodes(insnNode: AbstractInsnNode, restoreLabel: LabelNode): List { + private fun findMatchingSaveNodes(restoreLabel: LabelNode): List { val saveNodes = SmartHashSet() methodNode.tryCatchBlocks.forEach { tcb -> if (restoreLabel == tcb.start || restoreLabel == tcb.handler) { @@ -139,4 +139,4 @@ internal class FixStackContext(val methodNode: MethodNode) { saveStackNodesForTryStartLabel.isNotEmpty() || openingInlineMethodMarker.isNotEmpty() -} \ No newline at end of file +} diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/LocalVariablesManager.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/LocalVariablesManager.kt index c7748ef8d3f..f748c536469 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/LocalVariablesManager.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/LocalVariablesManager.kt @@ -94,4 +94,4 @@ internal class LocalVariablesManager(val context: FixStackContext, val methodNod updateMaxLocals(returnValueIndex + returnValue.size) return returnValueIndex } -} \ No newline at end of file +} diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/StackTransformationUtils.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/StackTransformationUtils.kt index efb94c7d95f..ffb626dd573 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/StackTransformationUtils.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/fixStack/StackTransformationUtils.kt @@ -16,41 +16,18 @@ package org.jetbrains.kotlin.codegen.optimization.fixStack -import org.jetbrains.kotlin.codegen.inline.InlineCodegenUtil -import org.jetbrains.kotlin.codegen.optimization.common.InsnSequence -import org.jetbrains.kotlin.codegen.pseudoInsns.PseudoInsn -import org.jetbrains.kotlin.codegen.pseudoInsns.parsePseudoInsnOrNull import org.jetbrains.org.objectweb.asm.Opcodes import org.jetbrains.org.objectweb.asm.tree.* import org.jetbrains.org.objectweb.asm.tree.analysis.BasicValue import org.jetbrains.org.objectweb.asm.tree.analysis.Frame import org.jetbrains.org.objectweb.asm.tree.analysis.Value -inline fun InsnList.forEachPseudoInsn(block: (PseudoInsn, AbstractInsnNode) -> Unit) { - InsnSequence(this).forEach { insn -> - parsePseudoInsnOrNull(insn)?.let { block(it, insn) } - } -} - -inline fun InsnList.forEachInlineMarker(block: (String, MethodInsnNode) -> Unit) { - InsnSequence(this).forEach { insn -> - if (InlineCodegenUtil.isInlineMarker(insn)) { - val methodInsnNode = insn as MethodInsnNode - block(methodInsnNode.name, methodInsnNode) - } - } -} - fun Frame.top(): V? = peek(0) fun Frame.peek(offset: Int): V? = if (stackSize >= offset) getStack(stackSize - offset - 1) else null -fun MethodNode.updateMaxLocals(newMaxLocals: Int) { - maxLocals = Math.max(maxLocals, newMaxLocals) -} - class SavedStackDescriptor( val savedValues: List, val firstLocalVarIndex: Int @@ -64,7 +41,6 @@ class SavedStackDescriptor( fun isNotEmpty(): Boolean = savedValues.isNotEmpty() } - fun saveStack(methodNode: MethodNode, nodeToReplace: AbstractInsnNode, savedStackDescriptor: SavedStackDescriptor, restoreImmediately: Boolean) { with(methodNode.instructions) { @@ -148,4 +124,3 @@ fun replaceMarkerWithPops(methodNode: MethodNode, node: AbstractInsnNode, expect remove(node) } } -