diff options
author | Edwin Cheng <[email protected]> | 2019-04-23 04:10:41 +0100 |
---|---|---|
committer | Edwin Cheng <[email protected]> | 2019-04-23 04:10:41 +0100 |
commit | 6c913d8fa700c8ab58cf386dc958707a248f1379 (patch) | |
tree | e1cc915077e76d097ddd9bc6739ba7af8c05dd9f /crates/ra_parser/src | |
parent | 1705e5887d5c71cad846cb7e840b3c4e03942856 (diff) |
Add `...` parsing for fn pointer type
Diffstat (limited to 'crates/ra_parser/src')
-rw-r--r-- | crates/ra_parser/src/grammar/params.rs | 4 | ||||
-rw-r--r-- | crates/ra_parser/src/grammar/types.rs | 1 |
2 files changed, 3 insertions, 2 deletions
diff --git a/crates/ra_parser/src/grammar/params.rs b/crates/ra_parser/src/grammar/params.rs index d027578b6..3d3bd4cc1 100644 --- a/crates/ra_parser/src/grammar/params.rs +++ b/crates/ra_parser/src/grammar/params.rs | |||
@@ -43,7 +43,7 @@ fn list_(p: &mut Parser, flavor: Flavor) { | |||
43 | if flavor.type_required() { | 43 | if flavor.type_required() { |
44 | opt_self_param(p); | 44 | opt_self_param(p); |
45 | } | 45 | } |
46 | while !p.at(EOF) && !p.at(ket) && !(flavor == Flavor::Normal && p.at(DOTDOTDOT)) { | 46 | while !p.at(EOF) && !p.at(ket) && !(flavor.type_required() && p.at(DOTDOTDOT)) { |
47 | if !p.at_ts(VALUE_PARAMETER_FIRST) { | 47 | if !p.at_ts(VALUE_PARAMETER_FIRST) { |
48 | p.error("expected value parameter"); | 48 | p.error("expected value parameter"); |
49 | break; | 49 | break; |
@@ -55,7 +55,7 @@ fn list_(p: &mut Parser, flavor: Flavor) { | |||
55 | } | 55 | } |
56 | // test param_list_vararg | 56 | // test param_list_vararg |
57 | // extern "C" { fn printf(format: *const i8, ...) -> i32; } | 57 | // extern "C" { fn printf(format: *const i8, ...) -> i32; } |
58 | if flavor == Flavor::Normal { | 58 | if flavor.type_required() { |
59 | p.eat(DOTDOTDOT); | 59 | p.eat(DOTDOTDOT); |
60 | } | 60 | } |
61 | p.expect(ket); | 61 | p.expect(ket); |
diff --git a/crates/ra_parser/src/grammar/types.rs b/crates/ra_parser/src/grammar/types.rs index a46da9b44..686c80f3c 100644 --- a/crates/ra_parser/src/grammar/types.rs +++ b/crates/ra_parser/src/grammar/types.rs | |||
@@ -166,6 +166,7 @@ fn placeholder_type(p: &mut Parser) { | |||
166 | // type A = fn(); | 166 | // type A = fn(); |
167 | // type B = unsafe fn(); | 167 | // type B = unsafe fn(); |
168 | // type C = unsafe extern "C" fn(); | 168 | // type C = unsafe extern "C" fn(); |
169 | // type D = extern "C" fn ( u8 , ... ) -> u8; | ||
169 | fn fn_pointer_type(p: &mut Parser) { | 170 | fn fn_pointer_type(p: &mut Parser) { |
170 | let m = p.start(); | 171 | let m = p.start(); |
171 | p.eat(UNSAFE_KW); | 172 | p.eat(UNSAFE_KW); |