fix #[hdl]/#[hdl_module] attributes getting the wrong hygiene when processing #[cfg]s
This commit is contained in:
		
							parent
							
								
									b63676d0ca
								
							
						
					
					
						commit
						c16726cee6
					
				
					 3 changed files with 37 additions and 22 deletions
				
			
		| 
						 | 
				
			
			@ -1210,17 +1210,29 @@ fn hdl_main(
 | 
			
		|||
    attr: TokenStream,
 | 
			
		||||
    item: TokenStream,
 | 
			
		||||
) -> syn::Result<TokenStream> {
 | 
			
		||||
    let (evaluated_cfgs, attr): (_, TokenStream) = Parser::parse2(
 | 
			
		||||
    fn parse_evaluated_cfgs_attr<R>(
 | 
			
		||||
        input: ParseStream,
 | 
			
		||||
        parse_inner: impl FnOnce(ParseStream) -> syn::Result<R>,
 | 
			
		||||
    ) -> syn::Result<R> {
 | 
			
		||||
        let _: Token![#] = input.parse()?;
 | 
			
		||||
        let bracket_content;
 | 
			
		||||
        bracketed!(bracket_content in input);
 | 
			
		||||
        let _: kw::__evaluated_cfgs = bracket_content.parse()?;
 | 
			
		||||
        let paren_content;
 | 
			
		||||
        parenthesized!(paren_content in bracket_content);
 | 
			
		||||
        parse_inner(&paren_content)
 | 
			
		||||
    }
 | 
			
		||||
    let (evaluated_cfgs, item): (_, TokenStream) = Parser::parse2(
 | 
			
		||||
        |input: ParseStream| {
 | 
			
		||||
            if input.peek(Bracket) && input.peek2(kw::__evaluated_cfgs) {
 | 
			
		||||
                let cfgs = input.parse()?;
 | 
			
		||||
                let _: kw::__evaluated_cfgs = input.parse()?;
 | 
			
		||||
                Ok((Some(cfgs), input.parse()?))
 | 
			
		||||
            let peek = input.fork();
 | 
			
		||||
            if parse_evaluated_cfgs_attr(&peek, |_| Ok(())).is_ok() {
 | 
			
		||||
                let evaluated_cfgs = parse_evaluated_cfgs_attr(input, Cfgs::<bool>::parse)?;
 | 
			
		||||
                Ok((Some(evaluated_cfgs), input.parse()?))
 | 
			
		||||
            } else {
 | 
			
		||||
                Ok((None, input.parse()?))
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        attr,
 | 
			
		||||
        item,
 | 
			
		||||
    )?;
 | 
			
		||||
    let cfgs = if let Some(cfgs) = evaluated_cfgs {
 | 
			
		||||
        cfgs
 | 
			
		||||
| 
						 | 
				
			
			@ -1229,12 +1241,11 @@ fn hdl_main(
 | 
			
		|||
        if cfgs.cfgs_list.is_empty() {
 | 
			
		||||
            Cfgs::default()
 | 
			
		||||
        } else {
 | 
			
		||||
            let key = kw::__evaluated_cfgs::default();
 | 
			
		||||
            return Ok(quote! {
 | 
			
		||||
                ::fayalite::__cfg_expansion_helper! {
 | 
			
		||||
                    []
 | 
			
		||||
                    #cfgs
 | 
			
		||||
                    #[::fayalite::#kw:(#key #attr)] { #item }
 | 
			
		||||
                    {#[::fayalite::#kw(#attr)]} { #item }
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue