1
0
Fork 0
mirror of synced 2025-09-24 04:40:05 +00:00

minor changes

This commit is contained in:
dark64 2021-05-17 20:16:40 +02:00
parent 4dc5bb1121
commit 7768803a99
4 changed files with 34 additions and 24 deletions

View file

@ -25,15 +25,16 @@ fn import_directive_to_symbol_vec(
let span = import.span;
let source = Path::new(import.source.span.as_str());
let id = "main";
let alias = import.alias.map(|a| a.span.as_str());
let import = absy::CanonicalImport {
source,
id: absy::SymbolIdentifier::from(id).alias(import.alias.map(|a| a.span.as_str())),
id: absy::SymbolIdentifier::from(id).alias(alias),
}
.span(span.clone());
vec![absy::SymbolDeclaration {
id,
id: alias.unwrap_or(id),
symbol: absy::Symbol::Here(absy::SymbolDefinition::Import(import)),
}
.span(span.clone())]

View file

@ -92,13 +92,13 @@ impl<'ast> fmt::Display for CanonicalImport<'ast> {
#[derive(Debug, Clone, PartialEq)]
pub struct SymbolImport<'ast> {
pub module_id: OwnedModuleId,
pub symbol_id: SymbolIdentifier<'ast>,
pub symbol_id: Identifier<'ast>,
}
pub type SymbolImportNode<'ast> = Node<SymbolImport<'ast>>;
impl<'ast> SymbolImport<'ast> {
pub fn with_id_in_module<S: Into<SymbolIdentifier<'ast>>, U: Into<OwnedModuleId>>(
pub fn with_id_in_module<S: Into<Identifier<'ast>>, U: Into<OwnedModuleId>>(
symbol_id: S,
module_id: U,
) -> Self {
@ -147,7 +147,12 @@ impl<'ast> fmt::Display for SymbolDeclaration<'ast> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match &self.symbol {
Symbol::Here(ref symbol) => match symbol {
SymbolDefinition::Import(ref i) => write!(f, "{}", i),
SymbolDefinition::Import(ref i) => write!(
f,
"from \"{}\" import {}",
i.value.source.display(),
i.value.id
),
SymbolDefinition::Struct(ref t) => write!(f, "struct {} {}", self.id, t),
SymbolDefinition::Constant(ref c) => write!(
f,
@ -158,7 +163,13 @@ impl<'ast> fmt::Display for SymbolDeclaration<'ast> {
write!(f, "def {}{}", self.id, func)
}
},
Symbol::There(ref i) => write!(f, "{}", i),
Symbol::There(ref i) => write!(
f,
"from \"{}\" import {} as {}",
i.value.module_id.display(),
i.value.symbol_id,
self.id
),
Symbol::Flat(ref flat_fun) => {
write!(f, "def {}{}:\n\t// hidden", self.id, flat_fun.signature())
}

View file

@ -66,16 +66,16 @@ impl Importer {
modules: &mut HashMap<OwnedModuleId, Module<'ast>>,
arena: &'ast Arena<String>,
) -> Result<Module<'ast>, CompileErrors> {
let mut symbols: Vec<_> = vec![];
for symbol in destination.symbols {
match symbol.value.symbol {
Symbol::Here(SymbolDefinition::Import(import)) => symbols.push(
Importer::resolve::<T, E>(import, &location, resolver, modules, arena)?,
),
_ => symbols.push(symbol),
}
}
let symbols: Vec<_> = destination
.symbols
.into_iter()
.map(|s| match s.value.symbol {
Symbol::Here(SymbolDefinition::Import(import)) => {
Importer::resolve::<T, E>(import, &location, resolver, modules, arena)
}
_ => Ok(s),
})
.collect::<Result<_, _>>()?;
Ok(Module::with_symbols(symbols))
}

View file

@ -572,8 +572,6 @@ impl<'ast, T: Field> Checker<'ast, T> {
match Checker::new().check_module(&import.module_id, state) {
Ok(()) => {
let symbol_id = import.symbol_id.get_alias();
// find candidates in the checked module
let function_candidates: Vec<_> = state
.typed_modules
@ -581,10 +579,10 @@ impl<'ast, T: Field> Checker<'ast, T> {
.unwrap()
.functions
.iter()
.filter(|(k, _)| k.id == symbol_id)
.filter(|(k, _)| k.id == import.symbol_id)
.map(|(_, v)| DeclarationFunctionKey {
module: import.module_id.to_path_buf(),
id: symbol_id,
id: import.symbol_id,
signature: v.signature(&state.typed_modules).clone(),
})
.collect();
@ -594,7 +592,7 @@ impl<'ast, T: Field> Checker<'ast, T> {
.types
.entry(import.module_id.to_path_buf())
.or_default()
.get(symbol_id)
.get(import.symbol_id)
.cloned();
// find constant definition candidate
@ -602,7 +600,7 @@ impl<'ast, T: Field> Checker<'ast, T> {
.constants
.entry(import.module_id.to_path_buf())
.or_default()
.get(symbol_id)
.get(import.symbol_id)
.cloned();
match (function_candidates.len(), type_candidate, const_candidate) {
@ -655,7 +653,7 @@ impl<'ast, T: Field> Checker<'ast, T> {
}});
}
true => {
constants.insert(declaration.id, TypedConstantSymbol::There(import.module_id.to_path_buf(), symbol_id));
constants.insert(declaration.id, TypedConstantSymbol::There(import.module_id.to_path_buf(), import.symbol_id));
self.insert_into_scope(Variable::with_id_and_type(declaration.id, ty.clone()));
state
@ -671,7 +669,7 @@ impl<'ast, T: Field> Checker<'ast, T> {
pos: Some(pos),
message: format!(
"Could not find symbol {} in module {}",
symbol_id, import.module_id.display(),
import.symbol_id, import.module_id.display(),
),
}.in_file(module_id));
}