diff options
author | Nadrieril | 2019-04-11 19:04:19 +0200 |
---|---|---|
committer | Nadrieril | 2019-04-11 19:04:19 +0200 |
commit | a4ef23fd3e7a053def648dca05dfc9a043af9860 (patch) | |
tree | b74c33df5699313380335aa3ef2e1dbd4af23c5a /dhall/src/imports.rs | |
parent | 61b2ac7fb35c2a8aca703d5a5f9a9a8f28def977 (diff) |
Respect import boundaries
Closes #54
Diffstat (limited to 'dhall/src/imports.rs')
-rw-r--r-- | dhall/src/imports.rs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/dhall/src/imports.rs b/dhall/src/imports.rs index e42bfec..b5546b2 100644 --- a/dhall/src/imports.rs +++ b/dhall/src/imports.rs @@ -21,7 +21,7 @@ pub enum ImportRoot { fn resolve_import( import: &Import, root: &ImportRoot, -) -> Result<Resolved, ImportError> { +) -> Result<Normalized, ImportError> { use self::ImportRoot::*; use dhall_core::FilePrefix::*; use dhall_core::ImportLocation::*; @@ -44,24 +44,24 @@ fn resolve_import( } } -fn load_import(f: &Path) -> Result<Resolved, Error> { - Ok(Parsed::parse_file(f)?.resolve()?) +fn load_import(f: &Path) -> Result<Normalized, Error> { + Ok(Parsed::parse_file(f)?.resolve()?.typecheck()?.normalize()) } fn resolve_expr( Parsed(expr, root): Parsed, allow_imports: bool, ) -> Result<Resolved, ImportError> { - let resolve = |import: &Import| -> Result<SubExpr<X, X>, ImportError> { + let resolve = |import: &Import| -> Result<Normalized, ImportError> { if allow_imports { let expr = resolve_import(import, &root)?; - Ok(expr.0) + Ok(expr) } else { Err(ImportError::UnexpectedImport(import.clone())) } }; let expr = expr.as_ref().traverse_embed(&resolve)?; - Ok(Resolved(expr.squash_embed())) + Ok(Resolved(rc(expr))) } impl Parsed { |