e4271cae54
This adds an small of failure to libcore, hamstrung by the fact that std::fmt hasn't been migrated yet. A few asserts were re-worked to not use std::fmt features, but these asserts can go back to their original form once std::fmt has migrated. The current failure implementation is to just have some symbols exposed by std::rt::unwind that are linked against by libcore. This is an explicit circular dependency, unfortunately. This will be officially supported in the future through compiler support with much nicer failure messages. Additionally, there are two depended-upon symbols today, but in the future there will only be one (once std::fmt has migrated).
39 lines
1.1 KiB
Rust
39 lines
1.1 KiB
Rust
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
|
// file at the top-level directory of this distribution and at
|
|
// http://rust-lang.org/COPYRIGHT.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
|
|
#![macro_escape]
|
|
|
|
/// Entry point of failure, for details, see std::macros
|
|
#[macro_export]
|
|
macro_rules! fail(
|
|
() => (
|
|
fail!("explicit failure")
|
|
);
|
|
($msg:expr) => (
|
|
::failure::begin_unwind($msg, file!(), line!())
|
|
);
|
|
)
|
|
|
|
/// Runtime assertion, for details see std::macros
|
|
#[macro_export]
|
|
macro_rules! assert(
|
|
($cond:expr) => (
|
|
if !$cond {
|
|
fail!(concat!("assertion failed: ", stringify!($cond)))
|
|
}
|
|
);
|
|
)
|
|
|
|
/// Runtime assertion, disableable at compile time
|
|
#[macro_export]
|
|
macro_rules! debug_assert(
|
|
($($arg:tt)*) => (if cfg!(not(ndebug)) { assert!($($arg)*); })
|
|
)
|