Error instead of infinite loop when parsing enum without a derive attribute in derive_parser! (#391)

This commit is contained in:
Violet 2025-06-23 16:18:21 -07:00 committed by GitHub
commit 5edfeb04eb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -22,14 +22,23 @@ impl Parse for ParseDefinitions {
fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
let token_type = input.parse::<ItemEnum>()?;
let mut additional_enums = FxHashMap::default();
while input.peek(Token![#]) {
let enum_ = input.parse::<ItemEnum>()?;
additional_enums.insert(enum_.ident.clone(), enum_);
}
let mut definitions = Vec::new();
while !input.is_empty() {
definitions.push(input.parse::<OpcodeDefinition>()?);
loop {
if input.is_empty() {
break;
}
let lookahead = input.lookahead1();
if lookahead.peek(Token![#]) {
let enum_ = input.parse::<ItemEnum>()?;
additional_enums.insert(enum_.ident.clone(), enum_);
} else if lookahead.peek(Ident) {
definitions.push(input.parse::<OpcodeDefinition>()?);
} else {
return Err(lookahead.error());
}
}
Ok(Self {
token_type,
additional_enums,