about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2015-10-03 23:42:22 +0800
committerJohn Hodge <tpg@mutabah.net>2015-10-03 23:42:22 +0800
commit4c88bf2885d91f9aa0c4aeab619542a50a278f33 (patch)
treecaf992685a58b865a5b188faf3a5a47942d7fc17 /src/libsyntax
parent0369304feb732f0bc89e19e9f09cb3ec9d94fe9a (diff)
downloadrust-4c88bf2885d91f9aa0c4aeab619542a50a278f33.tar.gz
rust-4c88bf2885d91f9aa0c4aeab619542a50a278f33.zip
Implement original version of RFC#1245
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/parse/parser.rs11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index f47dfeb1d34..20c0e79f1d8 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 {
@@ -5399,9 +5399,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,