cl-interpret: Stage items within a file in resolution order.

TODO: Does this even help???
This commit is contained in:
John 2025-02-23 03:21:34 -06:00
parent 632ddf0eab
commit d9ac9e628d

View File

@ -22,18 +22,19 @@ impl Interpret for File {
fn interpret(&self, env: &mut Environment) -> IResult<ConValue> { fn interpret(&self, env: &mut Environment) -> IResult<ConValue> {
/// Sorts items /// Sorts items
#[derive(Debug, Default)] #[derive(Debug, Default)]
struct ItemSorter<'ast>(pub [Vec<&'ast Item>; 6]); struct ItemSorter<'ast>(pub [Vec<&'ast Item>; 8]);
impl<'ast> Visit<'ast> for ItemSorter<'ast> { impl<'ast> Visit<'ast> for ItemSorter<'ast> {
fn visit_item(&mut self, i: &'ast Item) { fn visit_item(&mut self, i: &'ast Item) {
self.0[match &i.kind { for stage in match &i.kind {
ItemKind::Module(_) => 0, ItemKind::Module(_) => [0].as_slice(),
ItemKind::Use(_) => 1, ItemKind::Use(_) => &[1, 6],
ItemKind::Enum(_) | ItemKind::Struct(_) | ItemKind::Alias(_) => 2, ItemKind::Enum(_) | ItemKind::Struct(_) | ItemKind::Alias(_) => &[2],
ItemKind::Function(_) => 3, ItemKind::Function(_) => &[3, 7],
ItemKind::Impl(_) => 4, ItemKind::Impl(_) => &[4],
ItemKind::Const(_) | ItemKind::Static(_) => 5, ItemKind::Const(_) | ItemKind::Static(_) => &[5],
}] } {
.push(i) self.0[*stage].push(i)
}
} }
} }