use crate::{Cursor, KindSet, Parse, Parser, Result};
use bumpalo::collections::Vec;
pub trait PreludeList<'a>: Sized + Parse<'a> {
type PreludeItem: Parse<'a>;
const STOP_TOKENS: KindSet = KindSet::LEFT_CURLY_OR_SEMICOLON;
fn parse_prelude_list<I>(p: &mut Parser<'a, I>) -> Result<Vec<'a, Self::PreludeItem>>
where
I: Iterator<Item = Cursor> + Clone,
{
let mut items = Vec::new_in(p.bump());
loop {
items.push(p.parse::<Self::PreludeItem>()?);
if p.peek_n(1) == Self::STOP_TOKENS {
return Ok(items);
}
}
}
}