eliminate Addr::CharCode (#519), fix atom_code panic (#521), fix failure involving lists of character codes (#520), bump version number

This commit is contained in:
Mark Thom
2020-05-17 15:19:27 -06:00
parent 9f3351469d
commit 5720b7b94c
12 changed files with 75 additions and 243 deletions

View File

@@ -1411,7 +1411,7 @@ impl MachineState {
c
}
}
Addr::Char(_) | Addr::CharCode(_) | Addr::Con(_) | Addr::CutPoint(_) |
Addr::Char(_) | Addr::Con(_) | Addr::CutPoint(_) |
Addr::EmptyList | Addr::Fixnum(_) | Addr::Float(_) | Addr::Usize(_) => {
c
}
@@ -1956,17 +1956,6 @@ impl MachineState {
}
}
}
(Addr::CharCode(n1), v2) | (v2, Addr::CharCode(n1)) => {
if let Ok(n2) = Number::try_from((v2, &self.heap)) {
if let Some(n2) = n2.to_u32() {
if n1 == n2 {
continue;
}
}
}
return true;
}
(a1, a2) => {
if let Ok(n1) = Number::try_from((a1, &self.heap)) {
if let Ok(n2) = Number::try_from((a2, &self.heap)) {
@@ -2136,42 +2125,6 @@ impl MachineState {
unreachable!()
}
}
(
Addr::Con(h),
Addr::CharCode(c),
) => {
let c = std::char::from_u32(c).unwrap();
if let HeapCellValue::Atom(ref n1, _) = &self.heap[h] {
if n1.is_char() {
if n1.as_str().chars().next() != Some(c) {
return Some(n1.as_str().chars().next().cmp(&Some(c)));
}
} else {
return Some(Ordering::Greater);
}
} else {
unreachable!()
}
}
(
Addr::CharCode(c),
Addr::Con(h),
) => {
let c = std::char::from_u32(c).unwrap();
if let HeapCellValue::Atom(ref n1, _) = &self.heap[h] {
if n1.is_char() {
if n1.as_str().chars().next() != Some(c) {
return Some(Some(c).cmp(&n1.as_str().chars().next()));
}
} else {
return Some(Ordering::Less);
}
} else {
unreachable!()
}
}
(
Addr::EmptyList,
Addr::Con(h),
@@ -2204,34 +2157,6 @@ impl MachineState {
return Some(c1.cmp(&c2));
}
}
(
Addr::CharCode(c1),
Addr::CharCode(c2),
) => {
if c1 != c2 {
return Some(c1.cmp(&c2));
}
}
(
Addr::Char(c1),
Addr::CharCode(c2),
) => {
let c2 = std::char::from_u32(c2).unwrap();
if c1 != c2 {
return Some(c1.cmp(&c2));
}
}
(
Addr::CharCode(c1),
Addr::Char(c2),
) => {
let c1 = std::char::from_u32(c1).unwrap();
if c1 != c2 {
return Some(c1.cmp(&c2));
}
}
(
Addr::Char(c),
Addr::EmptyList,
@@ -2252,30 +2177,6 @@ impl MachineState {
Some('['.cmp(&c))
};
}
(
Addr::CharCode(c),
Addr::EmptyList,
) => {
let c = std::char::from_u32(c).unwrap();
return if c == '[' {
Some(Ordering::Less)
} else {
Some(c.cmp(&'['))
};
}
(
Addr::EmptyList,
Addr::CharCode(c),
) => {
let c = std::char::from_u32(c).unwrap();
return if c == '[' {
Some(Ordering::Greater)
} else {
Some('['.cmp(&c))
};
}
(
Addr::EmptyList,
Addr::EmptyList,
@@ -2443,7 +2344,6 @@ impl MachineState {
match d {
Addr::Char(_) |
Addr::CharCode(_) |
Addr::Con(_) |
Addr::EmptyList |
Addr::Fixnum(_) |
@@ -2471,9 +2371,6 @@ impl MachineState {
}
_ => {
match d {
Addr::CharCode(_) => {
self.p += 1;
}
Addr::Char(_) if self.flags.double_quotes.is_codes() => {
self.p += 1;
}
@@ -2601,7 +2498,7 @@ impl MachineState {
Addr::Stream(_) => {
self.fail = true;
}
Addr::Char(_) | Addr::CharCode(_) | Addr::Con(_) | Addr::Fixnum(_) |
Addr::Char(_) | Addr::Con(_) | Addr::Fixnum(_) |
Addr::Float(_) | Addr::EmptyList | Addr::Usize(_) => {
self.try_functor_unify_components(a1, 0);
}
@@ -2637,9 +2534,6 @@ impl MachineState {
},
_ =>
match arity {
Addr::CharCode(c) => {
Some(c as isize)
}
arity => {
return Err(
self.error_form(
@@ -2681,7 +2575,7 @@ impl MachineState {
}
match name {
Addr::Char(_) | Addr::CharCode(_) | Addr::Con(_) | Addr::Fixnum(_) | Addr::Float(_) |
Addr::Char(_) | Addr::Con(_) | Addr::Fixnum(_) | Addr::Float(_) |
Addr::EmptyList | Addr::PStrLocation(..) | Addr::Usize(_) if arity == 0 => {
self.unify(a1, name);
}