Skip to content

Commit 42338ff

Browse files
committed
add optionally_typed_ident fn
1 parent 6e76a98 commit 42338ff

File tree

1 file changed

+23
-44
lines changed
  • naga/src/front/wgsl/parse

1 file changed

+23
-44
lines changed

naga/src/front/wgsl/parse/mod.rs

Lines changed: 23 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,6 +1298,23 @@ impl Parser {
12981298
Ok((handle, self.pop_rule_span(lexer)))
12991299
}
13001300

1301+
fn optionally_typed_ident<'a>(
1302+
&mut self,
1303+
lexer: &mut Lexer<'a>,
1304+
ctx: &mut ExpressionContext<'a, '_, '_>,
1305+
) -> Result<'a, (ast::Ident<'a>, Option<Handle<ast::Type<'a>>>)> {
1306+
let name = lexer.next_ident()?;
1307+
1308+
let ty = if lexer.skip(Token::Separator(':')) {
1309+
Some(self.type_decl(lexer, ctx)?)
1310+
} else {
1311+
None
1312+
};
1313+
1314+
Ok((name, ty))
1315+
}
1316+
1317+
/// 'var' _disambiguate_template template_list? optionally_typed_ident
13011318
fn variable_decl<'a>(
13021319
&mut self,
13031320
lexer: &mut Lexer<'a>,
@@ -1322,13 +1339,7 @@ impl Parser {
13221339
};
13231340
lexer.expect(Token::Paren('>'))?;
13241341
}
1325-
let name = lexer.next_ident()?;
1326-
1327-
let ty = if lexer.skip(Token::Separator(':')) {
1328-
Some(self.type_decl(lexer, ctx)?)
1329-
} else {
1330-
None
1331-
};
1342+
let (name, ty) = self.optionally_typed_ident(lexer, ctx)?;
13321343

13331344
let init = if lexer.skip(Token::Operation('=')) {
13341345
let handle = self.general_expression(lexer, ctx)?;
@@ -2141,14 +2152,8 @@ impl Parser {
21412152
}
21422153
"let" => {
21432154
let _ = lexer.next();
2144-
let name = lexer.next_ident()?;
2155+
let (name, given_ty) = this.optionally_typed_ident(lexer, ctx)?;
21452156

2146-
let given_ty = if lexer.skip(Token::Separator(':')) {
2147-
let ty = this.type_decl(lexer, ctx)?;
2148-
Some(ty)
2149-
} else {
2150-
None
2151-
};
21522157
lexer.expect(Token::Operation('='))?;
21532158
let expr_id = this.general_expression(lexer, ctx)?;
21542159
lexer.expect(Token::Separator(';'))?;
@@ -2163,14 +2168,8 @@ impl Parser {
21632168
}
21642169
"const" => {
21652170
let _ = lexer.next();
2166-
let name = lexer.next_ident()?;
2171+
let (name, given_ty) = this.optionally_typed_ident(lexer, ctx)?;
21672172

2168-
let given_ty = if lexer.skip(Token::Separator(':')) {
2169-
let ty = this.type_decl(lexer, ctx)?;
2170-
Some(ty)
2171-
} else {
2172-
None
2173-
};
21742173
lexer.expect(Token::Operation('='))?;
21752174
let expr_id = this.general_expression(lexer, ctx)?;
21762175
lexer.expect(Token::Separator(';'))?;
@@ -2185,14 +2184,7 @@ impl Parser {
21852184
}
21862185
"var" => {
21872186
let _ = lexer.next();
2188-
2189-
let name = lexer.next_ident()?;
2190-
let ty = if lexer.skip(Token::Separator(':')) {
2191-
let ty = this.type_decl(lexer, ctx)?;
2192-
Some(ty)
2193-
} else {
2194-
None
2195-
};
2187+
let (name, ty) = this.optionally_typed_ident(lexer, ctx)?;
21962188

21972189
let init = if lexer.skip(Token::Operation('=')) {
21982190
let init = this.general_expression(lexer, ctx)?;
@@ -2950,14 +2942,7 @@ impl Parser {
29502942
(Token::Word("const"), _) => {
29512943
ensure_no_diag_attrs("`const`s".into(), diagnostic_filters)?;
29522944

2953-
let name = lexer.next_ident()?;
2954-
2955-
let ty = if lexer.skip(Token::Separator(':')) {
2956-
let ty = self.type_decl(lexer, &mut ctx)?;
2957-
Some(ty)
2958-
} else {
2959-
None
2960-
};
2945+
let (name, ty) = self.optionally_typed_ident(lexer, &mut ctx)?;
29612946

29622947
lexer.expect(Token::Operation('='))?;
29632948
let init = self.general_expression(lexer, &mut ctx)?;
@@ -2973,13 +2958,7 @@ impl Parser {
29732958
(Token::Word("override"), _) => {
29742959
ensure_no_diag_attrs("`override`s".into(), diagnostic_filters)?;
29752960

2976-
let name = lexer.next_ident()?;
2977-
2978-
let ty = if lexer.skip(Token::Separator(':')) {
2979-
Some(self.type_decl(lexer, &mut ctx)?)
2980-
} else {
2981-
None
2982-
};
2961+
let (name, ty) = self.optionally_typed_ident(lexer, &mut ctx)?;
29832962

29842963
let init = if lexer.skip(Token::Operation('=')) {
29852964
Some(self.general_expression(lexer, &mut ctx)?)

0 commit comments

Comments
 (0)