summaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorCharles Brunet <charles.brunet@optelgroup.com>2023-09-22 15:42:34 -0400
committerDylan Baker <dylan@pnwbakers.com>2024-04-08 10:43:57 -0700
commit2a962ffd63ae0ae8c45f53c3cdd88663be03b794 (patch)
treecd1e9f37a897be01e79f2fc7ce15b6a2b83653de /mesonbuild
parentbe9e9af15a654e0a17992489b34ba14ba80ae7a2 (diff)
downloadmeson-2a962ffd63ae0ae8c45f53c3cdd88663be03b794.tar.gz
visit full ast for AstConditionLevel
Use the new `FullAstVisitor` for `AstConditionLevel`. This will allow proper formatting of `if / else / endif` and `foreach / endforeach` blocks.
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/ast/postprocess.py41
1 files changed, 25 insertions, 16 deletions
diff --git a/mesonbuild/ast/postprocess.py b/mesonbuild/ast/postprocess.py
index e9f251345..7acfc03a0 100644
--- a/mesonbuild/ast/postprocess.py
+++ b/mesonbuild/ast/postprocess.py
@@ -5,7 +5,7 @@
# or an interpreter-based tool
from __future__ import annotations
-from .visitor import AstVisitor
+from .visitor import AstVisitor, FullAstVisitor
import typing as T
if T.TYPE_CHECKING:
@@ -78,32 +78,41 @@ class AstIDGenerator(AstVisitor):
node.ast_id = name + '#' + str(self.counter[name])
self.counter[name] += 1
-class AstConditionLevel(AstVisitor):
+class AstConditionLevel(FullAstVisitor):
def __init__(self) -> None:
self.condition_level = 0
- def visit_default_func(self, node: mparser.BaseNode) -> None:
+ def enter_node(self, node: mparser.BaseNode) -> None:
node.condition_level = self.condition_level
def visit_ForeachClauseNode(self, node: mparser.ForeachClauseNode) -> None:
- self.visit_default_func(node)
- self.condition_level += 1
+ self.enter_node(node)
+ node.foreach_.accept(self)
+ for varname in node.varnames:
+ varname.accept(self)
+ for comma in node.commas:
+ comma.accept(self)
+ node.colon.accept(self)
node.items.accept(self)
+ self.condition_level += 1
node.block.accept(self)
self.condition_level -= 1
-
- def visit_IfClauseNode(self, node: mparser.IfClauseNode) -> None:
- self.visit_default_func(node)
- for i in node.ifs:
- i.accept(self)
- if node.elseblock:
- self.condition_level += 1
- node.elseblock.accept(self)
- self.condition_level -= 1
+ node.endforeach.accept(self)
+ self.exit_node(node)
def visit_IfNode(self, node: mparser.IfNode) -> None:
- self.visit_default_func(node)
- self.condition_level += 1
+ self.enter_node(node)
+ node.if_.accept(self)
node.condition.accept(self)
+ self.condition_level += 1
+ node.block.accept(self)
+ self.condition_level -= 1
+ self.exit_node(node)
+
+ def visit_ElseNode(self, node: mparser.ElseNode) -> None:
+ self.enter_node(node)
+ node.else_.accept(self)
+ self.condition_level += 1
node.block.accept(self)
self.condition_level -= 1
+ self.exit_node(node)