(&self, wc: &mut WhereCollector)
| 762 | } |
| 763 | |
| 764 | fn hoisted_preloop(&self, wc: &mut WhereCollector) -> TokenStream { |
| 765 | let atom_preloop = match self.shared_fields.as_slice() { |
| 766 | [] => TokenStream::new(), |
| 767 | [field] => { |
| 768 | let inner = field.atom_parse_if_peek(); |
| 769 | quote! { { let c = p.peek_n(1); #inner } } |
| 770 | } |
| 771 | _ => { |
| 772 | let parse_steps: TokenStream = self.shared_fields.iter().map(|f| f.atom_match_arm()).collect(); |
| 773 | quote! { |
| 774 | loop { |
| 775 | let c = p.peek_n(1); |
| 776 | #parse_steps |
| 777 | break; |
| 778 | } |
| 779 | } |
| 780 | } |
| 781 | }; |
| 782 | |
| 783 | let type_preloop = if self.shared_type_fields.is_empty() { |
| 784 | TokenStream::new() |
| 785 | } else { |
| 786 | let parse_steps: TokenStream = self |
| 787 | .shared_type_fields |
| 788 | .iter() |
| 789 | .map(|f| f.parse_normal_tokens(FieldParseMode::OneMustOccur, wc)) |
| 790 | .collect(); |
| 791 | quote! { |
| 792 | loop { |
| 793 | let c = p.peek_n(1); |
| 794 | #parse_steps |
| 795 | break; |
| 796 | } |
| 797 | } |
| 798 | }; |
| 799 | |
| 800 | quote! { #atom_preloop #type_preloop } |
| 801 | } |
| 802 | } |
| 803 | |
| 804 | /// Shared-prefix plan: variants in a `PeekedFallback` group all start with the |
no test coverage detected