From: Mark Thom Date: Mon, 31 Oct 2016 02:32:13 +0000 (-0600) Subject: remove Term impl X-Git-Tag: v0.8.110~791 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=1272d9731154ff1aa5ee74e6d5a67f7eb9560939;p=scryer-prolog.git remove Term impl --- diff --git a/src/l0/ast.rs b/src/l0/ast.rs index fddc3965..f88af86f 100644 --- a/src/l0/ast.rs +++ b/src/l0/ast.rs @@ -17,24 +17,6 @@ pub enum Term { Var(Var) } -impl Term { - pub fn name(&self) -> &Atom { - match self { - &Term::Atom(ref atom) => atom, - &Term::Var(ref var) => var, - &Term::Clause(ref atom, _) => atom - } - } - - pub fn is_variable(&self) -> bool { - if let &Term::Var(_) = self { - return true; - } - - return false; - } -} - #[derive(Clone)] pub enum MachineInstruction { GetStructure(Atom, usize, usize), diff --git a/src/l0/codegen.rs b/src/l0/codegen.rs index f813c4fc..c5a643bd 100644 --- a/src/l0/codegen.rs +++ b/src/l0/codegen.rs @@ -60,10 +60,12 @@ pub fn compile_query<'a>(t: &'a Term) -> Program let mut counter : usize = max_reg_used; // r + 1; for t in terms { - if t.is_variable() && !variable_allocs.contains_key(t.name()) { - counter += 1; - variable_allocs.insert(t.name(), (counter, false)); - } else if !t.is_variable() { + if let &Term::Var(ref var) = t.as_ref() { + if !variable_allocs.contains_key(var) { + counter += 1; + variable_allocs.insert(var, (counter, false)); + } + } else { counter += 1; } } @@ -71,7 +73,7 @@ pub fn compile_query<'a>(t: &'a Term) -> Program max_reg_used = counter; for t in terms.iter().rev() { - if t.is_variable() { + if let &Term::Var(_) = t.as_ref() { counter -= 1; continue; } @@ -142,13 +144,15 @@ pub fn compile_fact<'a>(t: &'a Term) -> Program { let mut counter : usize = reg; for t in terms { - if t.is_variable() && !variable_allocs.contains_key(t.name()) { - variable_allocs.insert(t.name(), counter); - fact.push(MachineInstruction::UnifyVariable(counter)); - counter += 1; - } else if t.is_variable() { - let r = variable_allocs.get(t.name()).unwrap(); - fact.push(MachineInstruction::UnifyValue(*r)); + if let &Term::Var(ref var) = t.as_ref() { + if !variable_allocs.contains_key(var) { + variable_allocs.insert(var, counter); + fact.push(MachineInstruction::UnifyVariable(counter)); + counter += 1; + } else { + let r = variable_allocs.get(var).unwrap(); + fact.push(MachineInstruction::UnifyValue(*r)); + } } else { fact.push(MachineInstruction::UnifyVariable(counter)); queue.push_back((counter, t));