Don't use labels for caching
Avoid new objects creation
This commit is contained in:
+5
-5
@@ -30,7 +30,7 @@ class LabelNormalizationMethodTransformer : MethodTransformer() {
|
|||||||
|
|
||||||
private class TransformerForMethod(val methodNode: MethodNode) {
|
private class TransformerForMethod(val methodNode: MethodNode) {
|
||||||
val instructions = methodNode.instructions
|
val instructions = methodNode.instructions
|
||||||
val newLabelNodes = SmartIdentityTable<Label, LabelNode>()
|
val newLabelNodes = SmartIdentityTable<LabelNode, LabelNode>()
|
||||||
|
|
||||||
fun transform() {
|
fun transform() {
|
||||||
if (rewriteLabelInstructions()) {
|
if (rewriteLabelInstructions()) {
|
||||||
@@ -48,11 +48,11 @@ class LabelNormalizationMethodTransformer : MethodTransformer() {
|
|||||||
if (thisNode is LabelNode) {
|
if (thisNode is LabelNode) {
|
||||||
val prevNode = thisNode.previous
|
val prevNode = thisNode.previous
|
||||||
if (prevNode is LabelNode) {
|
if (prevNode is LabelNode) {
|
||||||
newLabelNodes[thisNode.label] = prevNode
|
newLabelNodes[thisNode] = prevNode
|
||||||
removedAnyLabels = true
|
removedAnyLabels = true
|
||||||
thisNode = instructions.removeNodeGetNext(thisNode)
|
thisNode = instructions.removeNodeGetNext(thisNode)
|
||||||
} else {
|
} else {
|
||||||
newLabelNodes[thisNode.label] = thisNode
|
newLabelNodes[thisNode] = thisNode
|
||||||
thisNode = thisNode.next
|
thisNode = thisNode.next
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -145,12 +145,12 @@ class LabelNormalizationMethodTransformer : MethodTransformer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getNew(oldLabelNode: LabelNode): LabelNode {
|
private fun getNew(oldLabelNode: LabelNode): LabelNode {
|
||||||
return newLabelNodes[oldLabelNode.label]
|
return newLabelNodes[oldLabelNode]
|
||||||
?: throw IllegalStateException("Label wasn't found during iterating through instructions")
|
?: throw IllegalStateException("Label wasn't found during iterating through instructions")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getNewOrOld(oldLabelNode: LabelNode): LabelNode =
|
private fun getNewOrOld(oldLabelNode: LabelNode): LabelNode =
|
||||||
newLabelNodes[oldLabelNode.label] ?: oldLabelNode
|
newLabelNodes[oldLabelNode] ?: oldLabelNode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user