From 4e2be14986b022dfdf5efa73293566cc6faf570e Mon Sep 17 00:00:00 2001 From: Eduard-Mihai Burtescu Date: Sun, 13 Aug 2017 16:42:10 +0300 Subject: Make the LocalKey facade of thread_local! inlineable cross-crate. --- src/libstd/thread/local.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/libstd/thread') diff --git a/src/libstd/thread/local.rs b/src/libstd/thread/local.rs index 02347bf4906..4ee8132f55c 100644 --- a/src/libstd/thread/local.rs +++ b/src/libstd/thread/local.rs @@ -159,8 +159,9 @@ macro_rules! thread_local { #[allow_internal_unstable] #[allow_internal_unsafe] macro_rules! __thread_local_inner { - ($(#[$attr:meta])* $vis:vis $name:ident, $t:ty, $init:expr) => { - $(#[$attr])* $vis static $name: $crate::thread::LocalKey<$t> = { + (@key $(#[$attr:meta])* $vis:vis $name:ident, $t:ty, $init:expr) => { + { + #[inline] fn __init() -> $t { $init } unsafe fn __getit() -> $crate::option::Option< @@ -182,7 +183,16 @@ macro_rules! __thread_local_inner { unsafe { $crate::thread::LocalKey::new(__getit, __init) } - }; + } + }; + ($(#[$attr:meta])* $vis:vis $name:ident, $t:ty, $init:expr) => { + #[cfg(stage0)] + $(#[$attr])* $vis static $name: $crate::thread::LocalKey<$t> = + __thread_local_inner!(@key $(#[$attr])* $vis $name, $t, $init); + + #[cfg(not(stage0))] + $(#[$attr])* $vis const $name: $crate::thread::LocalKey<$t> = + __thread_local_inner!(@key $(#[$attr])* $vis $name, $t, $init); } } -- cgit 1.4.1-3-g733a5