diff options
| author | gingerBill <bill@gingerbill.org> | 2023-08-04 15:45:25 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-08-04 15:45:25 +0100 |
| commit | 3323d5c76cd5eb5362d6df5ae00aef1c4d567fe3 (patch) | |
| tree | ea8cd5504a81b9f1ed383fa04eed47546808472a /src/parser.cpp | |
| parent | 4a71603a777783a2ee4cd78368f1b1fbe76d7773 (diff) | |
Disallow `import` declarations within a `when` statement
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 78120507d..aa8969103 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -4183,6 +4183,8 @@ gb_internal Ast *parse_when_stmt(AstFile *f) { syntax_error(f->curr_token, "Expected condition for when statement"); } + bool was_in_when_statement = f->in_when_statement; + f->in_when_statement = true; if (allow_token(f, Token_do)) { body = parse_do_body(f, cond ? ast_token(cond) : token, "then when statement"); } else { @@ -4209,6 +4211,7 @@ gb_internal Ast *parse_when_stmt(AstFile *f) { break; } } + f->in_when_statement = was_in_when_statement; return ast_when_stmt(f, token, cond, body, else_stmt); } @@ -4470,6 +4473,10 @@ gb_internal Ast *parse_import_decl(AstFile *f, ImportDeclKind kind) { array_add(&f->imports, s); } + if (f->in_when_statement) { + syntax_error(import_name, "Cannot use 'import' within a 'when' statement. Prefer using the file suffixes (e.g. foo_windows.odin) or '//+build' tags"); + } + if (kind != ImportDecl_Standard) { syntax_error(import_name, "'using import' is not allowed, please use the import name explicitly"); } |