diff --git a/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/passes/EvaluationOrderGraphPass.kt b/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/passes/EvaluationOrderGraphPass.kt index 079e82f4fb..7dd54fd62b 100644 --- a/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/passes/EvaluationOrderGraphPass.kt +++ b/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/passes/EvaluationOrderGraphPass.kt @@ -40,6 +40,7 @@ import de.fraunhofer.aisec.cpg.graph.statements.expressions.* import de.fraunhofer.aisec.cpg.graph.types.Type import de.fraunhofer.aisec.cpg.helpers.IdentitySet import de.fraunhofer.aisec.cpg.helpers.SubgraphWalker +import de.fraunhofer.aisec.cpg.helpers.identitySetOf import de.fraunhofer.aisec.cpg.tryCast import java.util.* import org.slf4j.LoggerFactory @@ -120,6 +121,8 @@ open class EvaluationOrderGraphPass(ctx: TranslationContext) : TranslationUnitPa */ protected val intermediateNodes = mutableListOf() + val alreadySeen = identitySetOf() + protected fun doNothing() { // Nothing to do for this node type } @@ -341,9 +344,12 @@ open class EvaluationOrderGraphPass(ctx: TranslationContext) : TranslationUnitPa * e.g. [LoopStatement]s or [BreakStatement]. */ protected fun handleEOG(node: Node?) { - if (node == null) { + if (node == null || alreadySeen.contains(node)) { return } + + alreadySeen.add(node) + intermediateNodes.add(node) when (node) { diff --git a/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/passes/SymbolResolver.kt b/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/passes/SymbolResolver.kt index 8759d299c7..3fec8cbb78 100644 --- a/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/passes/SymbolResolver.kt +++ b/cpg-core/src/main/kotlin/de/fraunhofer/aisec/cpg/passes/SymbolResolver.kt @@ -81,7 +81,7 @@ import org.slf4j.LoggerFactory @DependsOn(TypeHierarchyResolver::class) @DependsOn(EvaluationOrderGraphPass::class) @DependsOn(ImportResolver::class) -open class SymbolResolver(ctx: TranslationContext) : TranslationResultPass(ctx) { +open class SymbolResolver(ctx: TranslationContext) : ComponentPass(ctx) { /** Configuration for the [SymbolResolver]. */ class Configuration( @@ -122,8 +122,8 @@ open class SymbolResolver(ctx: TranslationContext) : TranslationResultPass(ctx) null } - override fun accept(component: TranslationResult) { - // ctx.currentComponent = component + override fun accept(component: Component) { + ctx.currentComponent = component walker = ScopedWalker(scopeManager) cacheTemplates(component) diff --git a/cpg-language-python/src/main/kotlin/de/fraunhofer/aisec/cpg/frontends/python/StatementHandler.kt b/cpg-language-python/src/main/kotlin/de/fraunhofer/aisec/cpg/frontends/python/StatementHandler.kt index 1b4640926b..292748d6bc 100644 --- a/cpg-language-python/src/main/kotlin/de/fraunhofer/aisec/cpg/frontends/python/StatementHandler.kt +++ b/cpg-language-python/src/main/kotlin/de/fraunhofer/aisec/cpg/frontends/python/StatementHandler.kt @@ -1218,7 +1218,7 @@ class StatementHandler(frontend: PythonLanguageFrontend) : */ private fun wrapDeclarationToStatement(decl: Declaration): DeclarationStatement { val declStmt = newDeclarationStatement().codeAndLocationFrom(decl) - declStmt.addDeclaration(decl) + declStmt.declarations += decl return declStmt }