Commit c79b8aeaef

hryx <codroid@gmail.com>
2019-05-27 02:05:49
var decl: threadlocal
1 parent 99f0b28
Changed files (4)
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")