dtolnay / watt

Runtime for executing procedural macros as WebAssembly
Apache License 2.0
1.25k stars 29 forks source link

With watt's proc-macro, parsing raw identifiers causes a panic #33

Closed CAD97 closed 4 years ago

CAD97 commented 4 years ago

Without patching proc-macro2, syn::parse_str::<syn::Ident> accepts raw identifiers:

[src\main.rs:2] syn::parse_str::<syn::Ident>("r#raw") = Ok(Ident(r#raw))
The simplest possible test: ```rust pub fn main() { dbg!(syn::parse_str::("r#raw")); } ```

Hooking the same test up to run in watt, however:

error: proc-macro derive panicked
 --> demo\caller\src\main.rs:3:10
  |
3 | #[derive(Demo)]
  |          ^^^^
  |
  = help: message: panicked at '"r#raw" is not a valid Ident', D:\repos\dtolnay\watt\proc-macro\src\lib.rs:445:13  
The demo derive, patched: ```rust #[no_mangle] pub extern "C" fn demo(input: TokenStream) -> TokenStream { let input: DeriveInput = match syn::parse2(input) { Ok(input) => input, Err(err) => return err.to_compile_error(), }; let ident = input.ident; let message = format!("{:?}", syn::parse_str::("r#raw")); quote! { impl #ident { pub const MESSAGE: &'static str = #message; } } } ```