[JVM] Move private extension methods into FixStackFrame

This commit is contained in:
Ivan Kylchik
2023-08-24 12:40:10 +02:00
committed by Space Team
parent 2c4c3a73b8
commit f49f6656b9
@@ -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)
}
} }
} }