Stop inferring bot/static when types/regions are unconstrained.

Also, some other changes that came up along the way:
- add a 'blk' region for the current block.
- detect unused type/region variables.
This commit is contained in:
Niko Matsakis
2012-04-30 10:37:58 -07:00
parent 079c3b02a8
commit 2db4259b35
30 changed files with 234 additions and 154 deletions

View File

@@ -14,7 +14,7 @@ native mod rustrt {
fn rust_task_unweaken(ch: rust_port_id);
}
type global_ptr<T: send> = *libc::uintptr_t;
type global_ptr = *libc::uintptr_t;
#[doc = "
Atomically gets a channel from a pointer to a pointer-sized memory location
@@ -22,7 +22,7 @@ or, if no channel exists creates and installs a new channel and sets up a new
task to receive from it.
"]
unsafe fn chan_from_global_ptr<T: send>(
global: global_ptr<T>,
global: global_ptr,
builder: fn() -> task::builder,
f: fn~(comm::port<T>)
) -> comm::chan<T> {

View File

@@ -1168,7 +1168,9 @@ mod unsafe {
#[inline(always)]
unsafe fn form_slice<T,U>(p: *T, len: uint, f: fn([T]/&) -> U) -> U {
let pair = (p, len * sys::size_of::<T>());
let v : *([T]/&) = ::unsafe::reinterpret_cast(ptr::addr_of(pair));
// FIXME: should use &blk not &static here, but a snapshot is req'd
let v : *([T]/&static) =
::unsafe::reinterpret_cast(ptr::addr_of(pair));
f(*v)
}
}