commit c051904903e65f6bd2cb9d71f52688ce9d17d52d (tree)
parent 3d93c89fc55a428171bbfa779fb604801d84421d
Author: Jimmi Holst Christensen <jimmiholstchristensen@gmail.com>
Date: Sat, 11 May 2019 18:48:52 +0200
Fixed parser for extern threadlocal variables
Diffstat:
1 file changed, 5 insertions(+), 0 deletions(-)
diff --git a/src/parser.cpp b/src/parser.cpp
@@ -591,17 +591,22 @@ static AstNode *ast_parse_top_level_decl(ParseContext *pc, VisibMod visib_mod) {
lib_name = eat_token_if(pc, TokenIdStringLiteral);
if (first->id != TokenIdKeywordInline) {
+ Token *thread_local_kw = eat_token_if(pc, TokenIdKeywordThreadLocal);
AstNode *var_decl = ast_parse_var_decl(pc);
if (var_decl != nullptr) {
assert(var_decl->type == NodeTypeVariableDeclaration);
var_decl->line = first->start_line;
var_decl->column = first->start_column;
+ var_decl->data.variable_declaration.threadlocal_tok = thread_local_kw;
var_decl->data.variable_declaration.visib_mod = visib_mod;
var_decl->data.variable_declaration.is_extern = first->id == TokenIdKeywordExtern;
var_decl->data.variable_declaration.is_export = first->id == TokenIdKeywordExport;
var_decl->data.variable_declaration.lib_name = token_buf(lib_name);
return var_decl;
}
+
+ if (thread_local_kw != nullptr)
+ put_back_token(pc);
}
AstNode *fn_proto = ast_parse_fn_proto(pc);