}
Addr::Con(h) => {
if let &HeapCellValue::PartialString(ref pstr, has_tail) = &self.machine_st.heap[h] {
- if !self.machine_st.flags.double_quotes.is_atom() {
- return if let Some(c) = pstr.range_from(0 ..).next() {
- self.state_stack.push(Addr::PStrLocation(h, c.len_utf8()));
- self.state_stack.push(Addr::Char(c));
+ if let Some(c) = pstr.range_from(0 ..).next() {
+ self.state_stack.push(Addr::PStrLocation(h, c.len_utf8()));
+ self.state_stack.push(Addr::Char(c));
- Addr::PStrLocation(h, 0)
- } else if has_tail {
- self.follow(Addr::HeapCell(h + 1))
- } else {
- Addr::EmptyList
- };
+ Addr::PStrLocation(h, 0)
+ } else if has_tail {
+ self.follow(Addr::HeapCell(h + 1))
+ } else {
+ Addr::EmptyList
}
+ } else {
+ Addr::Con(h)
}
-
- Addr::Con(h)
}
da => {
da
let at_cdr = self.at_cdr(",");
if !at_cdr && Addr::EmptyList == end_addr {
- if self.machine_st.flags.double_quotes.is_chars() && !self.ignore_ops {
+ if !self.ignore_ops {
self.print_proper_string(buf, max_depth);
return;
}
let mut byte_len = 0;
- let char_printer = |printer: &mut Self, c| {
- if printer.machine_st.flags.double_quotes.is_codes() {
- let s = (c as u32).to_string();
-
- push_space_if_amb!(printer, &s, {
- printer.append_str(&s);
- });
- } else {
- printer.print_char(printer.quoted, c);
- }
- };
-
if self.ignore_ops {
let mut char_count = 0;
self.append_str("'.'");
self.push_char('(');
- char_printer(self, c);
+ self.print_char(self.quoted, c);
self.push_char(',');
char_count += 1;
};
for c in buf_iter {
- char_printer(self, c);
+ self.print_char(self.quoted, c);
self.push_char(',');
byte_len += c.len_utf8();
self.bind(addr.as_var().unwrap(), pstr_addr);
}
- Addr::Lis(l) if !self.flags.double_quotes.is_atom() => {
+ Addr::Lis(l) => {
let h = self.heap.h();
let pstr_addr =
self.fail = true;
}
}
- Addr::Lis(l) if !self.flags.double_quotes.is_atom() => {
+ Addr::Lis(l) => {
let addr = self.heap.put_constant(c.clone());
self.unify(Addr::Lis(l), addr);
}
v
}
Addr::PStrLocation(..) => {
- if !self.flags.double_quotes.is_atom() {
- l
- } else {
- c
- }
+ l
}
Addr::Char(_) | Addr::Con(_) | Addr::CutPoint(_) |
Addr::EmptyList | Addr::Fixnum(_) | Addr::Float(_) | Addr::Usize(_) => {
unreachable!()
}
}
- (Addr::PStrLocation(..), Addr::Lis(_))
- | (Addr::Lis(_), Addr::PStrLocation(..))
- if !self.flags.double_quotes.is_atom() => {
- continue;
- }
+ (Addr::PStrLocation(..), Addr::Lis(_)) |
+ (Addr::Lis(_), Addr::PStrLocation(..)) => {
+ continue;
+ }
(pstr1 @ Addr::PStrLocation(..), pstr2 @ Addr::PStrLocation(..)) => {
let mut i1 = self.heap_pstr_iter(pstr1);
let mut i2 = self.heap_pstr_iter(pstr2);
(
Addr::PStrLocation(..),
Addr::Lis(_),
- ) if !self.flags.double_quotes.is_atom() => {
+ ) => {
}
(
Addr::Lis(_),
(
Addr::PStrLocation(..),
Addr::Str(s),
- ) if !self.flags.double_quotes.is_atom() => {
+ ) => {
if let &HeapCellValue::NamedStr(a1, ref n1, _) = &self.heap[s] {
if a1 != 2 || n1.as_str() != "." {
return Some(a1.cmp(&2).then_with(|| n1.as_str().cmp(".")));
(
Addr::Str(s),
Addr::PStrLocation(..),
- ) if !self.flags.double_quotes.is_atom() => {
+ ) => {
if let &HeapCellValue::NamedStr(a1, ref n1, _) = &self.heap[s] {
if a1 != 2 || n1.as_str() != "." {
return Some(2.cmp(&a1).then_with(|| ".".cmp(n1.as_str())));
}
}
_ => {
- match d {
- Addr::Char(_) if self.flags.double_quotes.is_codes() => {
- self.p += 1;
- }
- _ => {
- self.fail = true;
- }
- }
+ self.fail = true;
}
}
}
| (
HeapCellValue::Addr(Addr::PStrLocation(..)),
HeapCellValue::Addr(Addr::Lis(_)),
- ) if !self.flags.double_quotes.is_atom() => {
+ ) => {
}
(
HeapCellValue::NamedStr(ar1, n1, _),
}
Addr::Con(h) if max_steps > 0 => {
if let HeapCellValue::PartialString(..) = &self.heap[h] {
- if !self.flags.double_quotes.is_atom() {
- Addr::PStrLocation(h, 0)
- } else {
- return CycleSearchResult::NotList;
- }
+ Addr::PStrLocation(h, 0)
} else {
return CycleSearchResult::NotList;
}
}
Addr::Con(h) => {
if let HeapCellValue::PartialString(..) = &self.heap[h] {
- if !self.flags.double_quotes.is_atom() {
- return CycleSearchResult::UntouchedList(h);
- }
+ return CycleSearchResult::UntouchedList(h);
}
return CycleSearchResult::NotList;
}
Addr::Con(h) => {
if let HeapCellValue::PartialString(..) = &self.heap[h] {
- if !self.flags.double_quotes.is_atom() {
- Addr::PStrLocation(h, 0)
- } else {
- return CycleSearchResult::NotList;
- }
+ Addr::PStrLocation(h, 0)
} else {
return CycleSearchResult::NotList;
}
let a2 = self[temp_v!(2)];
match self.store(self.deref(a2)) {
- Addr::PStrLocation(..)
- if !self.flags.double_quotes.is_chars() => {
- self.fail = true;
- }
+ Addr::PStrLocation(..) => {
+ self.fail = true;
+ }
a2 => {
self.unify(a2, list_of_chars);
}
self.unify(a2, list_of_codes);
}
Addr::Con(h) if self.heap.atom_at(h) => {
- if let HeapCellValue::Atom(name, _) = self.heap.clone(h) {
- let a2 = self[temp_v!(2)];
+ if let HeapCellValue::Atom(name, _) = self.heap.clone(h) {
+ let a2 = self.store(self.deref(self[temp_v!(2)]));
- match self.store(self.deref(a2)) {
- a2 @ Addr::PStrLocation(..) => {
- if !self.flags.double_quotes.is_codes() {
- self.fail = true;
- } else {
- let iter = name
- .as_str()
- .chars()
- .map(|c| Addr::Char(c));
+ let iter = name
+ .as_str()
+ .chars()
+ .map(|c| Addr::Fixnum(c as isize));
- let list_of_codes = Addr::HeapCell(self.heap.to_list(iter));
+ let list_of_codes = Addr::HeapCell(self.heap.to_list(iter));
- self.unify(a2, list_of_codes);
- }
- }
- a2 => {
- let iter = name
- .as_str()
- .chars()
- .map(|c| Addr::Fixnum(c as isize));
-
- let list_of_codes = Addr::HeapCell(self.heap.to_list(iter));
-
- self.unify(a2, list_of_codes);
- }
- }
+ self.unify(a2, list_of_codes);
} else {
unreachable!()
}