MCPcopy Create free account
hub / github.com/NICUP14/MiniLang / if_statement

Method if_statement

src/Parser.py:1620–1657  ·  view source on GitHub ↗
(self, add_predef: bool)

Source from the content-addressed store, hash-verified

1618 return node
1619
1620 def if_statement(self, add_predef: bool) -> Optional[Node]:
1621 cond_node = self.token_list_to_tree()
1622 if cond_node.ntype not in (any_type, bool_type):
1623 print_error('if_statement',
1624 f'Expected a boolean expression, got type {rev_type_of(cond_node.ntype)}', self)
1625
1626 self.next_line()
1627 cond_node = self.inject_cond(cond_node)
1628 end_node = Node(NodeKind.END, void_type, '')
1629
1630 # TODO: Create a function to emulate this repeated behaviour
1631 predef = Def.predeferred
1632 Def.predeferred = None
1633 true_node = glue_statements([Node(NodeKind.IF, void_type, '',
1634 self.compound_statement(), None, cond_node), end_node])
1635 Def.predeferred = predef
1636
1637 elif_node = None
1638 if self.curr_token().kind == TokenKind.KW_ELIF:
1639 elif_node = self.elif_statement(add_predef)
1640
1641 false_node = None
1642 if self.curr_token().kind == TokenKind.KW_ELSE:
1643 self.next_line()
1644 predef = Def.predeferred
1645 Def.predeferred = None
1646 false_node = glue_statements([Node(NodeKind.ELSE, void_type, '',
1647 self.compound_statement()), end_node])
1648 Def.predeferred = predef
1649
1650 nodes = [true_node]
1651 if elif_node is not None:
1652 nodes.append(elif_node)
1653 if false_node is not None:
1654 nodes.append(false_node)
1655
1656 node = glue_statements(nodes)
1657 return node
1658
1659 def ret_statement(self) -> Optional[Node]:
1660 if Def.macro_name != '':

Callers 1

statementMethod · 0.95

Calls 10

token_list_to_treeMethod · 0.95
next_lineMethod · 0.95
inject_condMethod · 0.95
compound_statementMethod · 0.95
curr_tokenMethod · 0.95
elif_statementMethod · 0.95
print_errorFunction · 0.90
rev_type_ofFunction · 0.90
NodeClass · 0.90
glue_statementsFunction · 0.90

Tested by

no test coverage detected