@@ -39,7 +39,7 @@ use ast::{ViewPath, ViewPathGlob, ViewPathList, ViewPathSimple};
39
39
use ast:: { Visibility , WhereClause } ;
40
40
use ast:: { BinOpKind , UnOp } ;
41
41
use ast;
42
- use codemap:: { self , CodeMap , Spanned , spanned} ;
42
+ use codemap:: { self , CodeMap , Spanned , spanned, respan } ;
43
43
use syntax_pos:: { self , Span , BytePos , mk_sp} ;
44
44
use errors:: { self , DiagnosticBuilder } ;
45
45
use ext:: tt:: macro_parser;
@@ -4770,7 +4770,7 @@ impl<'a> Parser<'a> {
4770
4770
/// Parse an item-position function declaration.
4771
4771
fn parse_item_fn ( & mut self ,
4772
4772
unsafety : Unsafety ,
4773
- constness : Constness ,
4773
+ constness : Spanned < Constness > ,
4774
4774
abi : abi:: Abi )
4775
4775
-> PResult < ' a , ItemInfo > {
4776
4776
let ( ident, mut generics) = self . parse_fn_header ( ) ?;
@@ -4796,18 +4796,21 @@ impl<'a> Parser<'a> {
4796
4796
/// - `extern fn`
4797
4797
/// - etc
4798
4798
pub fn parse_fn_front_matter ( & mut self )
4799
- -> PResult < ' a , ( ast:: Constness , ast:: Unsafety , abi:: Abi ) > {
4799
+ -> PResult < ' a , ( Spanned < ast:: Constness > ,
4800
+ ast:: Unsafety ,
4801
+ abi:: Abi ) > {
4800
4802
let is_const_fn = self . eat_keyword ( keywords:: Const ) ;
4803
+ let const_span = self . last_span ;
4801
4804
let unsafety = self . parse_unsafety ( ) ?;
4802
4805
let ( constness, unsafety, abi) = if is_const_fn {
4803
- ( Constness :: Const , unsafety, Abi :: Rust )
4806
+ ( respan ( const_span , Constness :: Const ) , unsafety, Abi :: Rust )
4804
4807
} else {
4805
4808
let abi = if self . eat_keyword ( keywords:: Extern ) {
4806
4809
self . parse_opt_abi ( ) ?. unwrap_or ( Abi :: C )
4807
4810
} else {
4808
4811
Abi :: Rust
4809
4812
} ;
4810
- ( Constness :: NotConst , unsafety, abi)
4813
+ ( respan ( self . last_span , Constness :: NotConst ) , unsafety, abi)
4811
4814
} ;
4812
4815
self . expect_keyword ( keywords:: Fn ) ?;
4813
4816
Ok ( ( constness, unsafety, abi) )
@@ -5706,9 +5709,12 @@ impl<'a> Parser<'a> {
5706
5709
5707
5710
if self . eat_keyword ( keywords:: Fn ) {
5708
5711
// EXTERN FUNCTION ITEM
5712
+ let fn_span = self . last_span ;
5709
5713
let abi = opt_abi. unwrap_or ( Abi :: C ) ;
5710
5714
let ( ident, item_, extra_attrs) =
5711
- self . parse_item_fn ( Unsafety :: Normal , Constness :: NotConst , abi) ?;
5715
+ self . parse_item_fn ( Unsafety :: Normal ,
5716
+ respan ( fn_span, Constness :: NotConst ) ,
5717
+ abi) ?;
5712
5718
let last_span = self . last_span ;
5713
5719
let item = self . mk_item ( lo,
5714
5720
last_span. hi ,
@@ -5742,6 +5748,7 @@ impl<'a> Parser<'a> {
5742
5748
return Ok ( Some ( item) ) ;
5743
5749
}
5744
5750
if self . eat_keyword ( keywords:: Const ) {
5751
+ let const_span = self . last_span ;
5745
5752
if self . check_keyword ( keywords:: Fn )
5746
5753
|| ( self . check_keyword ( keywords:: Unsafe )
5747
5754
&& self . look_ahead ( 1 , |t| t. is_keyword ( keywords:: Fn ) ) ) {
@@ -5753,7 +5760,9 @@ impl<'a> Parser<'a> {
5753
5760
} ;
5754
5761
self . bump ( ) ;
5755
5762
let ( ident, item_, extra_attrs) =
5756
- self . parse_item_fn ( unsafety, Constness :: Const , Abi :: Rust ) ?;
5763
+ self . parse_item_fn ( unsafety,
5764
+ respan ( const_span, Constness :: Const ) ,
5765
+ Abi :: Rust ) ?;
5757
5766
let last_span = self . last_span ;
5758
5767
let item = self . mk_item ( lo,
5759
5768
last_span. hi ,
@@ -5817,8 +5826,11 @@ impl<'a> Parser<'a> {
5817
5826
if self . check_keyword ( keywords:: Fn ) {
5818
5827
// FUNCTION ITEM
5819
5828
self . bump ( ) ;
5829
+ let fn_span = self . last_span ;
5820
5830
let ( ident, item_, extra_attrs) =
5821
- self . parse_item_fn ( Unsafety :: Normal , Constness :: NotConst , Abi :: Rust ) ?;
5831
+ self . parse_item_fn ( Unsafety :: Normal ,
5832
+ respan ( fn_span, Constness :: NotConst ) ,
5833
+ Abi :: Rust ) ?;
5822
5834
let last_span = self . last_span ;
5823
5835
let item = self . mk_item ( lo,
5824
5836
last_span. hi ,
@@ -5838,8 +5850,11 @@ impl<'a> Parser<'a> {
5838
5850
Abi :: Rust
5839
5851
} ;
5840
5852
self . expect_keyword ( keywords:: Fn ) ?;
5853
+ let fn_span = self . last_span ;
5841
5854
let ( ident, item_, extra_attrs) =
5842
- self . parse_item_fn ( Unsafety :: Unsafe , Constness :: NotConst , abi) ?;
5855
+ self . parse_item_fn ( Unsafety :: Unsafe ,
5856
+ respan ( fn_span, Constness :: NotConst ) ,
5857
+ abi) ?;
5843
5858
let last_span = self . last_span ;
5844
5859
let item = self . mk_item ( lo,
5845
5860
last_span. hi ,
0 commit comments