use std::path::Path;
pub(crate) fn ensure_builtin_signatures_installed() {
harn_parser::install_builtin_manifest(harn_vm::stdlib::all_builtin_manifest());
}
pub(crate) fn compiler_for_source(path: &Path, source: &str) -> harn_vm::Compiler {
let base = if trusted_host_dispatch_for_source(path) {
harn_vm::Compiler::new_trusted_host_dispatch()
} else {
harn_vm::Compiler::new()
};
base.with_imported_enum_candidates(imported_enum_candidates_for_source(path, source))
}
pub(crate) fn trusted_host_dispatch_for_source(path: &Path) -> bool {
let absolute = path
.canonicalize()
.unwrap_or_else(|_| std::env::current_dir().unwrap_or_default().join(path));
crate::package::load_check_config(Some(&absolute)).trusted_host_dispatch
}
pub(crate) fn imported_enum_candidates_for_source(path: &Path, source: &str) -> Vec<String> {
let mut candidates = harn_modules::build_with_source(path, source)
.imported_names_by_kind_for_file(path, harn_modules::DefKind::Enum)
.unwrap_or_default();
let mut candidates = candidates.drain().collect::<Vec<_>>();
candidates.sort_unstable();
candidates
}
pub(crate) fn compiler_with_imported_enum_candidates(
candidates: impl IntoIterator<Item = String>,
) -> harn_vm::Compiler {
harn_vm::Compiler::new().with_imported_enum_candidates(candidates)
}