From 0d665c637f164bb077b9d63bb947690affede6dd Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 17 Dec 2017 11:17:54 +0000 Subject: `using in` importation statements --- src/parser.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/parser.cpp') diff --git a/src/parser.cpp b/src/parser.cpp index 23b99a2ba..8c96b1fb2 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -362,6 +362,7 @@ AST_NODE_KIND(_DeclBegin, "", i32) \ Token import_name; \ bool is_using; \ bool been_handled; \ + Array using_in_list; \ CommentGroup docs; \ CommentGroup comment; \ }) \ @@ -371,6 +372,7 @@ AST_NODE_KIND(_DeclBegin, "", i32) \ Token relpath; \ String fullpath; \ bool been_handled; \ + Array using_in_list; \ CommentGroup docs; \ CommentGroup comment; \ }) \ @@ -4518,6 +4520,25 @@ AstNode *parse_stmt(AstFile *f) { return ast_bad_stmt(f, token, f->curr_token); } + if (f->curr_token.kind == Token_in) { + Token in_token = expect_token(f, Token_in); + if (f->curr_token.kind == Token_import) { + AstNode *import_decl = parse_import_decl(f, true); + if (import_decl->kind == AstNode_ImportDecl) { + import_decl->ImportDecl.using_in_list = list; + } + return import_decl; + } else if (f->curr_token.kind == Token_export) { + AstNode *export_decl = parse_export_decl(f); + if (export_decl->kind == AstNode_ExportDecl) { + export_decl->ExportDecl.using_in_list = list; + } + return export_decl; + } + syntax_error(token, "Illegal use of 'using' statement"); + return ast_bad_stmt(f, token, f->curr_token); + } + if (f->curr_token.kind != Token_Colon) { expect_semicolon(f, list[list.count-1]); return ast_using_stmt(f, token, list); -- cgit v1.2.3