34 lines
880 B
Rust
34 lines
880 B
Rust
#![feature(proc_macro_quote, proc_macro_span)]
|
|
|
|
extern crate proc_macro;
|
|
|
|
use proc_macro::{Ident, Literal, Span, TokenStream, TokenTree, quote};
|
|
|
|
#[proc_macro]
|
|
pub fn bad_tup_indexing(input: TokenStream) -> TokenStream {
|
|
let tt = input.into_iter().next().unwrap();
|
|
let TokenTree::Literal(indexing_expr) = tt else {
|
|
unreachable!();
|
|
};
|
|
quote! { (42,).$indexing_expr }
|
|
}
|
|
|
|
// Expects {IDENT, COMMA, LITERAL}
|
|
#[proc_macro]
|
|
pub fn bad_tup_struct_indexing(input: TokenStream) -> TokenStream {
|
|
let mut input = input.into_iter();
|
|
|
|
let ident = input.next().unwrap();
|
|
let _comma = input.next().unwrap();
|
|
let lit = input.next().unwrap();
|
|
|
|
let TokenTree::Ident(ident) = ident else {
|
|
unreachable!("id");
|
|
};
|
|
let TokenTree::Literal(indexing_expr) = lit else {
|
|
unreachable!("lit");
|
|
};
|
|
|
|
quote! { $ident.$indexing_expr }
|
|
}
|