libsyntax: Implement assert as a macro (called fail_unless! on a transitionary basis to avoid conflicting with the keyword right now). r=brson

This commit is contained in:
Patrick Walton 2013-01-22 16:00:07 -08:00
parent 54b2cad8b3
commit 154488df19
3 changed files with 31 additions and 12 deletions

View File

@ -300,6 +300,14 @@ fn core_macros() -> ~str {
)
)
macro_rules! fail_unless(
($cond:expr) => {
if !$cond {
die!(~\"assertion failed: \" + stringify!($cond))
}
}
)
macro_rules! condition (
{ $c:ident: $in:ty -> $out:ty; } => {

View File

@ -200,19 +200,24 @@ fn to_str(in: @ident_interner, t: Token) -> ~str {
DOC_COMMENT(s) => *in.get(s),
EOF => ~"<eof>",
INTERPOLATED(ref nt) => {
~"an interpolated " +
match (*nt) {
nt_item(*) => ~"item",
nt_block(*) => ~"block",
nt_stmt(*) => ~"statement",
nt_pat(*) => ~"pattern",
nt_expr(*) => ~"expression",
nt_ty(*) => ~"type",
nt_ident(*) => ~"identifier",
nt_path(*) => ~"path",
nt_tt(*) => ~"tt",
nt_matchers(*) => ~"matcher sequence"
match nt {
&nt_expr(e) => ::print::pprust::expr_to_str(e, in),
_ => {
~"an interpolated " +
match (*nt) {
nt_item(*) => ~"item",
nt_block(*) => ~"block",
nt_stmt(*) => ~"statement",
nt_pat(*) => ~"pattern",
nt_expr(*) => fail ~"should have been handled above",
nt_ty(*) => ~"type",
nt_ident(*) => ~"identifier",
nt_path(*) => ~"path",
nt_tt(*) => ~"tt",
nt_matchers(*) => ~"matcher sequence"
}
}
}
}
}
}

View File

@ -0,0 +1,6 @@
// error-pattern:assertion failed: 1 == 2
fn main() {
fail_unless!(1 == 2);
}