[FE 1.0] Record USED_AS_EXPRESSION for unreachable CFG nodes
^KT-48708 Fixed
This commit is contained in:
committed by
teamcityserver
parent
8464b15d27
commit
d390f881c8
+11
-9
@@ -797,15 +797,17 @@ class ControlFlowInformationProviderImpl private constructor(
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Statements
|
||||
|
||||
private fun markStatements() = pseudocode.traverse(TraversalOrder.FORWARD) { instruction ->
|
||||
val value = (instruction as? InstructionWithValue)?.outputValue
|
||||
val pseudocode = instruction.owner
|
||||
val usages = pseudocode.getUsages(value)
|
||||
val isUsedAsExpression = usages.isNotEmpty()
|
||||
val isUsedAsResultOfLambda = isUsedAsResultOfLambda(usages)
|
||||
for (element in pseudocode.getValueElements(value)) {
|
||||
trace.record(USED_AS_EXPRESSION, element, isUsedAsExpression)
|
||||
trace.record(USED_AS_RESULT_OF_LAMBDA, element, isUsedAsResultOfLambda)
|
||||
private fun markStatements() {
|
||||
pseudocode.traverseIncludingDeadCode { instruction ->
|
||||
val value = (instruction as? InstructionWithValue)?.outputValue
|
||||
val pseudocode = instruction.owner
|
||||
val usages = pseudocode.getUsages(value)
|
||||
val isUsedAsExpression = usages.isNotEmpty()
|
||||
val isUsedAsResultOfLambda = isUsedAsResultOfLambda(usages)
|
||||
for (element in pseudocode.getValueElements(value)) {
|
||||
trace.record(USED_AS_EXPRESSION, element, isUsedAsExpression)
|
||||
trace.record(USED_AS_RESULT_OF_LAMBDA, element, isUsedAsResultOfLambda)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -54,6 +54,15 @@ fun <D> Pseudocode.traverse(
|
||||
}
|
||||
}
|
||||
|
||||
fun Pseudocode.traverseIncludingDeadCode(analyzeInstruction: (Instruction) -> Unit) {
|
||||
for (instruction in instructionsIncludingDeadCode) {
|
||||
if (instruction is LocalFunctionDeclarationInstruction) {
|
||||
instruction.body.traverseIncludingDeadCode(analyzeInstruction)
|
||||
}
|
||||
analyzeInstruction(instruction)
|
||||
}
|
||||
}
|
||||
|
||||
fun <I : ControlFlowInfo<*, *, *>> Pseudocode.collectData(
|
||||
traversalOrder: TraversalOrder,
|
||||
mergeEdges: (Instruction, Collection<I>) -> Edges<I>,
|
||||
|
||||
Reference in New Issue
Block a user