aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2017-12-17 11:17:54 +0000
committergingerBill <bill@gingerbill.org>2017-12-17 11:17:54 +0000
commit0d665c637f164bb077b9d63bb947690affede6dd (patch)
treee34473bf59800ab5f1b2d5c8d33652679748494a /src/parser.cpp
parent1b6a14ac39165d848cf5e4fd970d2dc2992fc439 (diff)
`using in` importation statements
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp21
1 files changed, 21 insertions, 0 deletions
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<AstNode *> using_in_list; \
CommentGroup docs; \
CommentGroup comment; \
}) \
@@ -371,6 +372,7 @@ AST_NODE_KIND(_DeclBegin, "", i32) \
Token relpath; \
String fullpath; \
bool been_handled; \
+ Array<AstNode *> 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);