From 7ba3f96d49489aec9ff4a536c2df416287e49aca Mon Sep 17 00:00:00 2001 From: Greg Brown Date: Mon, 1 Mar 2021 13:36:55 +0000 Subject: Initial work on charsets --- src/lower/mod.rs | 56 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 26 deletions(-) (limited to 'src/lower') diff --git a/src/lower/mod.rs b/src/lower/mod.rs index dcd0f1f..45be7aa 100644 --- a/src/lower/mod.rs +++ b/src/lower/mod.rs @@ -300,17 +300,19 @@ impl Backend for RustBackend { .enumerate() .find(|(_, ty)| ty.nullable()) .map(|(idx, _)| name_parts[idx].clone()); - let (first_alts, firsts): (Vec<_>, Vec<_>) = tys - .iter() - .map(Type::first_set) - .cloned() - .enumerate() - .filter(|(_, fs)| !fs.is_empty()) - .map(|(idx, fs)| { - let fs = fs.into_iter(); - (name_parts[idx].clone(), quote! {#(Some(#fs))|*}) - }) - .unzip(); + todo!(); + // let (first_alts, firsts): (Vec<_>, Vec<_>) = tys + // .iter() + // .map(Type::first_set) + // .cloned() + // .enumerate() + // .filter(|(_, fs)| !fs.is_empty()) + // .map(|(idx, fs)| { + // let fs = fs.into_iter(); + // // (name_parts[idx].clone(), quote! {#(Some(#fs))|*}) + // todo!() + // }) + // .unzip(); let all_firsts = tys .iter() .map(Type::first_set) @@ -336,25 +338,27 @@ impl Backend for RustBackend { quote_spanned! {span=> impl Parse for #name { fn take(input: &mut P) -> Result { - match input.peek() { - #(#firsts => Ok(Self::#first_alts(input.take()?)),)* - _ => Ok(Self::#nullable(input.take()?)) - } + todo!() + // match input.peek() { + // #(#firsts => Ok(Self::#first_alts(input.take()?)),)* + // _ => Ok(Self::#nullable(input.take()?)) + // } } } } } else { - quote_spanned! {span=> - impl Parse for #name { - fn take(input: &mut P) -> Result { - match input.peek() { - #(#firsts => Ok(Self::#first_alts(input.take()?)),)* - Some(c) => Err(TakeError::BadBranch(input.pos(), c, &[#(#all_firsts),*])), - None => Err(TakeError::EndOfStream(input.pos())) - } - } - } - } + todo!() + // quote_spanned! {span=> + // impl Parse for #name { + // fn take(input: &mut P) -> Result { + // match input.peek() { + // #(#firsts => Ok(Self::#first_alts(input.take()?)),)* + // Some(c) => Err(TakeError::BadBranch(input.pos(), c, &[#(#all_firsts),*])), + // None => Err(TakeError::EndOfStream(input.pos())) + // } + // } + // } + // } }); if ids.iter().all(|id| self.can_char.contains(id)) { -- cgit v1.2.3