nodes: add PseudoNodes to statements, for better display and diagnostics
This commit is contained in:
parent
066470b120
commit
6b3c0e8fe3
2 changed files with 7 additions and 4 deletions
|
|
@ -262,12 +262,15 @@ class Expression(Node):
|
||||||
|
|
||||||
class Statement(Node):
|
class Statement(Node):
|
||||||
|
|
||||||
def __init__(self, *nodes: Node):
|
def __init__(self, *nodes: Node, pseudo_nodes: list[PseudoNode] | None = None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.nodes = list(nodes)
|
self.nodes = list(nodes)
|
||||||
|
self.pseudo_nodes = []
|
||||||
|
if pseudo_nodes is not None:
|
||||||
|
self.pseudo_nodes = pseudo_nodes
|
||||||
|
|
||||||
def _values(self) -> list[Node | Any]:
|
def _values(self) -> list[Node | Any]:
|
||||||
return self.nodes
|
return self.nodes + self.pseudo_nodes
|
||||||
|
|
||||||
def intermediate_representation(self) -> list[ir.IRItem]:
|
def intermediate_representation(self) -> list[ir.IRItem]:
|
||||||
result: list[ir.IRItem] = []
|
result: list[ir.IRItem] = []
|
||||||
|
|
|
||||||
|
|
@ -170,10 +170,10 @@ class Parser:
|
||||||
if lbrace := self.accept(Tokens.Brace_Left):
|
if lbrace := self.accept(Tokens.Brace_Left):
|
||||||
block = self.block(name="anon")
|
block = self.block(name="anon")
|
||||||
rbrace = self.expect(Tokens.Brace_Right)
|
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):
|
elif expr := self.expression(mandatory):
|
||||||
semicolon = PseudoNode(self.expect(Tokens.Semicolon))
|
semicolon = PseudoNode(self.expect(Tokens.Semicolon))
|
||||||
return Statement(expr, semicolon)
|
return Statement(expr, pseudo_nodes=[semicolon])
|
||||||
elif mandatory:
|
elif mandatory:
|
||||||
raise UnexpectedTokenError(expr, wanted="expression")
|
raise UnexpectedTokenError(expr, wanted="expression")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue