authorgravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2019-05-11 18:48:52+02:00
committergravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2019-05-11 18:48:52+02:00
logc051904903e65f6bd2cb9d71f52688ce9d17d52d
tree8d0a09ea2b7c25f92225b5672c9b3c3381ec57a8
parent3d93c89fc55a428171bbfa779fb604801d84421d

Fixed parser for extern threadlocal variables


1 files changed, 5 insertions(+), 0 deletions(-)

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