pub fn expand_file(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
    -> base::MacResult {
    base::check_zero_tts(cx, sp, tts, "file!");

    let topmost = topmost_expn_info(cx.backtrace().unwrap());
    let loc = cx.codemap().lookup_char_pos(topmost.call_site.lo);
    let filename = loc.file.name;
    base::MRExpr(cx.expr_str(topmost.call_site, filename))
}
/* The filemap (`loc.file`) contains a bunch more information we could spit
 * out if we wanted. */
The filemap (`loc.file`) contains a bunch more information we could spit
out if we wanted.
The filemap ( ` loc . file ` ) contains a bunch more information we could spit out if we wanted .
pub fn expand_file(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
    -> base::MacResult {
    base::check_zero_tts(cx, sp, tts, "file!");
    let topmost = topmost_expn_info(cx.backtrace().unwrap());
    let loc = cx.codemap().lookup_char_pos(topmost.call_site.lo);
    let filename = loc.file.name;
    base::MRExpr(cx.expr_str(topmost.call_site, filename))
}
pub fn expand_file ( cx : & mut ExtCtxt , sp : Span , tts : & [ ast :: TokenTree ] ) -> base :: MacResult { base :: check_zero_tts ( cx , sp , tts , " " ) ; let topmost = topmost_expn_info ( cx . backtrace ( ) . unwrap ( ) ) ; let loc = cx . codemap ( ) . lookup_char_pos ( topmost . call_site . lo ) ; let filename = loc . file . name ; base :: MRExpr ( cx . expr_str ( topmost . call_site , filename ) ) }
The filemap (`loc.file`) contains a bunch more information we could spit
 out if we wanted.
The filemap ( ` loc . file ` ) contains a bunch more information we could spit out if we wanted .
cx
&mut ExtCtxt
sp
Span
tts
&[ast::TokenTree]
cx
&mut ExtCtxt
sp
Span
tts
&[ast::TokenTree]