cl-typeck: Remove NameCollectable trait, use NameCollector instead :D
This commit is contained in:
		@@ -1,11 +1,11 @@
 | 
				
			|||||||
use cl_ast::{
 | 
					use cl_ast::{
 | 
				
			||||||
    ast_visitor::fold::Fold,
 | 
					    ast_visitor::{Fold, Visit},
 | 
				
			||||||
    desugar::{squash_groups::SquashGroups, while_else::WhileElseDesugar},
 | 
					    desugar::{squash_groups::SquashGroups, while_else::WhileElseDesugar},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use cl_lexer::Lexer;
 | 
					use cl_lexer::Lexer;
 | 
				
			||||||
use cl_parser::{inliner::ModuleInliner, Parser};
 | 
					use cl_parser::{inliner::ModuleInliner, Parser};
 | 
				
			||||||
use cl_typeck::{
 | 
					use cl_typeck::{
 | 
				
			||||||
    definition::Def, name_collector::NameCollectable, project::Project, type_resolver::resolve,
 | 
					    definition::Def, name_collector::NameCollector, project::Project, type_resolver::resolve,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use repline::{error::Error as RlError, prebaked::*};
 | 
					use repline::{error::Error as RlError, prebaked::*};
 | 
				
			||||||
use std::{error::Error, path};
 | 
					use std::{error::Error, path};
 | 
				
			||||||
@@ -38,8 +38,7 @@ fn main() -> Result<(), Box<dyn Error>> {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    let code = inline_modules(code, concat!(env!("PWD"), "/stdlib"));
 | 
					    let code = inline_modules(code, concat!(env!("PWD"), "/stdlib"));
 | 
				
			||||||
 | 
					    NameCollector::new(&mut prj).visit_file(unsafe { TREES.push(code) });
 | 
				
			||||||
    unsafe { TREES.push(code) }.collect_in_root(&mut prj)?;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    main_menu(&mut prj)?;
 | 
					    main_menu(&mut prj)?;
 | 
				
			||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
@@ -84,7 +83,7 @@ fn enter_code(prj: &mut Project) -> Result<(), RlError> {
 | 
				
			|||||||
        let code = inline_modules(code, "");
 | 
					        let code = inline_modules(code, "");
 | 
				
			||||||
        let code = WhileElseDesugar.fold_file(code);
 | 
					        let code = WhileElseDesugar.fold_file(code);
 | 
				
			||||||
        // Safety: this is totally unsafe
 | 
					        // Safety: this is totally unsafe
 | 
				
			||||||
        unsafe { TREES.push(code) }.collect_in_root(prj)?;
 | 
					        NameCollector::new(prj).visit_file(unsafe { TREES.push(code) });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ok(Response::Accept)
 | 
					        Ok(Response::Accept)
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,24 +8,6 @@ use crate::{
 | 
				
			|||||||
use cl_ast::{ast_visitor::Visit, *};
 | 
					use cl_ast::{ast_visitor::Visit, *};
 | 
				
			||||||
use std::mem;
 | 
					use std::mem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub trait NameCollectable<'a> {
 | 
					 | 
				
			||||||
    /// Collects the identifiers within this node,
 | 
					 | 
				
			||||||
    /// returning a new [DefID] if any were allocated,
 | 
					 | 
				
			||||||
    /// else returning the parent [DefID]
 | 
					 | 
				
			||||||
    fn collect(&'a self, c: &mut Prj<'a>, parent: DefID) -> Result<DefID, &'static str>;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fn collect_in_root(&'a self, c: &mut Prj<'a>) -> Result<DefID, &'static str> {
 | 
					 | 
				
			||||||
        self.collect(c, c.root)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'a> NameCollectable<'a> for File {
 | 
					 | 
				
			||||||
    fn collect(&'a self, prj: &mut Prj<'a>, parent: DefID) -> Result<DefID, &'static str> {
 | 
					 | 
				
			||||||
        NameCollector::with_root(prj, parent).visit_file(self);
 | 
					 | 
				
			||||||
        Ok(parent)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[derive(Debug)]
 | 
					#[derive(Debug)]
 | 
				
			||||||
pub struct NameCollector<'prj, 'a> {
 | 
					pub struct NameCollector<'prj, 'a> {
 | 
				
			||||||
    prj: &'prj mut Prj<'a>,
 | 
					    prj: &'prj mut Prj<'a>,
 | 
				
			||||||
@@ -34,9 +16,11 @@ pub struct NameCollector<'prj, 'a> {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'prj, 'a> NameCollector<'prj, 'a> {
 | 
					impl<'prj, 'a> NameCollector<'prj, 'a> {
 | 
				
			||||||
 | 
					    /// Constructs a new [NameCollector] out of a [Project](Prj)
 | 
				
			||||||
    pub fn new(prj: &'prj mut Prj<'a>) -> Self {
 | 
					    pub fn new(prj: &'prj mut Prj<'a>) -> Self {
 | 
				
			||||||
        Self { parent: prj.root, prj, retval: None }
 | 
					        Self { parent: prj.root, prj, retval: None }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    /// Constructs a new [NameCollector] out of a [Project](Prj) and a parent [DefID]
 | 
				
			||||||
    pub fn with_root(prj: &'prj mut Prj<'a>, parent: DefID) -> Self {
 | 
					    pub fn with_root(prj: &'prj mut Prj<'a>, parent: DefID) -> Self {
 | 
				
			||||||
        Self { prj, parent, retval: None }
 | 
					        Self { prj, parent, retval: None }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -56,7 +40,7 @@ impl<'prj, 'a> NameCollector<'prj, 'a> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'prj, 'a> ast_visitor::Visit<'a> for NameCollector<'prj, 'a> {
 | 
					impl<'prj, 'a> Visit<'a> for NameCollector<'prj, 'a> {
 | 
				
			||||||
    fn visit_item(&mut self, i: &'a Item) {
 | 
					    fn visit_item(&mut self, i: &'a Item) {
 | 
				
			||||||
        let Item { extents: _, attrs, vis, kind } = i;
 | 
					        let Item { extents: _, attrs, vis, kind } = i;
 | 
				
			||||||
        if let Some(def) = self.returns(kind, Self::visit_item_kind) {
 | 
					        if let Some(def) = self.returns(kind, Self::visit_item_kind) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user