diff --git a/src/prolog/ast.rs b/src/prolog/ast.rs index 1128a800..bee15064 100644 --- a/src/prolog/ast.rs +++ b/src/prolog/ast.rs @@ -537,7 +537,7 @@ impl fmt::Display for Constant { &Constant::Atom(ref atom) => write!(f, "{}", atom), &Constant::Char(c) => - write!(f, "#\\{}", c), + write!(f, "{}", c as u8), &Constant::EmptyList => write!(f, "[]"), &Constant::Number(ref n) => diff --git a/src/prolog/io.rs b/src/prolog/io.rs index 85e5330c..1b005bd3 100644 --- a/src/prolog/io.rs +++ b/src/prolog/io.rs @@ -679,6 +679,7 @@ pub fn compile_listing(wam: &mut Machine, src_str: &str) -> EvalSession .or_insert(CodeIndex::default()); index.0.set(IndexPtr::Index(p)); + index.1 = module_name; } decl_info.label_clauses(p, &mut code_dir, &mut decl_code); diff --git a/src/prolog/machine/machine_state.rs b/src/prolog/machine/machine_state.rs index 049223f8..c76edba2 100644 --- a/src/prolog/machine/machine_state.rs +++ b/src/prolog/machine/machine_state.rs @@ -426,17 +426,16 @@ pub(crate) trait CallPolicy: Any { Ok(()) }, - &ClauseType::CallN => { + &ClauseType::CallN => if let Some((name, arity)) = machine_st.setup_call_n(arity) { if let Some(idx) = code_dirs.get(name.clone(), arity, &machine_st.p.clone()) { - return self.context_call(machine_st, name, arity, idx, lco); + self.context_call(machine_st, name, arity, idx, lco) } else { - machine_st.fail = true; + Err(predicate_existence_error(name, arity, machine_st.heap.h)) } - } - - Ok(()) - }, + } else { + Ok(()) + }, &ClauseType::Compare => { let a1 = machine_st[temp_v!(1)].clone(); let a2 = machine_st[temp_v!(2)].clone();