Skip to content

Commit

Permalink
Merge pull request #3284 from Sahnvour/export_variables
Browse files Browse the repository at this point in the history
Improved support for exporting variables
  • Loading branch information
andrewrk committed Nov 30, 2019
2 parents f980c29 + 6ebd26f commit 85e1e3b
Show file tree
Hide file tree
Showing 9 changed files with 217 additions and 150 deletions.
6 changes: 3 additions & 3 deletions src-self-hosted/stage1.zig
Original file line number Diff line number Diff line change
Expand Up @@ -427,11 +427,11 @@ export fn stage2_DepTokenizer_next(self: *stage2_DepTokenizer) stage2_DepNextRes
};
}

export const stage2_DepTokenizer = extern struct {
const stage2_DepTokenizer = extern struct {
handle: *DepTokenizer,
};

export const stage2_DepNextResult = extern struct {
const stage2_DepNextResult = extern struct {
type_id: TypeId,

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

export const TypeId = extern enum {
const TypeId = extern enum {
error_,
null_,
target,
Expand Down
11 changes: 11 additions & 0 deletions src/analyze.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3792,6 +3792,16 @@ ZigVar *add_variable(CodeGen *g, AstNode *source_node, Scope *parent_scope, Buf
return variable_entry;
}

static void validate_export_var_type(CodeGen *g, ZigType* type, AstNode *source_node) {
switch (type->id) {
case ZigTypeIdMetaType:
add_node_error(g, source_node, buf_sprintf("cannot export variable of type 'type'"));
break;
default:
break;
}
}

static void resolve_decl_var(CodeGen *g, TldVar *tld_var, bool allow_lazy) {
AstNode *source_node = tld_var->base.source_node;
AstNodeVariableDeclaration *var_decl = &source_node->data.variable_declaration;
Expand Down Expand Up @@ -3881,6 +3891,7 @@ static void resolve_decl_var(CodeGen *g, TldVar *tld_var, bool allow_lazy) {
}

if (is_export) {
validate_export_var_type(g, type, source_node);
add_var_export(g, tld_var->var, tld_var->var->name, GlobalLinkageIdStrong);
}

Expand Down
Loading

0 comments on commit 85e1e3b

Please sign in to comment.