| ... | ... | @@ -591,17 +591,22 @@ static AstNode *ast_parse_top_level_decl(ParseContext *pc, VisibMod visib_mod) { |
| 591 | 591 | lib_name = eat_token_if(pc, TokenIdStringLiteral); |
| 592 | 592 | |
| 593 | 593 | if (first->id != TokenIdKeywordInline) { |
| 594 | Token *thread_local_kw = eat_token_if(pc, TokenIdKeywordThreadLocal); |
| 594 | 595 | AstNode *var_decl = ast_parse_var_decl(pc); |
| 595 | 596 | if (var_decl != nullptr) { |
| 596 | 597 | assert(var_decl->type == NodeTypeVariableDeclaration); |
| 597 | 598 | var_decl->line = first->start_line; |
| 598 | 599 | var_decl->column = first->start_column; |
| 600 | var_decl->data.variable_declaration.threadlocal_tok = thread_local_kw; |
| 599 | 601 | var_decl->data.variable_declaration.visib_mod = visib_mod; |
| 600 | 602 | var_decl->data.variable_declaration.is_extern = first->id == TokenIdKeywordExtern; |
| 601 | 603 | var_decl->data.variable_declaration.is_export = first->id == TokenIdKeywordExport; |
| 602 | 604 | var_decl->data.variable_declaration.lib_name = token_buf(lib_name); |
| 603 | 605 | return var_decl; |
| 604 | 606 | } |
| 607 | |
| 608 | if (thread_local_kw != nullptr) |
| 609 | put_back_token(pc); |
| 605 | 610 | } |
| 606 | 611 | |
| 607 | 612 | AstNode *fn_proto = ast_parse_fn_proto(pc); |