[JVM] Move private extension methods into FixStackFrame
This commit is contained in:
+29
-29
@@ -176,42 +176,42 @@ internal class FixStackAnalyzer(
|
|||||||
override fun merge(frame: Frame<out FixStackValue>, interpreter: Interpreter<FixStackValue>): Boolean {
|
override fun merge(frame: Frame<out FixStackValue>, interpreter: Interpreter<FixStackValue>): Boolean {
|
||||||
throw UnsupportedOperationException("Stack normalization should not merge frames")
|
throw UnsupportedOperationException("Stack normalization should not merge frames")
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun FixStackFrame.executeBeforeInlineCallMarker(insn: AbstractInsnNode) {
|
private fun executeBeforeInlineCallMarker(insn: AbstractInsnNode) {
|
||||||
saveStackAndClear(insn)
|
saveStackAndClear(insn)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FixStackFrame.saveStackAndClear(insn: AbstractInsnNode) {
|
private fun saveStackAndClear(insn: AbstractInsnNode) {
|
||||||
val savedValues = getStackContent()
|
val savedValues = getStackContent()
|
||||||
spilledStacks[insn] = savedValues
|
spilledStacks[insn] = savedValues
|
||||||
clearStack()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun FixStackFrame.executeAfterInlineCallMarker(insn: AbstractInsnNode) {
|
|
||||||
val beforeInlineMarker = context.openingInlineMethodMarker[insn]
|
|
||||||
if (stackSize > 0) {
|
|
||||||
val returnValue = pop()
|
|
||||||
clearStack()
|
clearStack()
|
||||||
val savedValues = spilledStacks[beforeInlineMarker]
|
|
||||||
pushAll(savedValues!!)
|
|
||||||
push(returnValue)
|
|
||||||
} else {
|
|
||||||
val savedValues = spilledStacks[beforeInlineMarker]
|
|
||||||
pushAll(savedValues!!)
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun FixStackFrame.executeRestoreStackInTryCatch(insn: AbstractInsnNode) {
|
private fun executeAfterInlineCallMarker(insn: AbstractInsnNode) {
|
||||||
val saveNode = context.saveStackMarkerForRestoreMarker[insn]
|
val beforeInlineMarker = context.openingInlineMethodMarker[insn]
|
||||||
val savedValues = spilledStacks.getOrElse(saveNode!!) {
|
if (stackSize > 0) {
|
||||||
throw AssertionError("${insn.indexOf()}: Restore stack is unavailable for ${saveNode.indexOf()}")
|
val returnValue = pop()
|
||||||
|
clearStack()
|
||||||
|
val savedValues = spilledStacks[beforeInlineMarker]
|
||||||
|
pushAll(savedValues!!)
|
||||||
|
push(returnValue)
|
||||||
|
} else {
|
||||||
|
val savedValues = spilledStacks[beforeInlineMarker]
|
||||||
|
pushAll(savedValues!!)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pushAll(savedValues)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun FixStackFrame.executeSaveStackBeforeTry(insn: AbstractInsnNode) {
|
private fun executeRestoreStackInTryCatch(insn: AbstractInsnNode) {
|
||||||
saveStackAndClear(insn)
|
val saveNode = context.saveStackMarkerForRestoreMarker[insn]
|
||||||
|
val savedValues = spilledStacks.getOrElse(saveNode!!) {
|
||||||
|
throw AssertionError("${insn.indexOf()}: Restore stack is unavailable for ${saveNode.indexOf()}")
|
||||||
|
}
|
||||||
|
pushAll(savedValues)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun executeSaveStackBeforeTry(insn: AbstractInsnNode) {
|
||||||
|
saveStackAndClear(insn)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user