nodes: fix some issues in Blocks (regarding purity consideration for IR)

No longer special case the last node in a Block.
Call super() semantic analysis for variables.
This may prevent some future issues.
This commit is contained in:
Antoine Viallon 2023-05-23 23:11:05 +02:00
parent 6b3c0e8fe3
commit 20731d969e
Signed by: aviallon
GPG key ID: D126B13AB555E16F

View file

@ -286,10 +286,9 @@ class Block(Statement):
def intermediate_representation(self) -> list[ir.IRItem]:
result: list[ir.IRItem] = []
for node in self.nodes[:-1]:
for node in self.nodes:
if not node.pure:
result += node.intermediate_representation()
result += self.nodes[-1].intermediate_representation()
return result
def semantic_analysis(self, context: semantic.Context | None):
@ -316,6 +315,7 @@ class Variable(Node):
return [self.identifier]
def semantic_analysis(self, context: semantic.Context):
super(Variable, self).semantic_analysis(context)
variable = context.get_variable(self.identifier.value)
if variable is None:
raise SemanticAnalysisError(location=self.location(), message=f"Unknown variable '{self.identifier.value}'")