@@ -39,7 +39,7 @@ use ast::{ViewPath, ViewPathGlob, ViewPathList, ViewPathSimple};
3939use ast:: { Visibility , WhereClause } ;
4040use ast:: { BinOpKind , UnOp } ;
4141use ast;
42- use codemap:: { self , CodeMap , Spanned , spanned} ;
42+ use codemap:: { self , CodeMap , Spanned , spanned, respan } ;
4343use syntax_pos:: { self , Span , BytePos , mk_sp} ;
4444use errors:: { self , DiagnosticBuilder } ;
4545use ext:: tt:: macro_parser;
@@ -4768,7 +4768,7 @@ impl<'a> Parser<'a> {
47684768 /// Parse an item-position function declaration.
47694769 fn parse_item_fn ( & mut self ,
47704770 unsafety : Unsafety ,
4771- constness : Constness ,
4771+ constness : Spanned < Constness > ,
47724772 abi : abi:: Abi )
47734773 -> PResult < ' a , ItemInfo > {
47744774 let ( ident, mut generics) = self . parse_fn_header ( ) ?;
@@ -4794,18 +4794,21 @@ impl<'a> Parser<'a> {
47944794 /// - `extern fn`
47954795 /// - etc
47964796 pub fn parse_fn_front_matter ( & mut self )
4797- -> PResult < ' a , ( ast:: Constness , ast:: Unsafety , abi:: Abi ) > {
4797+ -> PResult < ' a , ( Spanned < ast:: Constness > ,
4798+ ast:: Unsafety ,
4799+ abi:: Abi ) > {
47984800 let is_const_fn = self . eat_keyword ( keywords:: Const ) ;
4801+ let const_span = self . last_span ;
47994802 let unsafety = self . parse_unsafety ( ) ?;
48004803 let ( constness, unsafety, abi) = if is_const_fn {
4801- ( Constness :: Const , unsafety, Abi :: Rust )
4804+ ( respan ( const_span , Constness :: Const ) , unsafety, Abi :: Rust )
48024805 } else {
48034806 let abi = if self . eat_keyword ( keywords:: Extern ) {
48044807 self . parse_opt_abi ( ) ?. unwrap_or ( Abi :: C )
48054808 } else {
48064809 Abi :: Rust
48074810 } ;
4808- ( Constness :: NotConst , unsafety, abi)
4811+ ( respan ( self . last_span , Constness :: NotConst ) , unsafety, abi)
48094812 } ;
48104813 self . expect_keyword ( keywords:: Fn ) ?;
48114814 Ok ( ( constness, unsafety, abi) )
@@ -5704,9 +5707,12 @@ impl<'a> Parser<'a> {
57045707
57055708 if self . eat_keyword ( keywords:: Fn ) {
57065709 // EXTERN FUNCTION ITEM
5710+ let fn_span = self . last_span ;
57075711 let abi = opt_abi. unwrap_or ( Abi :: C ) ;
57085712 let ( ident, item_, extra_attrs) =
5709- self . parse_item_fn ( Unsafety :: Normal , Constness :: NotConst , abi) ?;
5713+ self . parse_item_fn ( Unsafety :: Normal ,
5714+ respan ( fn_span, Constness :: NotConst ) ,
5715+ abi) ?;
57105716 let last_span = self . last_span ;
57115717 let item = self . mk_item ( lo,
57125718 last_span. hi ,
@@ -5740,6 +5746,7 @@ impl<'a> Parser<'a> {
57405746 return Ok ( Some ( item) ) ;
57415747 }
57425748 if self . eat_keyword ( keywords:: Const ) {
5749+ let const_span = self . last_span ;
57435750 if self . check_keyword ( keywords:: Fn )
57445751 || ( self . check_keyword ( keywords:: Unsafe )
57455752 && self . look_ahead ( 1 , |t| t. is_keyword ( keywords:: Fn ) ) ) {
@@ -5751,7 +5758,9 @@ impl<'a> Parser<'a> {
57515758 } ;
57525759 self . bump ( ) ;
57535760 let ( ident, item_, extra_attrs) =
5754- self . parse_item_fn ( unsafety, Constness :: Const , Abi :: Rust ) ?;
5761+ self . parse_item_fn ( unsafety,
5762+ respan ( const_span, Constness :: Const ) ,
5763+ Abi :: Rust ) ?;
57555764 let last_span = self . last_span ;
57565765 let item = self . mk_item ( lo,
57575766 last_span. hi ,
@@ -5815,8 +5824,11 @@ impl<'a> Parser<'a> {
58155824 if self . check_keyword ( keywords:: Fn ) {
58165825 // FUNCTION ITEM
58175826 self . bump ( ) ;
5827+ let fn_span = self . last_span ;
58185828 let ( ident, item_, extra_attrs) =
5819- self . parse_item_fn ( Unsafety :: Normal , Constness :: NotConst , Abi :: Rust ) ?;
5829+ self . parse_item_fn ( Unsafety :: Normal ,
5830+ respan ( fn_span, Constness :: NotConst ) ,
5831+ Abi :: Rust ) ?;
58205832 let last_span = self . last_span ;
58215833 let item = self . mk_item ( lo,
58225834 last_span. hi ,
@@ -5836,8 +5848,11 @@ impl<'a> Parser<'a> {
58365848 Abi :: Rust
58375849 } ;
58385850 self . expect_keyword ( keywords:: Fn ) ?;
5851+ let fn_span = self . last_span ;
58395852 let ( ident, item_, extra_attrs) =
5840- self . parse_item_fn ( Unsafety :: Unsafe , Constness :: NotConst , abi) ?;
5853+ self . parse_item_fn ( Unsafety :: Unsafe ,
5854+ respan ( fn_span, Constness :: NotConst ) ,
5855+ abi) ?;
58415856 let last_span = self . last_span ;
58425857 let item = self . mk_item ( lo,
58435858 last_span. hi ,
0 commit comments