From: Mark Thom Date: Sun, 31 Mar 2019 03:31:57 +0000 (-0600) Subject: specially handle commas X-Git-Tag: v0.8.110~140 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=3e67400bd36604aa5b939c1cc48b0fd2f6491811;p=scryer-prolog.git specially handle commas --- diff --git a/Cargo.toml b/Cargo.toml index 98ba7e63..cfe52228 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "scryer-prolog" -version = "0.8.27" +version = "0.8.28" authors = ["Mark Thom "] repository = "https://github.com/mthom/scryer-prolog" description = "A modern Prolog implementation written mostly in Rust." diff --git a/src/prolog/heap_print.rs b/src/prolog/heap_print.rs index e283fe33..a02a9d8e 100644 --- a/src/prolog/heap_print.rs +++ b/src/prolog/heap_print.rs @@ -541,8 +541,9 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> push_space_if_amb!(self, atom.as_str(), { match atom.as_str() { "" => self.append_str("''"), + "," if spec.is_some() => self.append_str(atom.as_str()), ";" | "!" => self.append_str(atom.as_str()), - s => if spec.is_some() || !self.quoted || non_quoted_token(s.chars()) { + s => if !self.quoted || non_quoted_token(s.chars()) { self.append_str(atom.as_str()); } else { if self.quoted { diff --git a/src/prolog/lib/builtins.pl b/src/prolog/lib/builtins.pl index 99307e52..59997a6f 100644 --- a/src/prolog/lib/builtins.pl +++ b/src/prolog/lib/builtins.pl @@ -718,8 +718,8 @@ op_specifier(OpSpec) :- atom(OpSpec), op_specifier(OpSpec) :- throw(error(type_error(atom, OpSpec), op/3)). valid_op(Op) :- atom(Op), - ( Op \== ',' -> true - ; throw(error(permission_error(modify, operator, ','), op/3)) % 8.14.3.3 j), k). + ( Op \== (,) -> true + ; throw(error(permission_error(modify, operator, (,)), op/3)) % 8.14.3.3 j), k). ). op_(Priority, OpSpec, Op) :- '$op'(Priority, OpSpec, Op). diff --git a/src/prolog/machine/system_calls.rs b/src/prolog/machine/system_calls.rs index 33247086..e05d20b0 100644 --- a/src/prolog/machine/system_calls.rs +++ b/src/prolog/machine/system_calls.rs @@ -1,5 +1,6 @@ use prolog_parser::ast::*; use prolog_parser::parser::{get_desc, get_clause_spec}; +use prolog_parser::tabled_rc::*; use prolog::clause_types::*; use prolog::heap_iter::*; @@ -586,6 +587,8 @@ impl MachineState { let op = match self.store(self.deref(op)) { Addr::Con(Constant::Atom(name, _)) => name, + Addr::Con(Constant::Char(c)) => + clause_name!(c.to_string(), indices.atom_tbl), _ => unreachable!() };