Limit spans in bytes!() error messages to the argument in question

This constrains the span to the appropriate argument, so you know which
one caused the problem. Instead of

  foo.rs:2:4: 2:21 error: Too large integer literal in bytes!
  foo.rs:2    bytes!(1, 256, 2)
              ^~~~~~~~~~~~~~~~~

it will say

  foo.rs:2:14 2:17 error: Too large integer literal in bytes!
  foo.rs:2    bytes!(1, 256, 2)
                        ^~~
This commit is contained in:
Kevin Ballard 2013-09-16 18:02:33 -07:00
parent 0ec4d34b3f
commit b0647feab0

View File

@ -30,43 +30,43 @@ pub fn expand_syntax_ext(cx: @ExtCtxt, sp: Span, tts: &[ast::token_tree]) -> bas
// string literal, push each byte to vector expression
ast::lit_str(s) => {
for byte in s.byte_iter() {
bytes.push(cx.expr_u8(sp, byte));
bytes.push(cx.expr_u8(expr.span, byte));
}
}
// u8 literal, push to vector expression
ast::lit_uint(v, ast::ty_u8) => {
if v > 0xFF {
cx.span_err(sp, "Too large u8 literal in bytes!")
cx.span_err(expr.span, "Too large u8 literal in bytes!")
} else {
bytes.push(cx.expr_u8(sp, v as u8));
bytes.push(cx.expr_u8(expr.span, v as u8));
}
}
// integer literal, push to vector expression
ast::lit_int_unsuffixed(v) => {
if v > 0xFF {
cx.span_err(sp, "Too large integer literal in bytes!")
cx.span_err(expr.span, "Too large integer literal in bytes!")
} else if v < 0 {
cx.span_err(sp, "Negative integer literal in bytes!")
cx.span_err(expr.span, "Negative integer literal in bytes!")
} else {
bytes.push(cx.expr_u8(sp, v as u8));
bytes.push(cx.expr_u8(expr.span, v as u8));
}
}
// char literal, push to vector expression
ast::lit_char(v) => {
if char::from_u32(v).unwrap().is_ascii() {
bytes.push(cx.expr_u8(sp, v as u8));
bytes.push(cx.expr_u8(expr.span, v as u8));
} else {
cx.span_err(sp, "Non-ascii char literal in bytes!")
cx.span_err(expr.span, "Non-ascii char literal in bytes!")
}
}
_ => cx.span_err(sp, "Unsupported literal in bytes!")
_ => cx.span_err(expr.span, "Unsupported literal in bytes!")
},
_ => cx.span_err(sp, "Non-literal in bytes!")
_ => cx.span_err(expr.span, "Non-literal in bytes!")
}
}