diff options
author | Leo Tenenbaum <pommicket@gmail.com> | 2020-07-13 19:01:37 -0400 |
---|---|---|
committer | Leo Tenenbaum <pommicket@gmail.com> | 2020-07-13 19:01:37 -0400 |
commit | a1afddbf8843d01c93cad0735fce4417318a096e (patch) | |
tree | 462c2ef16087bb7ae1aa2dc8cee173631f1472b9 /parse.c | |
parent | a12739cd3f2ae5c78eca04cb3a1b30243db4f4fe (diff) |
started #for, also fixed some other stuff (including io.puti)
Diffstat (limited to 'parse.c')
-rw-r--r-- | parse.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -2395,16 +2395,20 @@ static Status parse_stmt(Parser *p, Statement *s, bool *was_a_statement) { if (!cond_success) return false; w->body.kind = BLOCK_WHILE; } break; - case KW_FOR: { + case KW_FOR: + for_stmt: { s->kind = STMT_FOR; For *fo = s->for_ = parser_malloc(p, sizeof *fo); fo->flags = 0; + if (t->token->kind == TOKEN_DIRECT) { + fo->flags |= FOR_STATIC; + } Block *prev_block = p->block; fo->body.parent = p->block; p->block = &fo->body; Declaration *header_decl = &fo->header; idents_create(&p->block->idents, p->allocr, p->block); - ++t->token; + ++t->token; // move past 'for' if (!parse_decl(p, header_decl, PARSE_DECL_IGNORE_EXPR | DECL_CAN_END_WITH_LBRACE)) { tokr_skip_to_eof(t); goto for_fail; @@ -2514,6 +2518,8 @@ static Status parse_stmt(Parser *p, Statement *s, bool *was_a_statement) { } break; case DIRECT_IF: goto if_stmt; + case DIRECT_FOR: + goto for_stmt; case DIRECT_ERROR: case DIRECT_WARN: case DIRECT_INFO: { |