diff --git a/src/prolog/allocator.rs b/src/prolog/allocator.rs index 0a9595a9..5fbe9fac 100644 --- a/src/prolog/allocator.rs +++ b/src/prolog/allocator.rs @@ -48,7 +48,11 @@ pub trait Allocator<'a> } fn get(&self, var: Rc) -> RegType { - self.bindings().get(&var).unwrap().as_reg_type() + self.bindings().get(&var).map_or(temp_v!(0), |v| v.as_reg_type()) + } + + fn is_unbound(&self, var: Rc) -> bool { + self.get(var) == temp_v!(0) } fn record_register(&mut self, var: Rc, r: RegType) { diff --git a/src/prolog/mod.rs b/src/prolog/mod.rs index 31bde83b..a5b6d87b 100644 --- a/src/prolog/mod.rs +++ b/src/prolog/mod.rs @@ -1,13 +1,13 @@ extern crate num; extern crate ordered_float; -pub mod allocator; pub mod and_stack; #[macro_use] pub mod macros; #[macro_use] pub mod ast; #[macro_use] +pub mod allocator; pub mod arithmetic; pub mod builtins; pub mod codegen;