Skip to content

Commit f9bf69d

Browse files
committed
Remove all external requirements of @ from TLS
Closes #6004
1 parent 11c63ea commit f9bf69d

File tree

12 files changed

+23
-23
lines changed

12 files changed

+23
-23
lines changed

src/libextra/rl.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ pub unsafe fn complete(cb: CompletionCb) {
7676

7777
extern fn callback(line: *c_char, completions: *()) {
7878
unsafe {
79-
let cb = *local_data::get(complete_key)
79+
let cb = *local_data::get(complete_key, |k| k.map(|&k| *k))
8080
.get();
8181

8282
do cb(str::raw::from_c_str(line)) |suggestion| {

src/libextra/sort.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1204,7 +1204,7 @@ mod big_tests {
12041204
#[unsafe_destructor]
12051205
impl<'self> Drop for LVal<'self> {
12061206
fn drop(&self) {
1207-
let x = unsafe { local_data::get(self.key) };
1207+
let x = unsafe { local_data::get(self.key, |k| k.map(|&k| *k)) };
12081208
match x {
12091209
Some(@y) => {
12101210
unsafe {

src/librustc/middle/trans/base.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ fn task_local_insn_key(_v: @~[&'static str]) {}
9292

9393
pub fn with_insn_ctxt(blk: &fn(&[&'static str])) {
9494
unsafe {
95-
let opt = local_data::get(task_local_insn_key);
95+
let opt = local_data::get(task_local_insn_key, |k| k.map(|&k| *k));
9696
if opt.is_some() {
9797
blk(*opt.unwrap());
9898
}

src/librustc/middle/trans/context.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ impl Drop for CrateContext {
241241

242242
fn task_local_llcx_key(_v: @ContextRef) {}
243243
pub fn task_llcx() -> ContextRef {
244-
let opt = unsafe { local_data::get(task_local_llcx_key) };
244+
let opt = unsafe { local_data::get(task_local_llcx_key, |k| k.map(|&k| *k)) };
245245
*opt.expect("task-local LLVMContextRef wasn't ever set!")
246246
}
247247

src/librusti/program.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ impl Program {
144144
let key = ::std::sys::Closure{ code: %? as *(),
145145
env: ::std::ptr::null() };
146146
let key = ::std::cast::transmute(key);
147-
*::std::local_data::get(key).unwrap()
147+
*::std::local_data::get(key, |k| k.map(|&x| *x)).unwrap()
148148
};\n", key.code as uint));
149149

150150
// Using this __tls_map handle, deserialize each variable binding that

src/libstd/condition.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ impl<'self, T, U> Condition<'self, T, U> {
3232
pub fn trap(&'self self, h: &'self fn(T) -> U) -> Trap<'self, T, U> {
3333
unsafe {
3434
let p : *RustClosure = ::cast::transmute(&h);
35-
let prev = local_data::get(self.key);
35+
let prev = local_data::get(self.key, |k| k.map(|&x| *x));
3636
let h = @Handler { handle: *p, prev: prev };
3737
Trap { cond: self, handler: h }
3838
}

src/libstd/local_data.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -83,16 +83,16 @@ pub unsafe fn pop<T: 'static>(key: Key<T>) -> Option<T> {
8383
* table until explicitly removed.
8484
*/
8585
#[cfg(stage0)]
86-
pub unsafe fn get<T: 'static>(key: Key<@T>) -> Option<@T> {
87-
local_get(Handle::new(), key, |loc| loc.map(|&x| *x))
86+
pub unsafe fn get<T: 'static, U>(key: Key<@T>, f: &fn(Option<&@T>) -> U) -> U {
87+
local_get(Handle::new(), key, f)
8888
}
8989
/**
9090
* Retrieve a task-local data value. It will also be kept alive in the
9191
* table until explicitly removed.
9292
*/
9393
#[cfg(not(stage0))]
94-
pub unsafe fn get<T: 'static>(key: Key<@T>) -> Option<@T> {
95-
local_get(Handle::new(), key, |loc| loc.map(|&x| *x))
94+
pub unsafe fn get<T: 'static, U>(key: Key<T>, f: &fn(Option<&T>) -> U) -> U {
95+
local_get(Handle::new(), key, f)
9696
}
9797
/**
9898
* Store a value in task-local data. If this key already has a value,
@@ -142,16 +142,16 @@ fn test_tls_multitask() {
142142
set(my_key, @~"parent data");
143143
do task::spawn {
144144
// TLS shouldn't carry over.
145-
assert!(get(my_key).is_none());
145+
assert!(get(my_key, |k| k.map(|&k| *k)).is_none());
146146
set(my_key, @~"child data");
147-
assert!(*(get(my_key).get()) ==
147+
assert!(*(get(my_key, |k| k.map(|&k| *k)).get()) ==
148148
~"child data");
149149
// should be cleaned up for us
150150
}
151151
// Must work multiple times
152-
assert!(*(get(my_key).get()) == ~"parent data");
153-
assert!(*(get(my_key).get()) == ~"parent data");
154-
assert!(*(get(my_key).get()) == ~"parent data");
152+
assert!(*(get(my_key, |k| k.map(|&k| *k)).get()) == ~"parent data");
153+
assert!(*(get(my_key, |k| k.map(|&k| *k)).get()) == ~"parent data");
154+
assert!(*(get(my_key, |k| k.map(|&k| *k)).get()) == ~"parent data");
155155
}
156156
}
157157
@@ -161,7 +161,7 @@ fn test_tls_overwrite() {
161161
fn my_key(_x: @~str) { }
162162
set(my_key, @~"first data");
163163
set(my_key, @~"next data"); // Shouldn't leak.
164-
assert!(*(get(my_key).get()) == ~"next data");
164+
assert!(*(get(my_key, |k| k.map(|&k| *k)).get()) == ~"next data");
165165
}
166166
}
167167
@@ -170,7 +170,7 @@ fn test_tls_pop() {
170170
unsafe {
171171
fn my_key(_x: @~str) { }
172172
set(my_key, @~"weasel");
173-
assert!(*(pop(my_key).get()) == ~"weasel");
173+
assert!(*(pop(my_key, |k| k.map(|&k| *k)).get()) == ~"weasel");
174174
// Pop must remove the data from the map.
175175
assert!(pop(my_key).is_none());
176176
}

src/libstd/os.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1230,7 +1230,7 @@ fn overridden_arg_key(_v: @OverriddenArgs) {}
12301230
/// `os::set_args` function.
12311231
pub fn args() -> ~[~str] {
12321232
unsafe {
1233-
match local_data::get(overridden_arg_key) {
1233+
match local_data::get(overridden_arg_key, |k| k.map(|&k| *k)) {
12341234
None => real_args(),
12351235
Some(args) => copy args.val
12361236
}

src/libstd/rand.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,7 @@ fn tls_rng_state(_v: @@mut IsaacRng) {}
850850
pub fn task_rng() -> @mut IsaacRng {
851851
let r : Option<@@mut IsaacRng>;
852852
unsafe {
853-
r = local_data::get(tls_rng_state);
853+
r = local_data::get(tls_rng_state, |k| k.map(|&k| *k));
854854
}
855855
match r {
856856
None => {

src/libstd/rt/task.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -172,10 +172,10 @@ mod test {
172172
unsafe {
173173
fn key(_x: @~str) { }
174174
local_data::set(key, @~"data");
175-
assert!(*local_data::get(key).get() == ~"data");
175+
assert!(*local_data::get(key, |k| k.map(|&k| *k)).get() == ~"data");
176176
fn key2(_x: @~str) { }
177177
local_data::set(key2, @~"data");
178-
assert!(*local_data::get(key2).get() == ~"data");
178+
assert!(*local_data::get(key2, |k| k.map(|&k| *k)).get() == ~"data");
179179
}
180180
}
181181
}

src/libsyntax/ast_util.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,7 @@ pub fn get_sctable() -> @mut SCTable {
698698
let sctable_key = (cast::transmute::<(uint, uint),
699699
&fn:Copy(v: @@mut SCTable)>(
700700
(-4 as uint, 0u)));
701-
match local_data::get(sctable_key) {
701+
match local_data::get(sctable_key, |k| k.map(|&k| *k)) {
702702
None => {
703703
let new_table = @@mut new_sctable_internal();
704704
local_data::set(sctable_key,new_table);

src/libsyntax/parse/token.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ pub fn get_ident_interner() -> @ident_interner {
490490
(cast::transmute::<(uint, uint),
491491
&fn:Copy(v: @@::parse::token::ident_interner)>(
492492
(-3 as uint, 0u)));
493-
match local_data::get(key) {
493+
match local_data::get(key, |k| k.map(|&k| *k)) {
494494
Some(interner) => *interner,
495495
None => {
496496
let interner = mk_fresh_ident_interner();

0 commit comments

Comments
 (0)