Skip to content

Commit 85e1e3b

Browse files
authored
Merge pull request #3284 from Sahnvour/export_variables
Improved support for exporting variables
2 parents f980c29 + 6ebd26f commit 85e1e3b

File tree

9 files changed

+217
-150
lines changed

9 files changed

+217
-150
lines changed

src-self-hosted/stage1.zig

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -427,11 +427,11 @@ export fn stage2_DepTokenizer_next(self: *stage2_DepTokenizer) stage2_DepNextRes
427427
};
428428
}
429429

430-
export const stage2_DepTokenizer = extern struct {
430+
const stage2_DepTokenizer = extern struct {
431431
handle: *DepTokenizer,
432432
};
433433

434-
export const stage2_DepNextResult = extern struct {
434+
const stage2_DepNextResult = extern struct {
435435
type_id: TypeId,
436436

437437
// when type_id == error --> error text
@@ -440,7 +440,7 @@ export const stage2_DepNextResult = extern struct {
440440
// when type_id == prereq --> prereq pathname
441441
textz: [*]const u8,
442442

443-
export const TypeId = extern enum {
443+
const TypeId = extern enum {
444444
error_,
445445
null_,
446446
target,

src/analyze.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3792,6 +3792,16 @@ ZigVar *add_variable(CodeGen *g, AstNode *source_node, Scope *parent_scope, Buf
37923792
return variable_entry;
37933793
}
37943794

3795+
static void validate_export_var_type(CodeGen *g, ZigType* type, AstNode *source_node) {
3796+
switch (type->id) {
3797+
case ZigTypeIdMetaType:
3798+
add_node_error(g, source_node, buf_sprintf("cannot export variable of type 'type'"));
3799+
break;
3800+
default:
3801+
break;
3802+
}
3803+
}
3804+
37953805
static void resolve_decl_var(CodeGen *g, TldVar *tld_var, bool allow_lazy) {
37963806
AstNode *source_node = tld_var->base.source_node;
37973807
AstNodeVariableDeclaration *var_decl = &source_node->data.variable_declaration;
@@ -3881,6 +3891,7 @@ static void resolve_decl_var(CodeGen *g, TldVar *tld_var, bool allow_lazy) {
38813891
}
38823892

38833893
if (is_export) {
3894+
validate_export_var_type(g, type, source_node);
38843895
add_var_export(g, tld_var->var, tld_var->var->name, GlobalLinkageIdStrong);
38853896
}
38863897

0 commit comments

Comments
 (0)