Skip to content

Commit ad4bbc9

Browse files
committed
refact: use symbols.SYMBOL instead of Ast
This removes some cyclic dependency and makes typing more accurate.
1 parent 1e5b45c commit ad4bbc9

1 file changed

Lines changed: 8 additions & 7 deletions

File tree

src/api/optimize.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import src.api.check as chk
1212

1313
from src import symbols
14-
from src.ast import Ast
1514
from src.ast import NodeVisitor
1615
from src.api import errmsg
1716

@@ -65,7 +64,7 @@ def _visit(self, node: ToVisit):
6564
meth = getattr(self, f"visit_{node.obj.token}", self.generic_visit)
6665
return meth(node.obj)
6766

68-
def generic_visit(self, node: Ast):
67+
def generic_visit(self, node: symbols.SYMBOL):
6968
for i, child in enumerate(node.children):
7069
node.children[i] = (yield self.visit(child))
7170

@@ -86,6 +85,8 @@ def _visit(self, node: ToVisit):
8685

8786

8887
class UnreachableCodeVisitor(UniqueVisitor):
88+
""" Visitor to optimize unreachable code (and prune it).
89+
"""
8990
def visit_FUNCTION(self, node):
9091
if node.kind == KIND.function and node.body.token == 'BLOCK' and \
9192
(not node.body or node.body[-1].token != 'RETURN'):
@@ -203,7 +204,7 @@ def visit_ADDRESS(self, node):
203204
)
204205
yield node
205206

206-
def visit_BINARY(self, node):
207+
def visit_BINARY(self, node: symbols.BINARY):
207208
node = (yield self.generic_visit(node)) # This might convert consts to numbers if possible
208209
# Retry folding
209210
yield symbols.BINARY.make_node(node.operator, node.left, node.right, node.lineno, node.func, node.type_)
@@ -370,10 +371,10 @@ def _visit_LABEL(self, node):
370371
else:
371372
yield node
372373

373-
@staticmethod
374-
def generic_visit(node):
374+
def generic_visit(self, node: symbols.SYMBOL):
375375
for i in range(len(node.children)):
376376
node.children[i] = (yield ToVisit(node.children[i]))
377+
377378
yield node
378379

379380
def _check_if_any_arg_is_an_array_and_needs_lbound_or_ubound(self, params: symbols.PARAMLIST,
@@ -417,12 +418,12 @@ class VariableVisitor(GenericVisitor):
417418
_parent_variable = None
418419
_visited: Set[symbols.SYMBOL] = set()
419420

420-
@staticmethod
421-
def generic_visit(node: symbols.SYMBOL): # type: ignore
421+
def generic_visit(self, node: symbols.SYMBOL):
422422
if node not in VariableVisitor._visited:
423423
VariableVisitor._visited.add(node)
424424
for i in range(len(node.children)):
425425
node.children[i] = yield ToVisit(node.children[i])
426+
426427
yield node
427428

428429
def has_circular_dependency(self, var_dependency: VarDependency) -> bool:

0 commit comments

Comments
 (0)