I got this error when I executed a macro created by proc-macro, my error :
error: proc macro panicked
--> src/main.rs:16:5
|
16 | load_extension_parser!(B);
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: message: use-after-free of `proc_macro` symbol
main.rs
use extension_popper::load_all_extension_parser;
use popper;
use popper::extension::ExtensionParser;
use popper::parser::Parser;
use popper::ast::expr::{Expr, ExprType};
#[extension_parser(B)]
fn a(parser: &mut Parser) -> Expr {
Expr::new(Box::new(ExprType::Eof), 0..1, String::new())
}
fn main() {
load_extension_parser!(B);
B.parse(&mut popper::parser::Parser::new(Vec::new(), String::new()));
}
code of my macro
#[proc_macro_error]
#[proc_macro]
pub fn load_extension_parser(item: TokenStream) -> TokenStream {
let mut input = parse_macro_input!(item as Ident);
unsafe {
if EXTENSIONS.contains(&input) {
return TokenStream::from(quote! {
let mut parser = popper::parser::Parser::new();
parser.add_extension(Box::new(&mut #input));
})
} else {
panic!("Extension not found");
}
}
}
I was trying to add an extension to my parser with the macro load_extension_parser
but it gives the error