Skip to content

Commit aa5c4bb

Browse files
committed
Change Constness to Spanned<Constness>
1 parent 1e9e798 commit aa5c4bb

File tree

14 files changed

+61
-38
lines changed

14 files changed

+61
-38
lines changed

src/librustc/hir/lowering.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -809,8 +809,8 @@ impl<'a> LoweringContext<'a> {
809809
}
810810
}
811811

812-
fn lower_constness(&mut self, c: Constness) -> hir::Constness {
813-
match c {
812+
fn lower_constness(&mut self, c: Spanned<Constness>) -> hir::Constness {
813+
match c.node {
814814
Constness::Const => hir::Constness::Const,
815815
Constness::NotConst => hir::Constness::NotConst,
816816
}

src/librustc/hir/map/blocks.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@
2323
2424
pub use self::Code::*;
2525

26+
use hir as ast;
2627
use hir::map::{self, Node};
27-
use syntax::abi;
2828
use hir::{Block, FnDecl};
29+
use hir::intravisit::FnKind;
30+
use syntax::abi;
2931
use syntax::ast::{Attribute, Name, NodeId};
30-
use hir as ast;
3132
use syntax_pos::Span;
32-
use hir::intravisit::FnKind;
3333

3434
/// An FnLikeNode is a Node that is like a fn, in that it has a decl
3535
/// and a body (as well as a NodeId, a span, etc).

src/librustc/infer/error_reporting.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1030,7 +1030,8 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
10301030
= node_inner.expect("expect item fn");
10311031
let rebuilder = Rebuilder::new(self.tcx, fn_decl, generics, same_regions, &life_giver);
10321032
let (fn_decl, generics) = rebuilder.rebuild();
1033-
self.give_expl_lifetime_param(err, &fn_decl, unsafety, constness, name, &generics, span);
1033+
self.give_expl_lifetime_param(
1034+
err, &fn_decl, unsafety, constness, name, &generics, span);
10341035
}
10351036

10361037
pub fn issue_32330_warnings(&self, span: Span, issue32330s: &[ty::Issue32330]) {

src/librustc_passes/ast_validation.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use rustc::lint;
2020
use rustc::session::Session;
2121
use syntax::ast::*;
2222
use syntax::attr;
23+
use syntax::codemap::Spanned;
2324
use syntax::parse::token::{self, keywords};
2425
use syntax::visit::{self, Visitor};
2526
use syntax_pos::Span;
@@ -70,11 +71,12 @@ impl<'a> AstValidator<'a> {
7071
}
7172
}
7273

73-
fn check_trait_fn_not_const(&self, span: Span, constness: Constness) {
74-
match constness {
74+
fn check_trait_fn_not_const(&self, constness: Spanned<Constness>) {
75+
match constness.node {
7576
Constness::Const => {
76-
struct_span_err!(self.session, span, E0379, "trait fns cannot be declared const")
77-
.span_label(span, &format!("trait fns cannot be const"))
77+
struct_span_err!(self.session, constness.span, E0379,
78+
"trait fns cannot be declared const")
79+
.span_label(constness.span, &format!("trait fns cannot be const"))
7880
.emit();
7981
}
8082
_ => {}
@@ -158,7 +160,7 @@ impl<'a> Visitor for AstValidator<'a> {
158160
for impl_item in impl_items {
159161
self.invalid_visibility(&impl_item.vis, impl_item.span, None);
160162
if let ImplItemKind::Method(ref sig, _) = impl_item.node {
161-
self.check_trait_fn_not_const(impl_item.span, sig.constness);
163+
self.check_trait_fn_not_const(sig.constness);
162164
}
163165
}
164166
}
@@ -186,7 +188,7 @@ impl<'a> Visitor for AstValidator<'a> {
186188
ItemKind::Trait(_, _, _, ref trait_items) => {
187189
for trait_item in trait_items {
188190
if let TraitItemKind::Method(ref sig, _) = trait_item.node {
189-
self.check_trait_fn_not_const(trait_item.span, sig.constness);
191+
self.check_trait_fn_not_const(sig.constness);
190192
}
191193
}
192194
}

src/librustc_passes/consts.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ impl<'a, 'gcx> CheckCrateVisitor<'a, 'gcx> {
147147
}
148148

149149
let mode = match fk {
150-
FnKind::ItemFn(_, _, _, hir::Constness::Const, _, _, _) => Mode::ConstFn,
150+
FnKind::ItemFn(_, _, _, hir::Constness::Const, _, _, _)
151+
=> Mode::ConstFn,
151152
FnKind::Method(_, m, _, _) => {
152153
if m.constness == hir::Constness::Const {
153154
Mode::ConstFn

src/libsyntax/ast.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1120,7 +1120,7 @@ pub struct MutTy {
11201120
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
11211121
pub struct MethodSig {
11221122
pub unsafety: Unsafety,
1123-
pub constness: Constness,
1123+
pub constness: Spanned<Constness>,
11241124
pub abi: Abi,
11251125
pub decl: P<FnDecl>,
11261126
pub generics: Generics,
@@ -1846,7 +1846,7 @@ pub enum ItemKind {
18461846
/// A function declaration (`fn` or `pub fn`).
18471847
///
18481848
/// E.g. `fn foo(bar: usize) -> usize { .. }`
1849-
Fn(P<FnDecl>, Unsafety, Constness, Abi, Generics, P<Block>),
1849+
Fn(P<FnDecl>, Unsafety, Spanned<Constness>, Abi, Generics, P<Block>),
18501850
/// A module declaration (`mod` or `pub mod`).
18511851
///
18521852
/// E.g. `mod foo;` or `mod foo { .. }`

src/libsyntax/ext/build.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use abi::Abi;
1212
use ast::{self, Ident, Generics, Expr, BlockCheckMode, UnOp, PatKind};
1313
use attr;
1414
use syntax_pos::{Span, DUMMY_SP, Pos};
15-
use codemap::{respan, Spanned};
15+
use codemap::{dummy_spanned, respan, Spanned};
1616
use ext::base::ExtCtxt;
1717
use parse::token::{self, keywords, InternedString};
1818
use ptr::P;
@@ -1016,7 +1016,7 @@ impl<'a> AstBuilder for ExtCtxt<'a> {
10161016
Vec::new(),
10171017
ast::ItemKind::Fn(self.fn_decl(inputs, output),
10181018
ast::Unsafety::Normal,
1019-
ast::Constness::NotConst,
1019+
dummy_spanned(ast::Constness::NotConst),
10201020
Abi::Rust,
10211021
generics,
10221022
body))

src/libsyntax/feature_gate.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use ast::{NodeId, PatKind};
3030
use ast;
3131
use attr;
3232
use attr::AttrMetaMethods;
33-
use codemap::CodeMap;
33+
use codemap::{CodeMap, Spanned};
3434
use syntax_pos::Span;
3535
use errors::Handler;
3636
use visit::{self, FnKind, Visitor};
@@ -1046,7 +1046,7 @@ impl<'a> Visitor for PostExpansionVisitor<'a> {
10461046
_node_id: NodeId) {
10471047
// check for const fn declarations
10481048
match fn_kind {
1049-
FnKind::ItemFn(_, _, _, ast::Constness::Const, _, _) => {
1049+
FnKind::ItemFn(_, _, _, Spanned { node: ast::Constness::Const, .. }, _, _) => {
10501050
gate_feature_post!(&self, const_fn, span, "const fn is unstable");
10511051
}
10521052
_ => {
@@ -1078,7 +1078,7 @@ impl<'a> Visitor for PostExpansionVisitor<'a> {
10781078
if block.is_none() {
10791079
self.check_abi(sig.abi, ti.span);
10801080
}
1081-
if sig.constness == ast::Constness::Const {
1081+
if sig.constness.node == ast::Constness::Const {
10821082
gate_feature_post!(&self, const_fn, ti.span, "const fn is unstable");
10831083
}
10841084
}
@@ -1105,7 +1105,7 @@ impl<'a> Visitor for PostExpansionVisitor<'a> {
11051105
"associated constants are experimental")
11061106
}
11071107
ast::ImplItemKind::Method(ref sig, _) => {
1108-
if sig.constness == ast::Constness::Const {
1108+
if sig.constness.node == ast::Constness::Const {
11091109
gate_feature_post!(&self, const_fn, ii.span, "const fn is unstable");
11101110
}
11111111
}

src/libsyntax/parse/mod.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -937,7 +937,10 @@ mod tests {
937937
variadic: false
938938
}),
939939
ast::Unsafety::Normal,
940-
ast::Constness::NotConst,
940+
Spanned {
941+
span: sp(0,2),
942+
node: ast::Constness::NotConst,
943+
},
941944
Abi::Rust,
942945
ast::Generics{ // no idea on either of these:
943946
lifetimes: Vec::new(),

src/libsyntax/parse/parser.rs

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ use ast::{ViewPath, ViewPathGlob, ViewPathList, ViewPathSimple};
3939
use ast::{Visibility, WhereClause};
4040
use ast::{BinOpKind, UnOp};
4141
use ast;
42-
use codemap::{self, CodeMap, Spanned, spanned};
42+
use codemap::{self, CodeMap, Spanned, spanned, respan};
4343
use syntax_pos::{self, Span, BytePos, mk_sp};
4444
use errors::{self, DiagnosticBuilder};
4545
use 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,

src/libsyntax/print/pprust.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,7 +1184,7 @@ impl<'a> State<'a> {
11841184
try!(self.print_fn(
11851185
decl,
11861186
unsafety,
1187-
constness,
1187+
constness.node,
11881188
abi,
11891189
Some(item.ident),
11901190
typarams,
@@ -1518,7 +1518,7 @@ impl<'a> State<'a> {
15181518
-> io::Result<()> {
15191519
self.print_fn(&m.decl,
15201520
m.unsafety,
1521-
m.constness,
1521+
m.constness.node,
15221522
m.abi,
15231523
Some(ident),
15241524
&m.generics,

src/libsyntax/test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use attr;
2424
use syntax_pos::{self, DUMMY_SP, NO_EXPANSION, Span, FileMap, BytePos};
2525
use std::rc::Rc;
2626

27-
use codemap::{self, CodeMap, ExpnInfo, NameAndSpan, MacroAttribute};
27+
use codemap::{self, CodeMap, ExpnInfo, NameAndSpan, MacroAttribute, dummy_spanned};
2828
use errors;
2929
use errors::snippet::{SnippetData};
3030
use config;
@@ -485,7 +485,7 @@ fn mk_main(cx: &mut TestCtxt) -> P<ast::Item> {
485485
let main_body = ecx.block(sp, vec![call_test_main]);
486486
let main = ast::ItemKind::Fn(ecx.fn_decl(vec![], main_ret_ty),
487487
ast::Unsafety::Normal,
488-
ast::Constness::NotConst,
488+
dummy_spanned(ast::Constness::NotConst),
489489
::abi::Abi::Rust, ast::Generics::default(), main_body);
490490
let main = P(ast::Item {
491491
ident: token::str_to_ident("main"),

src/libsyntax/visit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use codemap::Spanned;
3131
#[derive(Copy, Clone, PartialEq, Eq)]
3232
pub enum FnKind<'a> {
3333
/// fn foo() or extern "Abi" fn foo()
34-
ItemFn(Ident, &'a Generics, Unsafety, Constness, Abi, &'a Visibility),
34+
ItemFn(Ident, &'a Generics, Unsafety, Spanned<Constness>, Abi, &'a Visibility),
3535

3636
/// fn foo(&self)
3737
Method(Ident, &'a MethodSig, Option<&'a Visibility>),

src/libsyntax_ext/deriving/generic/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ use syntax::attr;
197197
use syntax::attr::AttrMetaMethods;
198198
use syntax::ext::base::{Annotatable, ExtCtxt};
199199
use syntax::ext::build::AstBuilder;
200-
use syntax::codemap::{self, respan};
200+
use syntax::codemap::{self, dummy_spanned, respan};
201201
use syntax::util::move_map::MoveMap;
202202
use syntax::parse::token::{InternedString, keywords};
203203
use syntax::ptr::P;
@@ -901,7 +901,8 @@ impl<'a> MethodDef<'a> {
901901
generics: fn_generics,
902902
abi: abi,
903903
unsafety: unsafety,
904-
constness: ast::Constness::NotConst,
904+
constness:
905+
dummy_spanned(ast::Constness::NotConst),
905906
decl: fn_decl,
906907
},
907908
body_block),

0 commit comments

Comments
 (0)