Skip to content
Snippets Groups Projects
Commit 9a20fdcd authored by Daniel Bauer's avatar Daniel Bauer :speech_balloon: Committed by Frederik Hennig
Browse files

Add support for PsConditional to UndefinedSymbolsCollector and PsStatement to CanonicalClone

parent d0654625
1 merge request!386Add support for PsConditional to UndefinedSymbolsCollector and PsStatement to CanonicalClone
...@@ -6,6 +6,7 @@ from .structural import ( ...@@ -6,6 +6,7 @@ from .structural import (
PsAstNode, PsAstNode,
PsBlock, PsBlock,
PsComment, PsComment,
PsConditional,
PsDeclaration, PsDeclaration,
PsExpression, PsExpression,
PsLoop, PsLoop,
...@@ -56,6 +57,12 @@ class UndefinedSymbolsCollector: ...@@ -56,6 +57,12 @@ class UndefinedSymbolsCollector:
undefined_vars.discard(ctr.symbol) undefined_vars.discard(ctr.symbol)
return undefined_vars return undefined_vars
case PsConditional(cond, branch_true, branch_false):
undefined_vars = self(cond) | self(branch_true)
if branch_false is not None:
undefined_vars |= self(branch_false)
return undefined_vars
case PsComment(): case PsComment():
return set() return set()
...@@ -86,6 +93,7 @@ class UndefinedSymbolsCollector: ...@@ -86,6 +93,7 @@ class UndefinedSymbolsCollector:
PsAssignment() PsAssignment()
| PsBlock() | PsBlock()
| PsComment() | PsComment()
| PsConditional()
| PsExpression() | PsExpression()
| PsLoop() | PsLoop()
| PsStatement() | PsStatement()
......
...@@ -12,6 +12,7 @@ from ..ast.structural import ( ...@@ -12,6 +12,7 @@ from ..ast.structural import (
PsDeclaration, PsDeclaration,
PsAssignment, PsAssignment,
PsComment, PsComment,
PsStatement,
) )
from ..ast.expressions import PsExpression, PsSymbolExpr from ..ast.expressions import PsExpression, PsSymbolExpr
...@@ -99,6 +100,9 @@ class CanonicalClone: ...@@ -99,6 +100,9 @@ class CanonicalClone:
self._replace_symbols(expr_clone, cc) self._replace_symbols(expr_clone, cc)
return cast(Node_T, expr_clone) return cast(Node_T, expr_clone)
case PsStatement(expr):
return cast(Node_T, PsStatement(self.visit(expr, cc)))
case _: case _:
raise PsInternalCompilerError( raise PsInternalCompilerError(
f"Don't know how to canonically clone {type(node)}" f"Don't know how to canonically clone {type(node)}"
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment