From 10af2060241d580ee785cd696095bbc11d810fdc Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Wed, 17 Mar 2021 19:50:41 -0600 Subject: [PATCH] make chars callable (#713) --- src/machine/machine_state_impl.rs | 3 ++- src/machine/system_calls.rs | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/machine/machine_state_impl.rs b/src/machine/machine_state_impl.rs index 71852bfb..59352308 100644 --- a/src/machine/machine_state_impl.rs +++ b/src/machine/machine_state_impl.rs @@ -1711,6 +1711,7 @@ impl MachineState { return None; } } + Addr::Char(c) => (clause_name!(c.to_string(), self.atom_tbl), 0), Addr::Con(h) => match &self.heap[h] { HeapCellValue::Atom(ref name, _) => (name.clone(), 0), _ => { @@ -1726,7 +1727,7 @@ impl MachineState { self.throw_exception(instantiation_error); return None; } - _ => { + addr => { let stub = MachineError::functor_stub(clause_name!("call"), arity + 1); let type_error = self.error_form( MachineError::type_error(self.heap.h(), ValidType::Callable, addr), diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index af8e3e7e..c7fcb154 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -2775,6 +2775,17 @@ impl MachineState { unreachable!() } } + Addr::Char(c) => { + return self.module_lookup( + indices, + call_policy, + (clause_name!(c.to_string(), self.atom_tbl), narity), + module_name, + true, + current_input_stream, + current_output_stream, + ); + } addr => { let stub = MachineError::functor_stub(clause_name!("(:)"), 2); -- 2.54.0