diff options
author | Morgan Deters <mdeters@gmail.com> | 2010-09-28 20:09:33 +0000 |
---|---|---|
committer | Morgan Deters <mdeters@gmail.com> | 2010-09-28 20:09:33 +0000 |
commit | 5e9d8abe7c70181333dd6c1572aa74662cd71018 (patch) | |
tree | cba5461b250e6733cdaf3c87ab9a95c36ce83aa3 | |
parent | 6f6d864effd21db0f4428da78d9010c164cd669f (diff) |
fix TLS support for platforms (e.g. Mac OS X) where __thread storage class doesn't exist, and clean up a few things in NodeManager
-rw-r--r-- | src/expr/node_manager.cpp | 2 | ||||
-rw-r--r-- | src/expr/node_manager.h | 5 | ||||
-rw-r--r-- | src/util/tls.h.in | 15 |
3 files changed, 18 insertions, 4 deletions
diff --git a/src/expr/node_manager.cpp b/src/expr/node_manager.cpp index 31b848885..5d99fb31e 100644 --- a/src/expr/node_manager.cpp +++ b/src/expr/node_manager.cpp @@ -39,7 +39,7 @@ using __gnu_cxx::hash_set; namespace CVC4 { -CVC4_THREADLOCAL(NodeManager*) NodeManager::s_current = 0; +CVC4_THREADLOCAL(NodeManager*) NodeManager::s_current = NULL; /** * This class sets it reference argument to true and ensures that it gets set diff --git a/src/expr/node_manager.h b/src/expr/node_manager.h index 5fb7c57ad..4f658c507 100644 --- a/src/expr/node_manager.h +++ b/src/expr/node_manager.h @@ -562,11 +562,12 @@ public: */ class NodeManagerScope { /** The old NodeManager, to be restored on destruction. */ - NodeManager *d_oldNodeManager; + NodeManager* d_oldNodeManager; public: - NodeManagerScope(NodeManager* nm) : d_oldNodeManager(NodeManager::s_current) { + NodeManagerScope(NodeManager* nm) : + d_oldNodeManager(NodeManager::s_current) { NodeManager::s_current = nm; Debug("current") << "node manager scope: " << NodeManager::s_current << "\n"; diff --git a/src/util/tls.h.in b/src/util/tls.h.in index 29a52497a..80eac93b0 100644 --- a/src/util/tls.h.in +++ b/src/util/tls.h.in @@ -24,6 +24,8 @@ #ifndef __CVC4__TLS_H #define __CVC4__TLS_H +#line 28 "@srcdir@/tls.h.in" + #if @CVC4_TLS_SUPPORTED@ # define CVC4_THREADLOCAL(__type) @CVC4_TLS@ __type # define CVC4_THREADLOCAL_PUBLIC(__type) @CVC4_TLS@ CVC4_PUBLIC __type @@ -49,7 +51,7 @@ public: pthread_key_create(&d_key, ThreadLocalImpl::cleanup); } - ThreadLocalImpl(T t) { + ThreadLocalImpl(const T& t) { pthread_key_create(&d_key, ThreadLocalImpl::cleanup); pthread_setspecific(d_key, const_cast<void*>(reinterpret_cast<const void*>(t))); } @@ -74,6 +76,10 @@ public: };/* class ThreadLocalImpl<T, true> */ template <class T> +class ThreadLocalImpl<T, false> { +};/* class ThreadLocalImpl<T, false> */ + +template <class T> class ThreadLocal : public ThreadLocalImpl<T, sizeof(T) <= sizeof(void*)> { typedef ThreadLocalImpl<T, sizeof(T) <= sizeof(void*)> super; @@ -81,6 +87,13 @@ public: ThreadLocal() : super() {} ThreadLocal(const T& t) : super(t) {} ThreadLocal(const ThreadLocal<T>& tl) : super(tl) {} + + ThreadLocal<T>& operator=(const T& t) { + return static_cast< ThreadLocal<T>& >(super::operator=(t)); + } + ThreadLocal<T>& operator=(const ThreadLocal<T>& tl) { + return static_cast< ThreadLocal<T>& >(super::operator=(tl)); + } };/* class ThreadLocal<T> */ }/* CVC4 namespace */ |