minor changes
This commit is contained in:
parent
4dc5bb1121
commit
7768803a99
4 changed files with 34 additions and 24 deletions
|
@ -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())]
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue