]> git.lizzy.rs Git - rust.git/commit
auto merge of #7677 : alexcrichton/rust/tls-gc, r=pcwalton
authorbors <bors@rust-lang.org>
Fri, 12 Jul 2013 02:52:37 +0000 (19:52 -0700)
committerbors <bors@rust-lang.org>
Fri, 12 Jul 2013 02:52:37 +0000 (19:52 -0700)
commit07183ea6e719e18f5d6b09afbe519c9f940c4705
treee7d78b7be38a4f9e3763c08cfdd9569a45be6d6f
parent9a9c84fb8362c26f24b1ea8443a509047f27b38f
parenta15c1b4464099fa65ec5da389381db83c22801ec
auto merge of #7677 : alexcrichton/rust/tls-gc, r=pcwalton

cc #6004 and #3273

This is a rewrite of TLS to get towards not requiring `@` when using task local storage. Most of the rewrite is straightforward, although there are two caveats:

1. Changing `local_set` to not require `@` is blocked on #7673
2. The code in `local_pop` is some of the most unsafe code I've written. A second set of eyes should definitely scrutinize it...

The public-facing interface currently hasn't changed, although it will have to change because `local_data::get` cannot return `Option<T>`, nor can it return `Option<&T>` (the lifetime isn't known). This will have to be changed to be given a closure which yield `&T` (or as an Option). I didn't do this part of the api rewrite in this pull request as I figured that it could wait until when `@` is fully removed.

This also doesn't deal with the issue of using something other than functions as keys, but I'm looking into using static slices (as mentioned in the issues).
src/librustc/middle/trans/base.rs
src/librustc/middle/trans/context.rs
src/libstd/os.rs
src/libstd/rand.rs
src/libstd/rt/task.rs
src/libstd/task/mod.rs
src/libstd/task/spawn.rs
src/rt/rust_builtin.cpp
src/rt/rustrt.def.in