Skip to content

Change column!() / line!() return type from usize to u32. #19284 #21769

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 23, 2015
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/libcore/macros.rs
Original file line number Diff line number Diff line change
@@ -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)
});
}
39 changes: 34 additions & 5 deletions src/libcore/panicking.rs
Original file line number Diff line number Diff line change
@@ -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
@@ -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
7 changes: 7 additions & 0 deletions src/liblog/macros.rs
Original file line number Diff line number Diff line change
@@ -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!(),
4 changes: 4 additions & 0 deletions src/librustc_trans/trans/common.rs
Original file line number Diff line number Diff line change
@@ -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)
}
4 changes: 2 additions & 2 deletions src/librustc_trans/trans/controlflow.rs
Original file line number Diff line number Diff line change
@@ -370,7 +370,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);
@@ -399,7 +399,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);
4 changes: 2 additions & 2 deletions src/libstd/macros.rs
Original file line number Diff line number Diff line change
@@ -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
})
});
@@ -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
})
});
4 changes: 4 additions & 0 deletions src/libsyntax/ext/build.rs
Original file line number Diff line number Diff line change
@@ -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>;
@@ -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))
}
5 changes: 3 additions & 2 deletions src/libsyntax/ext/source_util.rs
Original file line number Diff line number Diff line change
@@ -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 */
@@ -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 */
Original file line number Diff line number Diff line change
@@ -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
@@ -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());