auto merge of #8820 : alexcrichton/rust/no-io-writer, r=brson
At the same time, this updates the TyVisitor to use a mutable self because it's probably going to be mutating state as it goes along anyway.
This commit is contained in:
commit
f94844c558
11 changed files with 1715 additions and 501 deletions
|
|
@ -73,7 +73,7 @@ pub struct TyDesc {
|
|||
pub enum Opaque { }
|
||||
|
||||
#[lang="ty_visitor"]
|
||||
#[cfg(not(test))]
|
||||
#[cfg(not(test), stage0)]
|
||||
pub trait TyVisitor {
|
||||
fn visit_bot(&self) -> bool;
|
||||
fn visit_nil(&self) -> bool;
|
||||
|
|
@ -168,6 +168,102 @@ pub trait TyVisitor {
|
|||
fn visit_closure_ptr(&self, ck: uint) -> bool;
|
||||
}
|
||||
|
||||
#[lang="ty_visitor"]
|
||||
#[cfg(not(test), not(stage0))]
|
||||
pub trait TyVisitor {
|
||||
fn visit_bot(&mut self) -> bool;
|
||||
fn visit_nil(&mut self) -> bool;
|
||||
fn visit_bool(&mut self) -> bool;
|
||||
|
||||
fn visit_int(&mut self) -> bool;
|
||||
fn visit_i8(&mut self) -> bool;
|
||||
fn visit_i16(&mut self) -> bool;
|
||||
fn visit_i32(&mut self) -> bool;
|
||||
fn visit_i64(&mut self) -> bool;
|
||||
|
||||
fn visit_uint(&mut self) -> bool;
|
||||
fn visit_u8(&mut self) -> bool;
|
||||
fn visit_u16(&mut self) -> bool;
|
||||
fn visit_u32(&mut self) -> bool;
|
||||
fn visit_u64(&mut self) -> bool;
|
||||
|
||||
fn visit_float(&mut self) -> bool;
|
||||
fn visit_f32(&mut self) -> bool;
|
||||
fn visit_f64(&mut self) -> bool;
|
||||
|
||||
fn visit_char(&mut self) -> bool;
|
||||
|
||||
fn visit_estr_box(&mut self) -> bool;
|
||||
fn visit_estr_uniq(&mut self) -> bool;
|
||||
fn visit_estr_slice(&mut self) -> bool;
|
||||
fn visit_estr_fixed(&mut self, n: uint, sz: uint, align: uint) -> bool;
|
||||
|
||||
fn visit_box(&mut self, mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_uniq(&mut self, mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_uniq_managed(&mut self, mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_ptr(&mut self, mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_rptr(&mut self, mtbl: uint, inner: *TyDesc) -> bool;
|
||||
|
||||
fn visit_vec(&mut self, mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_unboxed_vec(&mut self, mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_evec_box(&mut self, mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_evec_uniq(&mut self, mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_evec_uniq_managed(&mut self, mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_evec_slice(&mut self, mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_evec_fixed(&mut self, n: uint, sz: uint, align: uint,
|
||||
mtbl: uint, inner: *TyDesc) -> bool;
|
||||
|
||||
fn visit_enter_rec(&mut self, n_fields: uint,
|
||||
sz: uint, align: uint) -> bool;
|
||||
fn visit_rec_field(&mut self, i: uint, name: &str,
|
||||
mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_leave_rec(&mut self, n_fields: uint,
|
||||
sz: uint, align: uint) -> bool;
|
||||
|
||||
fn visit_enter_class(&mut self, n_fields: uint,
|
||||
sz: uint, align: uint) -> bool;
|
||||
fn visit_class_field(&mut self, i: uint, name: &str,
|
||||
mtbl: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_leave_class(&mut self, n_fields: uint,
|
||||
sz: uint, align: uint) -> bool;
|
||||
|
||||
fn visit_enter_tup(&mut self, n_fields: uint,
|
||||
sz: uint, align: uint) -> bool;
|
||||
fn visit_tup_field(&mut self, i: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_leave_tup(&mut self, n_fields: uint,
|
||||
sz: uint, align: uint) -> bool;
|
||||
|
||||
fn visit_enter_enum(&mut self, n_variants: uint,
|
||||
get_disr: extern unsafe fn(ptr: *Opaque) -> int,
|
||||
sz: uint, align: uint) -> bool;
|
||||
fn visit_enter_enum_variant(&mut self, variant: uint,
|
||||
disr_val: int,
|
||||
n_fields: uint,
|
||||
name: &str) -> bool;
|
||||
fn visit_enum_variant_field(&mut self, i: uint, offset: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_leave_enum_variant(&mut self, variant: uint,
|
||||
disr_val: int,
|
||||
n_fields: uint,
|
||||
name: &str) -> bool;
|
||||
fn visit_leave_enum(&mut self, n_variants: uint,
|
||||
get_disr: extern unsafe fn(ptr: *Opaque) -> int,
|
||||
sz: uint, align: uint) -> bool;
|
||||
|
||||
fn visit_enter_fn(&mut self, purity: uint, proto: uint,
|
||||
n_inputs: uint, retstyle: uint) -> bool;
|
||||
fn visit_fn_input(&mut self, i: uint, mode: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_fn_output(&mut self, retstyle: uint, inner: *TyDesc) -> bool;
|
||||
fn visit_leave_fn(&mut self, purity: uint, proto: uint,
|
||||
n_inputs: uint, retstyle: uint) -> bool;
|
||||
|
||||
fn visit_trait(&mut self) -> bool;
|
||||
fn visit_param(&mut self, i: uint) -> bool;
|
||||
fn visit_self(&mut self) -> bool;
|
||||
fn visit_type(&mut self) -> bool;
|
||||
fn visit_opaque_box(&mut self) -> bool;
|
||||
fn visit_closure_ptr(&mut self, ck: uint) -> bool;
|
||||
}
|
||||
|
||||
#[abi = "rust-intrinsic"]
|
||||
extern "rust-intrinsic" {
|
||||
|
||||
|
|
@ -325,7 +421,10 @@ extern "rust-intrinsic" {
|
|||
/// Returns `true` if a type is managed (will be allocated on the local heap)
|
||||
pub fn contains_managed<T>() -> bool;
|
||||
|
||||
#[cfg(stage0)]
|
||||
pub fn visit_tydesc(td: *TyDesc, tv: &TyVisitor);
|
||||
#[cfg(not(stage0))]
|
||||
pub fn visit_tydesc(td: *TyDesc, tv: &mut TyVisitor);
|
||||
|
||||
pub fn frame_address(f: &once fn(*u8));
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue