(self, add_predef: bool = True)
| 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 |
no test coverage detected