@@ -108,7 +108,7 @@ impl ParserImpl {
108108
109109 let state_token = StateToken :: new ( ) ;
110110 let state = state_token. to_ident ( ) ;
111- let parser = self . parser . expand ( state_token) ?;
111+ let parser = self . parser . expand ( state_token, ctx ) ?;
112112 let parse_impl = quote ! {
113113 fn parse_impl(
114114 & self ,
@@ -200,11 +200,16 @@ impl ParserImpl {
200200}
201201
202202impl Parsing {
203- pub fn expand ( self , state_token : StateToken ) -> Result < TokenStream , TokenStream > {
203+ pub fn expand (
204+ self ,
205+ state_token : StateToken ,
206+ ctx : & Context ,
207+ ) -> Result < TokenStream , TokenStream > {
204208 let mut result = TokenStream :: new ( ) ;
205209 let span = self . span ;
206210 let state = state_token. to_ident ( ) ;
207211 let value = self . result ( ) ;
212+ let crate_name = & ctx. crate_name ;
208213 for ( value, op) in self . into_iter ( ) {
209214 let value = value. to_ident ( ) ;
210215 let op = match op {
@@ -213,10 +218,10 @@ impl Parsing {
213218 syn:: Lit :: Str ( lit_str) => {
214219 quote_spanned ! { span => #state. parse_str( #lit_str) }
215220 }
216- syn:: Lit :: Char ( lit_char ) => {
217- quote_spanned ! { span => #state . parse_char ( #lit_char ) }
218- }
219- syn :: Lit :: Int ( _ ) | syn :: Lit :: Float ( _ ) | syn:: Lit :: Bool ( _) => {
221+ syn:: Lit :: Char ( _ )
222+ | syn :: Lit :: Int ( _ )
223+ | syn :: Lit :: Float ( _ )
224+ | syn:: Lit :: Bool ( _) => {
220225 quote_spanned ! { span => #state. parse_literal( #c) }
221226 }
222227 _ => {
@@ -248,7 +253,7 @@ impl Parsing {
248253 }
249254 ParseOp :: Then { prev, next } => {
250255 let prev = prev. to_ident ( ) ;
251- let next = next. expand ( state_token) ?;
256+ let next = next. expand ( state_token, ctx ) ?;
252257 quote_spanned ! { span =>
253258 let #value = match #prev {
254259 Ok ( v1) => #next. map( |v2| ( v1, v2) ) ,
@@ -258,7 +263,7 @@ impl Parsing {
258263 }
259264 ParseOp :: ThenIgnore { prev, next } => {
260265 let prev = prev. to_ident ( ) ;
261- let next = next. expand ( state_token) ?;
266+ let next = next. expand ( state_token, ctx ) ?;
262267 quote_spanned ! { span =>
263268 let #value = match #prev {
264269 Ok ( v) => #next. map( |_| v) ,
@@ -268,7 +273,7 @@ impl Parsing {
268273 }
269274 ParseOp :: IgnoreThen { prev, next } => {
270275 let prev = prev. to_ident ( ) ;
271- let next = next. expand ( state_token) ?;
276+ let next = next. expand ( state_token, ctx ) ?;
272277 quote_spanned ! { span =>
273278 let #value = match #prev {
274279 Ok ( _) => #next,
@@ -279,7 +284,7 @@ impl Parsing {
279284 ParseOp :: Repeat { parser, at_least } => {
280285 let fork_token = state_token. fork ( ) ;
281286 let fork = fork_token. to_ident ( ) ;
282- let parser = parser. expand ( fork_token) ?;
287+ let parser = parser. expand ( fork_token, ctx ) ?;
283288 let repeat = quote_spanned ! { span =>
284289 let #fork = & mut #state. fork( ) ;
285290 let mut results = vec![ ] ;
@@ -291,7 +296,7 @@ impl Parsing {
291296 if at_least == 0 {
292297 quote_spanned ! { span =>
293298 #repeat
294- let #value = Ok ( results) ;
299+ let #value: :: std :: result :: Result <_ , #crate_name :: Error > = Ok ( results) ;
295300 }
296301 } else {
297302 quote_spanned ! { span =>
@@ -305,13 +310,13 @@ impl Parsing {
305310 }
306311 }
307312 ParseOp :: Optional { parser } => {
308- let parser = parser. expand ( state_token) ?;
313+ let parser = parser. expand ( state_token, ctx ) ?;
309314 quote_spanned ! { span => let #value = #parser. ok( ) ; }
310315 }
311316 ParseOp :: LookAhead { parser } => {
312317 let fork_token = state_token. fork ( ) ;
313318 let fork = fork_token. to_ident ( ) ;
314- let parser = parser. expand ( fork_token) ?;
319+ let parser = parser. expand ( fork_token, ctx ) ?;
315320 quote_spanned ! { span =>
316321 let #fork = & mut #state. fork( ) ;
317322 let #value = #parser. map( |_| ( ) ) ;
@@ -320,7 +325,7 @@ impl Parsing {
320325 ParseOp :: LookAheadNot { parser } => {
321326 let fork_token = state_token. fork ( ) ;
322327 let fork = fork_token. to_ident ( ) ;
323- let parser = parser. expand ( fork_token) ?;
328+ let parser = parser. expand ( fork_token, ctx ) ?;
324329 quote_spanned ! { span =>
325330 let #fork = & mut #state. fork( ) ;
326331 let #value = if let Ok ( value) = #parser {
@@ -335,7 +340,7 @@ impl Parsing {
335340 let fork = fork_token. to_ident ( ) ;
336341 let parsers = parsers
337342 . into_iter ( )
338- . map ( |p| p. expand ( fork_token) )
343+ . map ( |p| p. expand ( fork_token, ctx ) )
339344 . collect :: < Result < Vec < _ > , _ > > ( ) ?;
340345 quote_spanned ! { span =>
341346 let mut fork;
0 commit comments