diff options
author | Nadrieril | 2020-02-18 19:12:31 +0000 |
---|---|---|
committer | Nadrieril | 2020-02-19 17:09:18 +0000 |
commit | 7cbfc1a0d32766a383d1f48902502adaa2234d2f (patch) | |
tree | e668b7f764fb4981a802bc619e0b2ff62fa9ce16 /dhall/src/semantics/resolve/hir.rs | |
parent | a3990858840a737d7831be45953b38bd67361fb7 (diff) |
Avoid re-typechecking after import
Diffstat (limited to '')
-rw-r--r-- | dhall/src/semantics/resolve/hir.rs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/dhall/src/semantics/resolve/hir.rs b/dhall/src/semantics/resolve/hir.rs index 73fc371..2f3464a 100644 --- a/dhall/src/semantics/resolve/hir.rs +++ b/dhall/src/semantics/resolve/hir.rs @@ -1,5 +1,5 @@ use crate::error::TypeError; -use crate::semantics::{type_with, NameEnv, Nir, NzEnv, Tir, TyEnv}; +use crate::semantics::{type_with, NameEnv, Nir, NzEnv, Tir, TyEnv, Type}; use crate::syntax::{Expr, ExprKind, Span, V}; use crate::{NormalizedExpr, ToExprOptions}; @@ -13,6 +13,8 @@ pub struct AlphaVar { pub(crate) enum HirKind { /// A resolved variable (i.e. a DeBruijn index) Var(AlphaVar), + /// Result of resolving an import. + Import(Hir, Type), // Forbidden ExprKind variants: Var, Import, Completion Expr(ExprKind<Hir>), } @@ -96,6 +98,9 @@ fn hir_to_expr( let kind = match hir.kind() { HirKind::Var(v) if opts.alpha => ExprKind::Var(V("_".into(), v.idx())), HirKind::Var(v) => ExprKind::Var(env.label_var(v)), + HirKind::Import(hir, _) => { + return hir_to_expr(hir, opts, &mut NameEnv::new()) + } HirKind::Expr(e) => { let e = e.map_ref_maybe_binder(|l, hir| { if let Some(l) = l { |