From 5edfeb04eb648d4b17a8a04f435cf72b96a88ba4 Mon Sep 17 00:00:00 2001 From: Violet Date: Mon, 23 Jun 2025 16:18:21 -0700 Subject: [PATCH] Error instead of infinite loop when parsing enum without a derive attribute in derive_parser! (#391) --- ptx_parser_macros_impl/src/parser.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/ptx_parser_macros_impl/src/parser.rs b/ptx_parser_macros_impl/src/parser.rs index f1cd738..defc811 100644 --- a/ptx_parser_macros_impl/src/parser.rs +++ b/ptx_parser_macros_impl/src/parser.rs @@ -22,14 +22,23 @@ impl Parse for ParseDefinitions { fn parse(input: syn::parse::ParseStream) -> syn::Result { let token_type = input.parse::()?; let mut additional_enums = FxHashMap::default(); - while input.peek(Token![#]) { - let enum_ = input.parse::()?; - additional_enums.insert(enum_.ident.clone(), enum_); - } let mut definitions = Vec::new(); - while !input.is_empty() { - definitions.push(input.parse::()?); + loop { + if input.is_empty() { + break; + } + + let lookahead = input.lookahead1(); + if lookahead.peek(Token![#]) { + let enum_ = input.parse::()?; + additional_enums.insert(enum_.ident.clone(), enum_); + } else if lookahead.peek(Ident) { + definitions.push(input.parse::()?); + } else { + return Err(lookahead.error()); + } } + Ok(Self { token_type, additional_enums,