@@ -11,14 +11,14 @@ pub fn lex_arrow(
11
11
errormsg : & str ,
12
12
) {
13
13
match iter. next ( ) . unwrap ( ) {
14
- proc_macro :: TokenTree :: Group ( x, ..) => {
14
+ TokenTree :: Group ( x, ..) => {
15
15
let mut left_name = TokenStream :: new ( ) ;
16
16
let mut right_name = TokenStream :: new ( ) ;
17
17
let mut control_which_put = false ;
18
18
let mut iter = x. stream ( ) . into_iter ( ) ;
19
19
while let Some ( i) = iter. next ( ) {
20
20
// println!("{}", i);
21
- if let proc_macro :: TokenTree :: Punct ( x) = i {
21
+ if let TokenTree :: Punct ( x) = i {
22
22
let x = x. to_string ( ) ;
23
23
if x == "=" {
24
24
check_next_iter ( & mut iter, ">" ) ;
@@ -31,19 +31,17 @@ pub fn lex_arrow(
31
31
left_name = TokenStream :: new ( ) ;
32
32
right_name = TokenStream :: new ( ) ;
33
33
control_which_put = false ;
34
- } else if x == "]" {
35
- left_push. push ( syn:: parse ( left_name) . expect ( "left push break" ) ) ;
36
- right_push. push ( syn:: parse ( right_name) . expect ( "right push break" ) ) ;
37
- break ;
38
- }
39
- } else {
40
- if !control_which_put {
41
- left_name. extend ( std:: iter:: once ( i) ) ;
42
34
} else {
43
- right_name . extend ( std :: iter :: once ( i ) ) ;
35
+ panic ! ( "{}" , errormsg ) ;
44
36
}
37
+ } else if !control_which_put {
38
+ left_name. extend ( std:: iter:: once ( i) ) ;
39
+ } else {
40
+ right_name. extend ( std:: iter:: once ( i) ) ;
45
41
}
46
42
}
43
+ left_push. push ( syn:: parse ( left_name) . expect ( "left push break" ) ) ;
44
+ right_push. push ( syn:: parse ( right_name) . expect ( "right push break" ) ) ;
47
45
}
48
46
_ => {
49
47
panic ! ( "{}" , errormsg) ;
@@ -53,7 +51,7 @@ pub fn lex_arrow(
53
51
54
52
fn check_next_iter ( iter : & mut IntoIter , check_str : & str ) {
55
53
if let Some ( i) = iter. next ( ) {
56
- if let proc_macro :: TokenTree :: Punct ( x) = i {
54
+ if let TokenTree :: Punct ( x) = i {
57
55
if x. to_string ( ) != check_str {
58
56
panic ! ( "expected {}" , check_str) ;
59
57
}
@@ -75,12 +73,12 @@ pub fn def_impl(content: TokenStream) -> TokenStream {
75
73
let mut submodules = vec ! [ ] ;
76
74
while let Some ( i) = iter. next ( ) {
77
75
match i {
78
- proc_macro :: TokenTree :: Ident ( x) => {
76
+ TokenTree :: Ident ( x) => {
79
77
let x = x. to_string ( ) ;
80
78
if x == "module_name" {
81
79
check_next_iter ( & mut iter, "=" ) ;
82
80
if let TokenTree :: Ident ( tmp) = iter. next ( ) . expect ( "name is expected" ) {
83
- if let Some ( _ ) = module_ident {
81
+ if module_ident . is_some ( ) {
84
82
panic ! ( "double defined" ) ;
85
83
}
86
84
module_ident =
@@ -106,14 +104,14 @@ pub fn def_impl(content: TokenStream) -> TokenStream {
106
104
) ;
107
105
} else if x == "submodules" {
108
106
check_next_iter ( & mut iter, "=" ) ;
109
- if let proc_macro :: TokenTree :: Group ( x, ..) = iter. next ( ) . unwrap ( ) {
107
+ if let TokenTree :: Group ( x, ..) = iter. next ( ) . unwrap ( ) {
110
108
// println!("{}", x);
111
109
let mut iter = x. stream ( ) . into_iter ( ) ;
112
- while let Some ( i ) = iter. next ( ) {
113
- if let proc_macro :: TokenTree :: Ident ( x) = i {
110
+ for i in iter {
111
+ if let TokenTree :: Ident ( x) = i {
114
112
submodules
115
113
. push ( syn:: parse_str :: < syn:: Ident > ( & ( x. to_string ( ) ) ) . unwrap ( ) ) ;
116
- } else if let proc_macro :: TokenTree :: Ident ( x) = i {
114
+ } else if let TokenTree :: Ident ( x) = i {
117
115
let x = x. to_string ( ) ;
118
116
if x != "," {
119
117
panic ! ( "expected ,.get {}" , x) ;
@@ -127,7 +125,7 @@ pub fn def_impl(content: TokenStream) -> TokenStream {
127
125
}
128
126
}
129
127
}
130
- proc_macro :: TokenTree :: Punct ( x) => {
128
+ TokenTree :: Punct ( x) => {
131
129
if x. to_string ( ) != "," {
132
130
panic ! ( "expected ," ) ;
133
131
}
@@ -147,15 +145,19 @@ pub fn def_impl(content: TokenStream) -> TokenStream {
147
145
use std:: collections:: hash_map:: HashMap ;
148
146
let mut functions = HashMap :: new( ) ;
149
147
let mut classes = HashMap :: new( ) ;
148
+ let mut submodules = HashMap :: new( ) ;
150
149
#(
151
150
functions. insert( stringify!( #right_func) . to_string( ) , #left_func( ) ) ;
152
151
) *
153
152
#(
154
153
classes. insert( stringify!( #right_class) . to_string( ) , #left_class:: export_info( ) ) ;
155
154
) *
155
+ #(
156
+ submodules. insert( stringify!( #submodules) . to_string( ) , #submodules:: init( ) ) ;
157
+ ) *
156
158
Stdlib :: new(
157
159
stringify!( #module_ident) ,
158
- HashMap :: new ( ) ,
160
+ submodules ,
159
161
functions,
160
162
classes
161
163
)
0 commit comments