Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/parser/src/grammar/generic_params.rs')
-rw-r--r--crates/parser/src/grammar/generic_params.rs32
1 files changed, 17 insertions, 15 deletions
diff --git a/crates/parser/src/grammar/generic_params.rs b/crates/parser/src/grammar/generic_params.rs
index b2ce101835..b8119f0a21 100644
--- a/crates/parser/src/grammar/generic_params.rs
+++ b/crates/parser/src/grammar/generic_params.rs
@@ -14,21 +14,7 @@ fn generic_param_list(p: &mut Parser) {
p.bump(T![<]);
while !p.at(EOF) && !p.at(T![>]) {
- let m = p.start();
-
- // test generic_param_list_param_attribute
- // fn foo<#[lt_attr] 'a, #[t_attr] T>() {}
- attributes::outer_attrs(p);
-
- match p.current() {
- LIFETIME_IDENT => lifetime_param(p, m),
- IDENT => type_param(p, m),
- T![const] => const_param(p, m),
- _ => {
- m.abandon(p);
- p.err_and_bump("expected type parameter")
- }
- }
+ generic_param(p);
if !p.at(T![>]) && !p.expect(T![,]) {
break;
}
@@ -37,6 +23,22 @@ fn generic_param_list(p: &mut Parser) {
m.complete(p, GENERIC_PARAM_LIST);
}
+fn generic_param(p: &mut Parser) {
+ let m = p.start();
+ // test generic_param_attribute
+ // fn foo<#[lt_attr] 'a, #[t_attr] T>() {}
+ attributes::outer_attrs(p);
+ match p.current() {
+ LIFETIME_IDENT => lifetime_param(p, m),
+ IDENT => type_param(p, m),
+ T![const] => const_param(p, m),
+ _ => {
+ m.abandon(p);
+ p.err_and_bump("expected type parameter")
+ }
+ }
+}
+
// test lifetime_param
// fn f<'a: 'b>() {}
fn lifetime_param(p: &mut Parser, m: Marker) {