| ... | ... | @@ -498,7 +498,7 @@ fn declVisitor(c: *Context, decl: *const ZigClangDecl) Error!void { |
| 498 | 498 | _ = try transRecordDecl(c, @ptrCast(*const ZigClangRecordDecl, decl)); |
| 499 | 499 | }, |
| 500 | 500 | .Var => { |
| 501 | | return visitVarDecl(c, @ptrCast(*const ZigClangVarDecl, decl)); |
| 501 | return visitVarDecl(c, @ptrCast(*const ZigClangVarDecl, decl), null); |
| 502 | 502 | }, |
| 503 | 503 | .Empty => { |
| 504 | 504 | // Do nothing |
| ... | ... | @@ -679,12 +679,13 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void { |
| 679 | 679 | return addTopLevelDecl(c, fn_name, &proto_node.base); |
| 680 | 680 | } |
| 681 | 681 | |
| 682 | | fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl) Error!void { |
| 683 | | const var_name = try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, var_decl))); |
| 682 | /// if mangled_name is not null, this var decl was declared in a block scope. |
| 683 | fn visitVarDecl(c: *Context, var_decl: *const ZigClangVarDecl, mangled_name: ?[]const u8) Error!void { |
| 684 | const var_name = mangled_name orelse try c.str(ZigClangNamedDecl_getName_bytes_begin(@ptrCast(*const ZigClangNamedDecl, var_decl))); |
| 684 | 685 | if (c.global_scope.sym_table.contains(var_name)) |
| 685 | 686 | return; // Avoid processing this decl twice |
| 686 | 687 | const rp = makeRestorePoint(c); |
| 687 | | const visib_tok = try appendToken(c, .Keyword_pub, "pub"); |
| 688 | const visib_tok = if (mangled_name) |_| null else try appendToken(c, .Keyword_pub, "pub"); |
| 688 | 689 | |
| 689 | 690 | const thread_local_token = if (ZigClangVarDecl_getTLSKind(var_decl) == .None) |
| 690 | 691 | null |
| ... | ... | @@ -1582,15 +1583,22 @@ fn transDeclStmtOne( |
| 1582 | 1583 | .Var => { |
| 1583 | 1584 | const var_decl = @ptrCast(*const ZigClangVarDecl, decl); |
| 1584 | 1585 | |
| 1585 | | const thread_local_token = if (ZigClangVarDecl_getTLSKind(var_decl) == .None) |
| 1586 | | null |
| 1587 | | else |
| 1588 | | try appendToken(c, .Keyword_threadlocal, "threadlocal"); |
| 1589 | 1586 | const qual_type = ZigClangVarDecl_getTypeSourceInfo_getType(var_decl); |
| 1590 | 1587 | const name = try c.str(ZigClangNamedDecl_getName_bytes_begin( |
| 1591 | 1588 | @ptrCast(*const ZigClangNamedDecl, var_decl), |
| 1592 | 1589 | )); |
| 1593 | 1590 | const mangled_name = try block_scope.makeMangledName(c, name); |
| 1591 | |
| 1592 | switch (ZigClangVarDecl_getStorageClass(var_decl)) { |
| 1593 | .Extern, .Static => { |
| 1594 | // This is actually a global variable, put it in the global scope and reference it. |
| 1595 | // `_ = mangled_name;` |
| 1596 | try visitVarDecl(rp.c, var_decl, mangled_name); |
| 1597 | return try maybeSuppressResult(rp, scope, .unused, try transCreateNodeIdentifier(rp.c, mangled_name)); |
| 1598 | }, |
| 1599 | else => {}, |
| 1600 | } |
| 1601 | |
| 1594 | 1602 | const mut_tok = if (ZigClangQualType_isConstQualified(qual_type)) |
| 1595 | 1603 | try appendToken(c, .Keyword_const, "const") |
| 1596 | 1604 | else |
| ... | ... | @@ -1618,7 +1626,6 @@ fn transDeclStmtOne( |
| 1618 | 1626 | .mut_token = mut_tok, |
| 1619 | 1627 | .semicolon_token = semicolon_token, |
| 1620 | 1628 | }, .{ |
| 1621 | | .thread_local_token = thread_local_token, |
| 1622 | 1629 | .eq_token = eq_token, |
| 1623 | 1630 | .type_node = type_node, |
| 1624 | 1631 | .init_node = init_node, |