diff options
| author | John Hodge <tpg@mutabah.net> | 2015-10-24 16:52:07 +0800 |
|---|---|---|
| committer | John Hodge <tpg@mutabah.net> | 2015-10-25 12:03:07 +0800 |
| commit | f9b8c49cdb75fb571c7b3ea4af90b0e96929276c (patch) | |
| tree | 8a9e908887bee8d78edb746bb0c68a1b86772960 /src/libsyntax/parse | |
| parent | bbb5f8e12e20f1677b4d21cf6d52e6b09c5fdc12 (diff) | |
| download | rust-f9b8c49cdb75fb571c7b3ea4af90b0e96929276c.tar.gz rust-f9b8c49cdb75fb571c7b3ea4af90b0e96929276c.zip | |
Switch to 'const unsafe fn' ordering (rust-lang/rust#29107)
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index fcebe035961..c5510129a1e 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4382,7 +4382,8 @@ impl<'a> Parser<'a> { /// true if we are looking at `const ID`, false for things like `const fn` etc pub fn is_const_item(&mut self) -> bool { self.token.is_keyword(keywords::Const) && - !self.look_ahead(1, |t| t.is_keyword(keywords::Fn)) + !self.look_ahead(1, |t| t.is_keyword(keywords::Fn)) && + !self.look_ahead(1, |t| t.is_keyword(keywords::Unsafe)) } /// parses all the "front matter" for a `fn` declaration, up to @@ -4390,11 +4391,12 @@ impl<'a> Parser<'a> { /// /// - `const fn` /// - `unsafe fn` + /// - `const unsafe fn` /// - `extern fn` /// - etc pub fn parse_fn_front_matter(&mut self) -> PResult<(ast::Constness, ast::Unsafety, abi::Abi)> { - let unsafety = try!(self.parse_unsafety()); let is_const_fn = try!(self.eat_keyword(keywords::Const)); + let unsafety = try!(self.parse_unsafety()); let (constness, unsafety, abi) = if is_const_fn { (Constness::Const, unsafety, abi::Rust) } else { @@ -5304,11 +5306,18 @@ impl<'a> Parser<'a> { return Ok(Some(item)); } if try!(self.eat_keyword(keywords::Const) ){ - if self.check_keyword(keywords::Fn) { + if self.check_keyword(keywords::Fn) + || (self.check_keyword(keywords::Unsafe) + && self.look_ahead(1, |t| t.is_keyword(keywords::Fn))) { // CONST FUNCTION ITEM + let unsafety = if try!(self.eat_keyword(keywords::Unsafe) ){ + Unsafety::Unsafe + } else { + Unsafety::Normal + }; try!(self.bump()); let (ident, item_, extra_attrs) = - try!(self.parse_item_fn(Unsafety::Normal, Constness::Const, abi::Rust)); + try!(self.parse_item_fn(unsafety, Constness::Const, abi::Rust)); let last_span = self.last_span; let item = self.mk_item(lo, last_span.hi, @@ -5391,14 +5400,9 @@ impl<'a> Parser<'a> { } else { abi::Rust }; - let constness = if abi == abi::Rust && try!(self.eat_keyword(keywords::Const) ){ - Constness::Const - } else { - Constness::NotConst - }; try!(self.expect_keyword(keywords::Fn)); let (ident, item_, extra_attrs) = - try!(self.parse_item_fn(Unsafety::Unsafe, constness, abi)); + try!(self.parse_item_fn(Unsafety::Unsafe, Constness::NotConst, abi)); let last_span = self.last_span; let item = self.mk_item(lo, last_span.hi, |
