Extract Function: Support implicit abnormal exits via Nothing-typed expressions
This commit is contained in:
@@ -39,6 +39,8 @@ interface Pseudocode {
|
||||
|
||||
val exitInstruction: SubroutineExitInstruction
|
||||
|
||||
val errorInstruction: SubroutineExitInstruction
|
||||
|
||||
val sinkInstruction: SubroutineSinkInstruction
|
||||
|
||||
val enterInstruction: SubroutineEnterInstruction
|
||||
|
||||
@@ -71,7 +71,7 @@ class PseudocodeImpl(override val correspondingElement: KtElement) : Pseudocode
|
||||
|
||||
private var internalErrorInstruction: SubroutineExitInstruction? = null
|
||||
|
||||
private val errorInstruction: SubroutineExitInstruction
|
||||
override val errorInstruction: SubroutineExitInstruction
|
||||
get() = internalErrorInstruction ?: throw AssertionError("Error instruction is read before initialization")
|
||||
|
||||
private var postPrecessed = false
|
||||
|
||||
@@ -18,9 +18,11 @@ package org.jetbrains.kotlin.cfg.pseudocode
|
||||
|
||||
import com.intellij.psi.util.PsiTreeUtil
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.cfg.Label
|
||||
import org.jetbrains.kotlin.cfg.pseudocode.instructions.Instruction
|
||||
import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.*
|
||||
import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.MagicKind.*
|
||||
import org.jetbrains.kotlin.cfg.pseudocode.instructions.jumps.AbstractJumpInstruction
|
||||
import org.jetbrains.kotlin.cfg.pseudocode.instructions.jumps.ConditionalJumpInstruction
|
||||
import org.jetbrains.kotlin.cfg.pseudocode.instructions.jumps.ReturnValueInstruction
|
||||
import org.jetbrains.kotlin.cfg.pseudocode.instructions.jumps.ThrowExceptionInstruction
|
||||
@@ -307,4 +309,7 @@ fun Pseudocode.getPseudocodeByElement(element: KtElement): Pseudocode? {
|
||||
|
||||
localDeclarations.forEach { decl -> decl.body.getPseudocodeByElement(element)?.let { return it } }
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
val Label.isJumpToError: Boolean
|
||||
get() = resolveToInstruction() == pseudocode.errorInstruction
|
||||
Reference in New Issue
Block a user