diff options
| author | bors <bors@rust-lang.org> | 2013-11-04 21:02:07 -0800 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-11-04 21:02:07 -0800 |
| commit | 1c56652640c6f376cf454c63c7dd80eabe28ed5e (patch) | |
| tree | 57acecc305e4962b080ab2c070b71f96f0e77a2a /src/libstd | |
| parent | 4b04395c11eeb9fa6517a73717184881a977cee4 (diff) | |
| parent | 77e0235983ba3ad16f99123604dbbd1401ba8d6c (diff) | |
| download | rust-1c56652640c6f376cf454c63c7dd80eabe28ed5e.tar.gz rust-1c56652640c6f376cf454c63c7dd80eabe28ed5e.zip | |
auto merge of #10064 : luqmana/rust/vvv, r=nikomatsakis
Fixes #2057.
Example:
```Rust
#[no_std];
type c_char = u8;
type c_int = i32;
type size_t = uint;
extern {
fn printf(format: *c_char, ...) -> c_int;
}
#[lang="fail_bounds_check"]
fn fail_bounds_check(_: *c_char, _: size_t, _: size_t, _: size_t) {}
#[start]
#[fixed_stack_segment]
fn main(_: int, _: **u8) -> int {
unsafe {
let msg = bytes!("Hello World!
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/reflect.rs | 7 | ||||
| -rw-r--r-- | src/libstd/repr.rs | 15 | ||||
| -rw-r--r-- | src/libstd/unstable/intrinsics.rs | 3 |
3 files changed, 25 insertions, 0 deletions
diff --git a/src/libstd/reflect.rs b/src/libstd/reflect.rs index 19fa9abc0da..c841750d7ce 100644 --- a/src/libstd/reflect.rs +++ b/src/libstd/reflect.rs @@ -382,11 +382,18 @@ impl<V:TyVisitor + MovePtr> TyVisitor for MovePtrAdaptor<V> { true } + #[cfg(stage0)] fn visit_fn_output(&mut self, retstyle: uint, inner: *TyDesc) -> bool { if ! self.inner.visit_fn_output(retstyle, inner) { return false; } true } + #[cfg(not(stage0))] + fn visit_fn_output(&mut self, retstyle: uint, variadic: bool, inner: *TyDesc) -> bool { + if ! self.inner.visit_fn_output(retstyle, variadic, inner) { return false; } + true + } + fn visit_leave_fn(&mut self, purity: uint, proto: uint, n_inputs: uint, retstyle: uint) -> bool { if ! self.inner.visit_leave_fn(purity, proto, n_inputs, retstyle) { diff --git a/src/libstd/repr.rs b/src/libstd/repr.rs index dd68c57e37e..97b42a1ebc1 100644 --- a/src/libstd/repr.rs +++ b/src/libstd/repr.rs @@ -572,6 +572,7 @@ impl<'self> TyVisitor for ReprVisitor<'self> { true } + #[cfg(stage0)] fn visit_fn_output(&mut self, _retstyle: uint, inner: *TyDesc) -> bool { self.writer.write(")".as_bytes()); let name = unsafe { (*inner).name }; @@ -582,6 +583,20 @@ impl<'self> TyVisitor for ReprVisitor<'self> { true } + #[cfg(not(stage0))] + fn visit_fn_output(&mut self, _retstyle: uint, variadic: bool, inner: *TyDesc) -> bool { + if variadic { + self.writer.write(", ...".as_bytes()); + } + self.writer.write(")".as_bytes()); + let name = unsafe { (*inner).name }; + if name != "()" { + self.writer.write(" -> ".as_bytes()); + self.writer.write(name.as_bytes()); + } + true + } + fn visit_leave_fn(&mut self, _purity: uint, _proto: uint, _n_inputs: uint, _retstyle: uint) -> bool { true } diff --git a/src/libstd/unstable/intrinsics.rs b/src/libstd/unstable/intrinsics.rs index d042440b4f3..404ed85985c 100644 --- a/src/libstd/unstable/intrinsics.rs +++ b/src/libstd/unstable/intrinsics.rs @@ -160,7 +160,10 @@ pub trait TyVisitor { 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; + #[cfg(stage0)] fn visit_fn_output(&mut self, retstyle: uint, inner: *TyDesc) -> bool; + #[cfg(not(stage0))] + fn visit_fn_output(&mut self, retstyle: uint, variadic: bool, inner: *TyDesc) -> bool; fn visit_leave_fn(&mut self, purity: uint, proto: uint, n_inputs: uint, retstyle: uint) -> bool; |
