diff --git a/compiler/nodes.py b/compiler/nodes.py index b456534..eaf3d64 100644 --- a/compiler/nodes.py +++ b/compiler/nodes.py @@ -262,12 +262,15 @@ class Expression(Node): class Statement(Node): - def __init__(self, *nodes: Node): + def __init__(self, *nodes: Node, pseudo_nodes: list[PseudoNode] | None = None): super().__init__() self.nodes = list(nodes) + self.pseudo_nodes = [] + if pseudo_nodes is not None: + self.pseudo_nodes = pseudo_nodes def _values(self) -> list[Node | Any]: - return self.nodes + return self.nodes + self.pseudo_nodes def intermediate_representation(self) -> list[ir.IRItem]: result: list[ir.IRItem] = [] diff --git a/compiler/parser.py b/compiler/parser.py index 92ec563..48c3eda 100644 --- a/compiler/parser.py +++ b/compiler/parser.py @@ -170,10 +170,10 @@ class Parser: if lbrace := self.accept(Tokens.Brace_Left): block = self.block(name="anon") rbrace = self.expect(Tokens.Brace_Right) - return Statement(block, PseudoNode(lbrace), PseudoNode(rbrace)) + return Statement(block, pseudo_nodes=[PseudoNode(lbrace), PseudoNode(rbrace)]) elif expr := self.expression(mandatory): semicolon = PseudoNode(self.expect(Tokens.Semicolon)) - return Statement(expr, semicolon) + return Statement(expr, pseudo_nodes=[semicolon]) elif mandatory: raise UnexpectedTokenError(expr, wanted="expression")