aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2018-02-13 18:01:42 +0000
committergingerBill <bill@gingerbill.org>2018-02-13 18:01:42 +0000
commitda300aa9c352e9fa4a99b2368d0268be834bfa81 (patch)
tree05b1d20dea0a718de45aff6c6c235ad471808ec2 /src
parent2ce55783d2c9cfb72da5bc4a51556d9938b6124a (diff)
Fix `enum #export` does not work with `export` #185
Diffstat (limited to 'src')
-rw-r--r--src/checker.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index d0495e2d3..941ae09b0 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -2424,7 +2424,16 @@ void check_add_export_decl(Checker *c, AstNodeExportDecl *ed) {
// NOTE(bill): Add imported entities to this file's scope
for_array(elem_index, scope->elements.entries) {
Entity *e = scope->elements.entries[elem_index].value;
+ String name = e->token.string;
if (e->scope == parent_scope) continue;
+ DeclInfo *d = e->decl_info;
+ // NOTE(bill): The enum #export must be evaluated before use
+ if (d != nullptr && d->init_expr != nullptr) {
+ AstNode *expr = unparen_expr(d->init_expr);
+ if (expr->kind == AstNode_EnumType && expr->EnumType.is_export) {
+ check_entity_decl(c, e, d, nullptr);
+ }
+ }
if (is_entity_kind_exported(e->kind)) {
add_entity(c, parent_scope, e->identifier, e);