diff --git a/use-based-refs/interpreter/src/eval.rs b/use-based-refs/interpreter/src/eval.rs index 422ce90d43cb77fd7c787f7cc4cd9923e31ae5e4..f185d54a2ff155caed89233582f7c827636bd360 100644 --- a/use-based-refs/interpreter/src/eval.rs +++ b/use-based-refs/interpreter/src/eval.rs @@ -20,12 +20,9 @@ fn eval_ctx(ast: Node, ctx: &mut HashMap<String, Value>) -> Result<Value> { ctx.insert(ident.clone(), value); Value::Unit } - crate::Node::Ident(ident) => ctx - .get(&ident) - .ok_or(Error::Eval(format!( - "Ident error: `{ident}` is not defined" - )))? - .clone(), + crate::Node::Ident(ident) => *ctx.get(&ident).ok_or(Error::Eval(format!( + "Ident error: `{ident}` is not defined" + )))?, }) } diff --git a/use-based-refs/interpreter/src/lib.rs b/use-based-refs/interpreter/src/lib.rs index 0c724e5d76cd08ab5815b077a223eb64ba7ef48e..4b2b8890012eaa24d745c3345b1b8f47a31f65ed 100644 --- a/use-based-refs/interpreter/src/lib.rs +++ b/use-based-refs/interpreter/src/lib.rs @@ -27,7 +27,7 @@ pub enum Node { } /// `λ_UR` value, result of a computation. -#[derive(Debug, PartialEq, Eq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone, Copy)] pub enum Value { Num(u32), Unit, diff --git a/use-based-refs/interpreter/src/typecheck.rs b/use-based-refs/interpreter/src/typecheck.rs index 659533b6fb5e1e9a46086c04ab91bc1856b082a3..15c7186ba555d9db22456dfd988ffea93036c025 100644 --- a/use-based-refs/interpreter/src/typecheck.rs +++ b/use-based-refs/interpreter/src/typecheck.rs @@ -13,7 +13,7 @@ fn typecheck_ctx(ast: &Node, ctx: &mut HashMap<String, Type>) -> Result<Type> { // because a Seq contains at least one element .try_fold(Type::Diverging, |_, n| typecheck_ctx(n, ctx))?, Node::Let { ident, expr, ty } => { - let expr_ty = typecheck_ctx(&expr, ctx)?; + let expr_ty = typecheck_ctx(expr, ctx)?; // If we have some type annotation, it may not be different from the type of `expr` if let Some(true) = ty.map(|ty| ty != expr_ty) { return Err(Error::Type(format!( @@ -27,10 +27,9 @@ fn typecheck_ctx(ast: &Node, ctx: &mut HashMap<String, Type>) -> Result<Type> { ))))?; Type::Unit } - Node::Ident(ident) => ctx + Node::Ident(ident) => *ctx .get(ident) - .ok_or(Error::Name(format!("`{ident}` is not defined")))? - .clone(), + .ok_or(Error::Name(format!("`{ident}` is not defined")))?, }) }