summaryrefslogtreecommitdiff
path: root/dhall/src/semantics/resolve/resolve.rs
diff options
context:
space:
mode:
authorNadrieril2020-12-07 17:48:20 +0000
committerNadrieril2020-12-07 19:35:13 +0000
commit7a392b07166c089979e69d4c8a68da3298964c28 (patch)
tree3a861160e7d4b379904dbed891bb684de0ad26bc /dhall/src/semantics/resolve/resolve.rs
parentf478bc16a3b8414770d84dd87f3e46b869d31750 (diff)
Defer name errors to typechecking
We aren't supposed to inspect anything before alternatives are chosen
Diffstat (limited to 'dhall/src/semantics/resolve/resolve.rs')
-rw-r--r--dhall/src/semantics/resolve/resolve.rs9
1 files changed, 4 insertions, 5 deletions
diff --git a/dhall/src/semantics/resolve/resolve.rs b/dhall/src/semantics/resolve/resolve.rs
index 7450825..c4cd518 100644
--- a/dhall/src/semantics/resolve/resolve.rs
+++ b/dhall/src/semantics/resolve/resolve.rs
@@ -377,11 +377,7 @@ fn traverse_resolve_expr<'cx>(
Ok(match expr.kind() {
ExprKind::Var(var) => match name_env.unlabel_var(&var) {
Some(v) => Hir::new(HirKind::Var(v), expr.span()),
- None => mkerr(
- ErrorBuilder::new(format!("unbound variable `{}`", var))
- .span_err(expr.span(), "not found in this scope")
- .format(),
- )?,
+ None => Hir::new(HirKind::MissingVar(var.clone()), expr.span()),
},
ExprKind::Op(OpKind::BinOp(BinOp::ImportAlt, l, r)) => {
match traverse_resolve_expr(name_env, l, f) {
@@ -492,6 +488,8 @@ fn resolve_with_env<'cx>(
Ok(Resolved(resolved))
}
+/// Resolves all imports and names. Returns errors if importing failed. Name errors are deferred to
+/// typechecking.
pub fn resolve<'cx>(
cx: Ctxt<'cx>,
parsed: Parsed,
@@ -499,6 +497,7 @@ pub fn resolve<'cx>(
resolve_with_env(&mut ImportEnv::new(cx), parsed)
}
+/// Resolves names and errors if we find any imports.
pub fn skip_resolve<'cx>(
cx: Ctxt<'cx>,
parsed: Parsed,