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

Method statement

src/Parser.py:1236–1295  ·  view source on GitHub ↗
(self, add_predef: bool = True)

Source from the content-addressed store, hash-verified

1234 pass
1235
1236 def statement(self, add_predef: bool = True) -> Optional[Node]:
1237 token = self.curr_token()
1238
1239 node = None
1240 if token.kind == TokenKind.KW_LET:
1241 self.next_token()
1242 node = self.declaration()
1243 elif token.kind == TokenKind.KW_IF:
1244 self.next_token()
1245 node = self.if_statement(False)
1246 elif token.kind == TokenKind.KW_FOR:
1247 self.next_token()
1248 node = self.for_statement(False)
1249 elif token.kind == TokenKind.KW_WHILE:
1250 self.next_token()
1251 node = self.while_statement(False)
1252 elif token.kind == TokenKind.KW_FUN:
1253 self.next_token()
1254 node = self.fun_declaration(is_extern=False)
1255 elif token.kind == TokenKind.KW_STRUCT:
1256 self.next_token()
1257 node = self.struct_declaration()
1258 elif token.kind == TokenKind.KW_RET:
1259 self.next_token()
1260 node = self.ret_statement()
1261 elif token.kind == TokenKind.KW_EXTERN:
1262 self.next_token()
1263 if self.curr_token().kind == TokenKind.KW_FUN:
1264 self.match_token(TokenKind.KW_FUN)
1265 node = self.fun_declaration(is_extern=True)
1266 else:
1267 self.match_token(TokenKind.KW_STRUCT)
1268 node = self.struct_declaration(is_extern=True)
1269 elif token.kind == TokenKind.KW_ALIAS:
1270 self.next_token()
1271 node = self.alias_definition()
1272 elif token.kind == TokenKind.KW_IMPORT:
1273 self.next_token()
1274 node = self.import_statement()
1275 elif token.kind == TokenKind.KW_NAMESPACE:
1276 self.next_token()
1277 node = self.namespace_statement()
1278 elif token.kind == TokenKind.KW_DEFER:
1279 self.next_token()
1280 node = self.defer_statement()
1281 elif token.kind == TokenKind.KW_BLOCK:
1282 self.next_token()
1283 node = self.block_statement()
1284 elif token.kind == TokenKind.KW_MACRO:
1285 self.next_token()
1286 node = self.macro_statement()
1287 else:
1288 node = self.token_list_to_tree()
1289
1290 # Inserts predeferred statements right before the fun's body
1291 if add_predef and Def.predeferred is not None:
1292 node = glue_statements([Def.predeferred, node])
1293 Def.predeferred = None

Callers 2

program_statementMethod · 0.95
compound_statementMethod · 0.95

Calls 15

curr_tokenMethod · 0.95
next_tokenMethod · 0.95
declarationMethod · 0.95
if_statementMethod · 0.95
for_statementMethod · 0.95
while_statementMethod · 0.95
fun_declarationMethod · 0.95
struct_declarationMethod · 0.95
ret_statementMethod · 0.95
match_tokenMethod · 0.95
alias_definitionMethod · 0.95
import_statementMethod · 0.95

Tested by

no test coverage detected