From 5a2538d174fd36a8ed7f4fa344b9583fc48bd977 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Tue, 11 Feb 2020 13:12:13 +0000 Subject: Remove the Embed variant from ExprKind --- dhall/src/syntax/ast/expr.rs | 58 +++++++++++++-------------------------- dhall/src/syntax/ast/visitor.rs | 30 ++++++++------------ dhall/src/syntax/binary/decode.rs | 2 +- dhall/src/syntax/binary/encode.rs | 44 ++++++++++------------------- dhall/src/syntax/text/parser.rs | 10 ++----- dhall/src/syntax/text/printer.rs | 17 ++++++------ 6 files changed, 58 insertions(+), 103 deletions(-) (limited to 'dhall/src/syntax') diff --git a/dhall/src/syntax/ast/expr.rs b/dhall/src/syntax/ast/expr.rs index 420df5b..722630f 100644 --- a/dhall/src/syntax/ast/expr.rs +++ b/dhall/src/syntax/ast/expr.rs @@ -96,19 +96,19 @@ pub enum Builtin { // Each node carries an annotation. #[derive(Debug, Clone)] -pub struct Expr { - kind: Box, Embed>>, +pub struct Expr { + kind: Box>, span: Span, } -pub type UnspannedExpr = ExprKind, Embed>; +pub type UnspannedExpr = ExprKind; /// Syntax tree for expressions // Having the recursion out of the enum definition enables writing // much more generic code and improves pattern-matching behind // smart pointers. #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub enum ExprKind { +pub enum ExprKind { Const(Const), /// `x` /// `x@n` @@ -169,18 +169,13 @@ pub enum ExprKind { Completion(SubExpr, SubExpr), /// `./some/path` Import(Import), - /// Embeds the result of resolving an import - Embed(Embed), } -impl ExprKind { +impl ExprKind { pub fn traverse_ref_maybe_binder<'a, SE2, Err>( &'a self, visit: impl FnMut(Option<&'a Label>, &'a SE) -> Result, - ) -> Result, Err> - where - E: Clone, - { + ) -> Result, Err> { visitor::TraverseRefMaybeBinderVisitor(visit).visit(self) } @@ -188,10 +183,7 @@ impl ExprKind { &'a self, mut visit_subexpr: impl FnMut(&'a SE) -> Result, mut visit_under_binder: impl FnMut(&'a Label, &'a SE) -> Result, - ) -> Result, Err> - where - E: Clone, - { + ) -> Result, Err> { self.traverse_ref_maybe_binder(|l, x| match l { None => visit_subexpr(x), Some(l) => visit_under_binder(l, x), @@ -201,20 +193,14 @@ impl ExprKind { pub(crate) fn traverse_ref<'a, SE2, Err>( &'a self, mut visit_subexpr: impl FnMut(&'a SE) -> Result, - ) -> Result, Err> - where - E: Clone, - { + ) -> Result, Err> { self.traverse_ref_maybe_binder(|_, e| visit_subexpr(e)) } pub fn map_ref_maybe_binder<'a, SE2>( &'a self, mut map: impl FnMut(Option<&'a Label>, &'a SE) -> SE2, - ) -> ExprKind - where - E: Clone, - { + ) -> ExprKind { trivial_result(self.traverse_ref_maybe_binder(|l, x| Ok(map(l, x)))) } @@ -222,10 +208,7 @@ impl ExprKind { &'a self, mut map_subexpr: impl FnMut(&'a SE) -> SE2, mut map_under_binder: impl FnMut(&'a Label, &'a SE) -> SE2, - ) -> ExprKind - where - E: Clone, - { + ) -> ExprKind { self.map_ref_maybe_binder(|l, x| match l { None => map_subexpr(x), Some(l) => map_under_binder(l, x), @@ -235,33 +218,30 @@ impl ExprKind { pub fn map_ref<'a, SE2>( &'a self, mut map_subexpr: impl FnMut(&'a SE) -> SE2, - ) -> ExprKind - where - E: Clone, - { + ) -> ExprKind { self.map_ref_maybe_binder(|_, e| map_subexpr(e)) } } -impl Expr { - pub fn as_ref(&self) -> &UnspannedExpr { +impl Expr { + pub fn as_ref(&self) -> &UnspannedExpr { &self.kind } - pub fn kind(&self) -> &UnspannedExpr { + pub fn kind(&self) -> &UnspannedExpr { &self.kind } pub fn span(&self) -> Span { self.span.clone() } - pub fn new(kind: UnspannedExpr, span: Span) -> Self { + pub fn new(kind: UnspannedExpr, span: Span) -> Self { Expr { kind: Box::new(kind), span, } } - pub fn rewrap(&self, kind: UnspannedExpr) -> Expr { + pub fn rewrap(&self, kind: UnspannedExpr) -> Expr { Expr { kind: Box::new(kind), span: self.span.clone(), @@ -317,15 +297,15 @@ impl From