From c79b8aeaef860528da645b956f21c8d95d05880d Mon Sep 17 00:00:00 2001 From: hryx Date: Sun, 26 May 2019 17:05:49 -0700 Subject: [PATCH] var decl: threadlocal --- src-self-hosted/clang.zig | 7 +++++++ src-self-hosted/translate_c.zig | 10 ++++------ src/zig_clang.cpp | 5 +++++ src/zig_clang.h | 8 ++++++++ 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src-self-hosted/clang.zig b/src-self-hosted/clang.zig index c44f047f40f8b4072dbd282f94e21531ee57e050..fd5c09dd1c961dd52111917bde3910680ace682e 100644 --- a/src-self-hosted/clang.zig +++ b/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, +}; diff --git a/src-self-hosted/translate_c.zig b/src-self-hosted/translate_c.zig index a3552cd188a8d024e21c00f0ba29c1ad15d0d194..77a0589fee60c41338753bd5e23bf6982ee9deb6 100644 --- a/src-self-hosted/translate_c.zig +++ b/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") diff --git a/src/zig_clang.cpp b/src/zig_clang.cpp index 1933725b1601969ac34441132508fe2466803bce..e86dbed2722dbd900897257a4169c8bc0c8f0c5e 100644 --- a/src/zig_clang.cpp +++ b/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(self); + return (ZigClangVarDecl_TLSKind)casted->getTLSKind(); +} + ZigClangSourceLocation ZigClangRecordDecl_getLocation(const ZigClangRecordDecl *zig_record_decl) { const clang::RecordDecl *record_decl = reinterpret_cast(zig_record_decl); return bitcast(record_decl->getLocation()); diff --git a/src/zig_clang.h b/src/zig_clang.h index 2312c975d76a0e77059589b7a165bfea78fb0b05..fd3a732cb79e72dba59a18480355624c7588a22e 100644 --- a/src/zig_clang.h +++ b/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 *); -- 2.54.0