libsyntax: Implement a macro die!
to replace the fail
expression. r=brson
This commit is contained in:
parent
61cfec3c52
commit
07f4031bb4
@ -34,9 +34,12 @@ extern mod rustrt {
|
||||
// 'rt_', otherwise the compiler won't find it. To fix this, see
|
||||
// gather_rust_rtcalls.
|
||||
#[rt(fail_)]
|
||||
pub fn rt_fail_(expr: *c_char, file: *c_char, line: size_t) {
|
||||
cleanup_stack_for_failure();
|
||||
rustrt::rust_upcall_fail(expr, file, line);
|
||||
pub fn rt_fail_(expr: *c_char, file: *c_char, line: size_t) -> ! {
|
||||
unsafe {
|
||||
cleanup_stack_for_failure();
|
||||
rustrt::rust_upcall_fail(expr, file, line);
|
||||
cast::transmute(())
|
||||
}
|
||||
}
|
||||
|
||||
#[rt(fail_bounds_check)]
|
||||
|
@ -248,6 +248,26 @@ fn core_macros() -> ~str {
|
||||
#macro[[#warn[f, ...], log(core::warn, #fmt[f, ...])]];
|
||||
#macro[[#info[f, ...], log(core::info, #fmt[f, ...])]];
|
||||
#macro[[#debug[f, ...], log(core::debug, #fmt[f, ...])]];
|
||||
|
||||
macro_rules! die(
|
||||
($msg: expr) => (
|
||||
{
|
||||
do core::str::as_buf($msg) |msg_buf, _msg_len| {
|
||||
do core::str::as_buf(file!()) |file_buf, _file_len| {
|
||||
unsafe {
|
||||
let msg_buf = core::cast::transmute(msg_buf);
|
||||
let file_buf = core::cast::transmute(file_buf);
|
||||
let line = line!() as core::libc::size_t;
|
||||
core::rt::rt_fail_(msg_buf, file_buf, line)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
() => (
|
||||
die!(\"explicit failure\")
|
||||
)
|
||||
)
|
||||
}";
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user