From ccdaf946b969661220737ec747e5a720b13d0bc7 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Sat, 21 Nov 2020 09:48:21 +0100 Subject: Rename back to extern, extend a stage1 parser hack Make it recognize extern/export symbols prefixed by @ as a builtin rather than stand-alone keywords. --- src/stage1/parser.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/stage1/parser.cpp') diff --git a/src/stage1/parser.cpp b/src/stage1/parser.cpp index a49773e9ca..eab4ea0f77 100644 --- a/src/stage1/parser.cpp +++ b/src/stage1/parser.cpp @@ -1652,18 +1652,21 @@ static AstNode *ast_parse_primary_type_expr(ParseContext *pc) { // TODO: This is not in line with the grammar. // Because the prev stage 1 tokenizer does not parse // @[a-zA-Z_][a-zA-Z0-9_] as one token, it has to do a - // hack, where it accepts '@' (IDENTIFIER / KEYWORD_export). + // hack, where it accepts '@' (IDENTIFIER / KEYWORD_export / + // KEYWORD_extern). // I'd say that it's better if '@' is part of the builtin // identifier token. Token *at_sign = eat_token_if(pc, TokenIdAtSign); if (at_sign != nullptr) { Buf *name; - Token *token = eat_token_if(pc, TokenIdKeywordExport); - if (token == nullptr) { + Token *token; + if ((token = eat_token_if(pc, TokenIdKeywordExport)) != nullptr) { + name = buf_create_from_str("export"); + } else if ((token = eat_token_if(pc, TokenIdKeywordExtern)) != nullptr) { + name = buf_create_from_str("extern"); + } else { token = expect_token(pc, TokenIdSymbol); name = token_buf(token); - } else { - name = buf_create_from_str("export"); } AstNode *res = ast_expect(pc, ast_parse_fn_call_arguments); -- cgit v1.2.3