diff options
| author | bors <bors@rust-lang.org> | 2015-10-14 10:17:30 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-10-14 10:17:30 +0000 |
| commit | a668dd2a563796d6ab94a385e5a49a619c53e8ce (patch) | |
| tree | 726278c05db10bb72cfc71ca388c5f1530d18847 /src/libsyntax | |
| parent | 294ef5b158601b09e2a3ca49af124c63a9cf9528 (diff) | |
| parent | 4c88bf2885d91f9aa0c4aeab619542a50a278f33 (diff) | |
| download | rust-a668dd2a563796d6ab94a385e5a49a619c53e8ce.tar.gz rust-a668dd2a563796d6ab94a385e5a49a619c53e8ce.zip | |
Auto merge of #28827 - thepowersgang:unsafe-const-fn-2, r=Aatch
This is the original test implementation, which works according to the tests I wrote, but might need a review.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 934e4472bdc..b4c052eb181 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4380,11 +4380,11 @@ impl<'a> Parser<'a> { /// - `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 (constness, unsafety, abi) = if is_const_fn { - (Constness::Const, Unsafety::Normal, abi::Rust) + (Constness::Const, unsafety, abi::Rust) } else { - let unsafety = try!(self.parse_unsafety()); let abi = if try!(self.eat_keyword(keywords::Extern)) { try!(self.parse_opt_abi()).unwrap_or(abi::C) } else { @@ -5378,9 +5378,14 @@ 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::NotConst, abi)); + try!(self.parse_item_fn(Unsafety::Unsafe, constness, abi)); let last_span = self.last_span; let item = self.mk_item(lo, last_span.hi, |
