authorgravatar for sahnvour@pm.meSahnvour <sahnvour@pm.me> 2019-09-21 23:29:55+02:00
committergravatar for sahnvour@pm.meSahnvour <sahnvour@pm.me> 2019-11-24 21:33:58+01:00
log696567d9d7870e5bf640186193fe0b7fbccdb6b6
treefc6318964c8536666512c9ae8f97c3a626ebadc2
parent912c1c24c32799c63949fdf466fccd31f84a1aa1

export: check variable type

also fixed existing occurrences

3 files changed, 15 insertions(+), 4 deletions(-)

src-self-hosted/stage1.zig+3-3
......@@ -428,11 +428,11 @@ export fn stage2_DepTokenizer_next(self: *stage2_DepTokenizer) stage2_DepNextRes
428428 };
429429}
430430
431export const stage2_DepTokenizer = extern struct {
431const stage2_DepTokenizer = extern struct {
432432 handle: *DepTokenizer,
433433};
434434
435export const stage2_DepNextResult = extern struct {
435const 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+11
......@@ -3773,6 +3773,16 @@ ZigVar *add_variable(CodeGen *g, AstNode *source_node, Scope *parent_scope, Buf
37733773 return variable_entry;
37743774}
37753775
3776static 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
37763786static 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+1-1
......@@ -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 ,