Skip to content

Commit

Permalink
Auto merge of #21769 - brooksbp:column-line-macro, r=nick29581
Browse files Browse the repository at this point in the history
Please see discussion in #19284 .
  • Loading branch information
bors committed Feb 23, 2015
2 parents 67eb38e + fc9fa1a commit f0f7ca2
Show file tree
Hide file tree
Showing 11 changed files with 66 additions and 15 deletions.
6 changes: 6 additions & 0 deletions src/libcore/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,21 @@ macro_rules! panic {
panic!("explicit panic")
);
($msg:expr) => ({
#[cfg(stage0)]
static _MSG_FILE_LINE: (&'static str, &'static str, usize) = ($msg, file!(), line!());
#[cfg(not(stage0))]
static _MSG_FILE_LINE: (&'static str, &'static str, u32) = ($msg, file!(), line!());
::core::panicking::panic(&_MSG_FILE_LINE)
});
($fmt:expr, $($arg:tt)*) => ({
// The leading _'s are to avoid dead code warnings if this is
// used inside a dead function. Just `#[allow(dead_code)]` is
// insufficient, since the user may have
// `#[forbid(dead_code)]` and which cannot be overridden.
#[cfg(stage0)]
static _FILE_LINE: (&'static str, usize) = (file!(), line!());
#[cfg(not(stage0))]
static _FILE_LINE: (&'static str, u32) = (file!(), line!());
::core::panicking::panic_fmt(format_args!($fmt, $($arg)*), &_FILE_LINE)
});
}
Expand Down
39 changes: 34 additions & 5 deletions src/libcore/panicking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,26 +34,55 @@ use fmt;

#[cold] #[inline(never)] // this is the slow path, always
#[lang="panic"]
pub fn panic(expr_file_line: &(&'static str, &'static str, uint)) -> ! {
#[cfg(stage0)]
pub fn panic(expr_file_line: &(&'static str, &'static str, usize)) -> ! {
let (expr, file, line) = *expr_file_line;
panic_fmt(format_args!("{}", expr), &(file, line))
}
#[cold] #[inline(never)] // this is the slow path, always
#[lang="panic"]
#[cfg(not(stage0))]
pub fn panic(expr_file_line: &(&'static str, &'static str, u32)) -> ! {
let (expr, file, line) = *expr_file_line;
panic_fmt(format_args!("{}", expr), &(file, line))
}

#[cold] #[inline(never)]
#[lang="panic_bounds_check"]
fn panic_bounds_check(file_line: &(&'static str, uint),
index: uint, len: uint) -> ! {
#[cfg(stage0)]
fn panic_bounds_check(file_line: &(&'static str, usize),
index: usize, len: usize) -> ! {
panic_fmt(format_args!("index out of bounds: the len is {} but the index is {}",
len, index), file_line)
}
#[cold] #[inline(never)]
#[lang="panic_bounds_check"]
#[cfg(not(stage0))]
fn panic_bounds_check(file_line: &(&'static str, u32),
index: usize, len: usize) -> ! {
panic_fmt(format_args!("index out of bounds: the len is {} but the index is {}",
len, index), file_line)
}

#[cold] #[inline(never)]
pub fn panic_fmt(fmt: fmt::Arguments, file_line: &(&'static str, uint)) -> ! {
#[cfg(stage0)]
pub fn panic_fmt(fmt: fmt::Arguments, file_line: &(&'static str, usize)) -> ! {
#[allow(improper_ctypes)]
extern {
#[lang = "panic_fmt"]
fn panic_impl(fmt: fmt::Arguments, file: &'static str, line: uint) -> !;
}
let (file, line) = *file_line;
unsafe { panic_impl(fmt, file, line as uint) }
}
#[cold] #[inline(never)]
#[cfg(not(stage0))]
pub fn panic_fmt(fmt: fmt::Arguments, file_line: &(&'static str, u32)) -> ! {
#[allow(improper_ctypes)]
extern {
#[lang = "panic_fmt"]
fn panic_impl(fmt: fmt::Arguments, file: &'static str, line: uint) -> !;
}
let (file, line) = *file_line;
unsafe { panic_impl(fmt, file, line) }
unsafe { panic_impl(fmt, file, line as uint) }
}
4 changes: 2 additions & 2 deletions src/liblog/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -342,15 +342,15 @@ pub struct LogRecord<'a> {
pub file: &'a str,

/// The line number of where the LogRecord originated.
pub line: uint,
pub line: u32,
}

#[doc(hidden)]
#[derive(Copy)]
pub struct LogLocation {
pub module_path: &'static str,
pub file: &'static str,
pub line: uint,
pub line: u32,
}

/// Tests whether a given module's name is enabled for a particular level of
Expand Down
7 changes: 7 additions & 0 deletions src/liblog/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@
#[macro_export]
macro_rules! log {
($lvl:expr, $($arg:tt)+) => ({
#[cfg(stage0)]
static LOC: ::log::LogLocation = ::log::LogLocation {
line: line!() as u32,
file: file!(),
module_path: module_path!(),
};
#[cfg(not(stage0))]
static LOC: ::log::LogLocation = ::log::LogLocation {
line: line!(),
file: file!(),
Expand Down
4 changes: 4 additions & 0 deletions src/librustc_trans/trans/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -774,6 +774,10 @@ pub fn C_i32(ccx: &CrateContext, i: i32) -> ValueRef {
C_integral(Type::i32(ccx), i as u64, true)
}

pub fn C_u32(ccx: &CrateContext, i: u32) -> ValueRef {
C_integral(Type::i32(ccx), i as u64, false)
}

pub fn C_u64(ccx: &CrateContext, i: u64) -> ValueRef {
C_integral(Type::i64(ccx), i, false)
}
Expand Down
4 changes: 2 additions & 2 deletions src/librustc_trans/trans/controlflow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ pub fn trans_fail<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
let loc = bcx.sess().codemap().lookup_char_pos(call_info.span.lo);
let filename = token::intern_and_get_ident(&loc.file.name);
let filename = C_str_slice(ccx, filename);
let line = C_uint(ccx, loc.line);
let line = C_u32(ccx, loc.line as u32);
let expr_file_line_const = C_struct(ccx, &[v_str, filename, line], false);
let expr_file_line = consts::addr_of(ccx, expr_file_line_const,
"panic_loc", call_info.id);
Expand Down Expand Up @@ -406,7 +406,7 @@ pub fn trans_fail_bounds_check<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,

// Invoke the lang item
let filename = C_str_slice(ccx, filename);
let line = C_uint(ccx, loc.line);
let line = C_u32(ccx, loc.line as u32);
let file_line_const = C_struct(ccx, &[filename, line], false);
let file_line = consts::addr_of(ccx, file_line_const,
"panic_bounds_check_loc", call_info.id);
Expand Down
4 changes: 2 additions & 2 deletions src/libstd/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ macro_rules! panic {
($msg:expr) => ({
$crate::rt::begin_unwind($msg, {
// static requires less code at runtime, more constant data
static _FILE_LINE: (&'static str, usize) = (file!(), line!());
static _FILE_LINE: (&'static str, usize) = (file!(), line!() as usize);
&_FILE_LINE
})
});
Expand All @@ -54,7 +54,7 @@ macro_rules! panic {
// used inside a dead function. Just `#[allow(dead_code)]` is
// insufficient, since the user may have
// `#[forbid(dead_code)]` and which cannot be overridden.
static _FILE_LINE: (&'static str, usize) = (file!(), line!());
static _FILE_LINE: (&'static str, usize) = (file!(), line!() as usize);
&_FILE_LINE
})
});
Expand Down
4 changes: 4 additions & 0 deletions src/libsyntax/ext/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ pub trait AstBuilder {
fn expr_usize(&self, span: Span, i: usize) -> P<ast::Expr>;
fn expr_int(&self, sp: Span, i: isize) -> P<ast::Expr>;
fn expr_u8(&self, sp: Span, u: u8) -> P<ast::Expr>;
fn expr_u32(&self, sp: Span, u: u32) -> P<ast::Expr>;
fn expr_bool(&self, sp: Span, value: bool) -> P<ast::Expr>;

fn expr_vec(&self, sp: Span, exprs: Vec<P<ast::Expr>>) -> P<ast::Expr>;
Expand Down Expand Up @@ -704,6 +705,9 @@ impl<'a> AstBuilder for ExtCtxt<'a> {
fn expr_u8(&self, sp: Span, u: u8) -> P<ast::Expr> {
self.expr_lit(sp, ast::LitInt(u as u64, ast::UnsignedIntLit(ast::TyU8)))
}
fn expr_u32(&self, sp: Span, u: u32) -> P<ast::Expr> {
self.expr_lit(sp, ast::LitInt(u as u64, ast::UnsignedIntLit(ast::TyU32)))
}
fn expr_bool(&self, sp: Span, value: bool) -> P<ast::Expr> {
self.expr_lit(sp, ast::LitBool(value))
}
Expand Down
5 changes: 3 additions & 2 deletions src/libsyntax/ext/source_util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ pub fn expand_line(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
let topmost = cx.original_span_in_file();
let loc = cx.codemap().lookup_char_pos(topmost.lo);

base::MacExpr::new(cx.expr_usize(topmost, loc.line))
base::MacExpr::new(cx.expr_u32(topmost, loc.line as u32))
}

/* column!(): expands to the current column number */
Expand All @@ -45,7 +45,8 @@ pub fn expand_column(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])

let topmost = cx.original_span_in_file();
let loc = cx.codemap().lookup_char_pos(topmost.lo);
base::MacExpr::new(cx.expr_usize(topmost, loc.col.to_usize()))

base::MacExpr::new(cx.expr_u32(topmost, loc.col.to_usize() as u32))
}

/// file!(): expands to the current filename */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

{
assert!(file!().ends_with("includeme.fragment"));
assert!(line!() == 5_usize);
assert!(line!() == 5u32);
format!("victory robot {}", line!())
}
2 changes: 1 addition & 1 deletion src/test/run-pass/syntax-extension-source-utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ macro_rules! indirect_line { () => ( line!() ) }

pub fn main() {
assert_eq!(line!(), 25);
//assert!((column!() == 11));
assert!((column!() == 4u32));
assert_eq!(indirect_line!(), 27);
assert!((file!().ends_with("syntax-extension-source-utils.rs")));
assert_eq!(stringify!((2*3) + 5).to_string(), "( 2 * 3 ) + 5".to_string());
Expand Down

0 comments on commit f0f7ca2

Please sign in to comment.