Skip to content

Commit 696567d

Browse files
committed
export: check variable type
also fixed existing occurrences
1 parent 912c1c2 commit 696567d

3 files changed

Lines changed: 15 additions & 4 deletions

File tree

src-self-hosted/stage1.zig

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

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

435-
export const stage2_DepNextResult = extern struct {
435+
const stage2_DepNextResult = extern struct {
436436
type_id: TypeId,
437437

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

444-
export const TypeId = extern enum {
444+
const TypeId = extern enum {
445445
error_,
446446
null_,
447447
target,

src/analyze.cpp

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

3776+
static void validate_export_var_type(CodeGen *g, ZigType* type, AstNode *source_node) {
3777+
switch (type->id) {
3778+
case ZigTypeIdMetaType:
3779+
add_node_error(g, source_node, buf_sprintf("cannot export variable of type 'type'"));
3780+
break;
3781+
default:
3782+
break;
3783+
}
3784+
}
3785+
37763786
static void resolve_decl_var(CodeGen *g, TldVar *tld_var, bool allow_lazy) {
37773787
AstNode *source_node = tld_var->base.source_node;
37783788
AstNodeVariableDeclaration *var_decl = &source_node->data.variable_declaration;
@@ -3862,6 +3872,7 @@ static void resolve_decl_var(CodeGen *g, TldVar *tld_var, bool allow_lazy) {
38623872
}
38633873

38643874
if (is_export) {
3875+
validate_export_var_type(g, type, source_node);
38653876
add_var_export(g, tld_var->var, tld_var->var->name, GlobalLinkageIdStrong);
38663877
}
38673878

test/gen_h.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ pub fn addCases(cases: *tests.GenHContext) void {
7474
);
7575

7676
cases.add("declare opaque type",
77-
\\export const Foo = @OpaqueType();
77+
\\const Foo = @OpaqueType();
7878
\\
7979
\\export fn entry(foo: ?*Foo) void { }
8080
,

0 commit comments

Comments
 (0)