alpha_numeric_char!(oc)
} else if capital_letter_char!(ac) {
alpha_numeric_char!(oc)
+ } else if sign_char!(ac) {
+ sign_char!(oc) || decimal_digit_char!(oc)
} else {
false
}
}
fn print_atom(&mut self, atom: &ClauseName, spec: Option<(usize, Specifier)>) {
- match atom.as_str() {
- "" => self.append_str("''"),
- ";" | "!" => self.append_str(atom.as_str()),
- s => if spec.is_some() || !self.quoted || non_quoted_token(s.chars()) {
- self.append_str(atom.as_str())
- } else {
- if self.quoted {
- self.push_char('\'');
- }
+ push_space_if_amb!(self, atom.as_str(), {
+ match atom.as_str() {
+ "" => self.append_str("''"),
+ ";" | "!" => self.append_str(atom.as_str()),
+ s => if spec.is_some() || !self.quoted || non_quoted_token(s.chars()) {
+ self.append_str(atom.as_str());
+ } else {
+ if self.quoted {
+ self.push_char('\'');
+ }
- for c in atom.as_str().chars() {
- self.print_char(c);
- }
+ for c in atom.as_str().chars() {
+ self.print_char(c);
+ }
- if self.quoted {
- self.push_char('\'');
+ if self.quoted {
+ self.push_char('\'');
+ }
}
}
- }
+ });
}
fn print_char(&mut self, c: char) {
'\u{08}' => self.append_str("\\b"), // UTF-8 backspace
'\u{07}' => self.append_str("\\a"), // UTF-8 alert
'\x20' ... '\x7e' => self.push_char(c),
- _ => self.append_str(&format!("\\x{:x}", c as u32))
+ _ => self.append_str(&format!("\\x{:x}\\", c as u32))
};
}
self.append_str(&output_str.trim());
});
},
- Constant::Number(n) => {
+ Constant::Number(n) => {
let output_str = format!("{}", n);
push_space_if_amb!(self, &output_str, {
let ct = ClauseType::from(name, 0, fixity);
self.format_clause(iter, 0, ct);
}),
- HeapCellValue::NamedStr(arity, name, fixity) => {
+ HeapCellValue::NamedStr(arity, name, fixity) => {
let ct = ClauseType::from(name, arity, fixity);
self.format_clause(iter, arity, ct);
},
assert_prolog_success!(&mut wam, "?- call_with_inference_limit((setup_call_cleanup(S=1,(G=2;fail),writeq(S+G>B)), B=3, !), 10, R).",
[["S = _1", "G = _4", "B = _14", "R = inference_limit_exceeded"]]);
+ assert_prolog_success!(&mut wam, "?- X = '\\033\\'.",
+ [["X = '\\x1b\\'"]]);
+
assert_prolog_success!(&mut wam, "?- X = '\\n'.",
[["X = '\\n'"]]);
assert_prolog_success!(&mut wam, "?- X = '\\b'.",
assert_prolog_success!(&mut wam, "?- X = '\\b\\r\\f\\t\\n'.",
[["X = '\\b\\r\\f\\t\\n'"]]);
+ assert_prolog_success!(&mut wam, "?- (- (1)) = -(1).");
+ assert_prolog_success!(&mut wam, "?- (- -1) = -(-1).");
+
assert_prolog_success!(&mut wam, "?- X = ((*)=(*)).",
[["X = ((*)=(*))"]]);
assert_prolog_success!(&mut wam, "?- X = [.,.(.,.,.)].",