@@ -58,56 +58,3 @@ use proc_macro::TokenStream;
58
58
pub fn or_gen ( _attr : TokenStream , item : TokenStream ) -> TokenStream {
59
59
parser:: MacroParser :: parse ( item)
60
60
}
61
-
62
- #[ proc_macro]
63
- pub fn my_first_proc_macro ( item : TokenStream ) -> TokenStream {
64
- item
65
- }
66
-
67
- use proc_macro:: TokenStream ;
68
- use quote:: quote;
69
- use syn:: * ;
70
-
71
- #[ proc_macro_attribute]
72
- pub fn add_print ( _attr : TokenStream , item : TokenStream ) -> TokenStream {
73
- // 入力をItemFn(関数を表現する構文木データ型に変換)
74
- let input: ItemFn = parse_macro_input ! ( item as ItemFn ) ;
75
- // 関数名を取得
76
- let name = & input. sig . ident ;
77
- // 関数のブロックを取得
78
- let block = & input. block ;
79
-
80
- // quoteマクロでproc_macro2::TokenStreamを生成
81
- let expanded: proc_macro2:: TokenStream = quote ! {
82
- fn #name( ) {
83
- println!( "Function {} is called" , stringify!( #name) ) ;
84
- #block
85
- }
86
- } ;
87
-
88
- // proc_macro2::TokenStreamからTokenStreamに変換
89
- TokenStream :: from ( expanded)
90
- }
91
-
92
- use proc_macro:: { TokenStream , TokenTree } ;
93
-
94
- #[ proc_macro_attribute]
95
- pub fn log ( attr : TokenStream , item : TokenStream ) -> TokenStream {
96
- let mut iter = item. into_iter ( ) ;
97
-
98
- if let Some ( TokenTree :: Ident ( ident) ) = iter. next ( ) {
99
- let func_name = ident. to_string ( ) ;
100
- let rest_of_stream: TokenStream = iter. collect ( ) ;
101
-
102
- let new_stream = format ! (
103
- "fn {}() {{ println!(\" Function '{}' called\" ); {} }}" ,
104
- func_name, func_name, rest_of_stream
105
- ) ;
106
- new_stream. parse ( ) . unwrap ( )
107
- } else {
108
- // トークンストリームが関数宣言でない場合はエラー
109
- "compile_error!(\" Expected function declaration\" )"
110
- . parse ( )
111
- . unwrap ( )
112
- }
113
- }
0 commit comments