From 4acbd704e02cc53a1ca70de572a27f0efccd6413 Mon Sep 17 00:00:00 2001 From: Kasey White Date: Mon, 25 Jul 2022 23:56:18 -0400 Subject: [PATCH] fix compilation issue --- crates/uplc/src/machine.rs | 41 ++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/crates/uplc/src/machine.rs b/crates/uplc/src/machine.rs index 0007f7ab..388a7d05 100644 --- a/crates/uplc/src/machine.rs +++ b/crates/uplc/src/machine.rs @@ -160,44 +160,41 @@ impl Machine { env: Vec, term: Term, ) -> Term { - let mut lam_cnt = 0; - let mut term = term; - - loop { - match term { + fn rec( + lam_cnt: usize, + t: Term, + this: &mut Machine, + env: &[Value], + ) -> Term { + match t { Term::Var(name) => { let index: usize = name.index.into(); if lam_cnt >= index { - return Term::Var(name); + Term::Var(name) } else { - return env - .get::(index - lam_cnt) + env.get::(env.len() - (index - lam_cnt)) .cloned() - .map_or(Term::Var(name), |v| self.discharge_value(v)); + .map_or(Term::Var(name), |v| this.discharge_value(v)) } } Term::Lambda { parameter_name, body, - } => { - term = *body; - lam_cnt += 1; - - return Term::Lambda { - parameter_name, - body: Box::new(rec(lam_cnt + 1, *body, env, this)), - }; - } + } => Term::Lambda { + parameter_name, + body: Box::new(rec(lam_cnt + 1, *body, this, env)), + }, Term::Apply { function, argument } => Term::Apply { - function: Box::new(rec(lam_cnt, *function, env, this)), - argument: Box::new(rec(lam_cnt, *argument, env, this)), + function: Box::new(rec(lam_cnt, *function, this, env)), + argument: Box::new(rec(lam_cnt, *argument, this, env)), }, - Term::Delay(x) => Term::Delay(Box::new(rec(lam_cnt, *x, env, this))), - Term::Force(x) => Term::Force(Box::new(rec(lam_cnt, *x, env, this))), + Term::Delay(x) => Term::Delay(Box::new(rec(lam_cnt, *x, this, env))), + Term::Force(x) => Term::Force(Box::new(rec(lam_cnt, *x, this, env))), rest => rest, } } + rec(0, term, self, &env) } fn force_evaluate(