Commit c79b8aeaef
Changed files (4)
src-self-hosted
src/zig_clang.cpp
@@ -1459,6 +1459,11 @@ const char *ZigClangDecl_getDeclKindName(const struct ZigClangDecl *self) {
return casted->getDeclKindName();
}
+enum ZigClangVarDecl_TLSKind ZigClangVarDecl_getTLSKind(const ZigClangVarDecl *self) {
+ auto casted = reinterpret_cast<const clang::VarDecl *>(self);
+ return (ZigClangVarDecl_TLSKind)casted->getTLSKind();
+}
+
ZigClangSourceLocation ZigClangRecordDecl_getLocation(const ZigClangRecordDecl *zig_record_decl) {
const clang::RecordDecl *record_decl = reinterpret_cast<const clang::RecordDecl *>(zig_record_decl);
return bitcast(record_decl->getLocation());
src/zig_clang.h
@@ -733,6 +733,12 @@ enum ZigClangStringLiteral_StringKind {
ZigClangStringLiteral_StringKind_UTF32,
};
+enum ZigClangVarDecl_TLSKind {
+ ZigClangVarDecl_TLSKind_None,
+ ZigClangVarDecl_TLSKind_Static,
+ ZigClangVarDecl_TLSKind_Dynamic,
+};
+
ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangSourceManager_getSpellingLoc(const struct ZigClangSourceManager *,
struct ZigClangSourceLocation Loc);
ZIG_EXTERN_C const char *ZigClangSourceManager_getFilename(const struct ZigClangSourceManager *,
@@ -792,6 +798,8 @@ ZIG_EXTERN_C const char *ZigClangDecl_getName_bytes_begin(const struct ZigClangD
ZIG_EXTERN_C enum ZigClangDeclKind ZigClangDecl_getKind(const struct ZigClangDecl *decl);
ZIG_EXTERN_C const char *ZigClangDecl_getDeclKindName(const struct ZigClangDecl *decl);
+ZIG_EXTERN_C enum ZigClangVarDecl_TLSKind ZigClangVarDecl_getTLSKind(const struct ZigClangVarDecl *var_decl);
+
ZIG_EXTERN_C bool ZigClangSourceLocation_eq(struct ZigClangSourceLocation a, struct ZigClangSourceLocation b);
ZIG_EXTERN_C const struct ZigClangTypedefNameDecl *ZigClangTypedefType_getDecl(const struct ZigClangTypedefType *);
src-self-hosted/clang.zig
@@ -870,3 +870,10 @@ pub const ZigClangDeclStmt_const_decl_iterator = [*c]const *struct_ZigClangDecl;
pub extern fn ZigClangDeclStmt_decl_begin(self: *const ZigClangDeclStmt) ZigClangDeclStmt_const_decl_iterator;
pub extern fn ZigClangDeclStmt_decl_end(self: *const ZigClangDeclStmt) ZigClangDeclStmt_const_decl_iterator;
+
+pub extern fn ZigClangVarDecl_getTLSKind(self: ?*const struct_ZigClangVarDecl) ZigClangVarDecl_TLSKind;
+pub const ZigClangVarDecl_TLSKind = extern enum {
+ None,
+ Static,
+ Dynamic,
+};
src-self-hosted/translate_c.zig
@@ -381,12 +381,10 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe
.Var => {
const var_decl = @ptrCast(*const ZigClangVarDecl, it.*);
- // TODO:
- // const thread_local_token = if (ZigClangVarDecl_getTLSKind() == .None)
- // null
- // else
- // try appendToken(c, .Keyword_threadlocal, "threadlocal");
- const thread_local_token: ?ast.TokenIndex = null;
+ const thread_local_token = if (ZigClangVarDecl_getTLSKind(var_decl) == .None)
+ null
+ else
+ try appendToken(c, .Keyword_threadlocal, "threadlocal");
const qual_type = ZigClangVarDecl_getType(var_decl);
const mut_token = if (ZigClangQualType_isConstQualified(qual_type))
try appendToken(c, .Keyword_const, "const")