.get_name();
let op = read_heap_cell!(self.machine_st.store(self.machine_st.deref(op)),
- (HeapCellValueTag::Char) => {
- self.machine_st.atom_tbl.build_with(&op.to_string())
+ (HeapCellValueTag::Char, c) => {
+ self.machine_st.atom_tbl.build_with(&c.to_string())
}
(HeapCellValueTag::Atom, (name, _arity)) => {
name
self.reduce_op(1400);
- if self.stack.len() == 1 {
+ if self.stack.len() <= 1 {
return false;
}
let idx = self.stack.len() - 2;
-
let td = self.stack.remove(idx);
+
match td.tt {
TokenType::Open | TokenType::OpenCT => {
if self.stack[idx].tt == TokenType::Comma {
use crate::machine::partial_string::PartialString;
use crate::machine::streams::*;
use crate::parser::ast::Fixnum;
-use crate::parser::rug::{Integer, Rational};
-
-use ordered_float::OrderedFloat;
use std::cmp::Ordering;
use std::convert::TryFrom;
tag: HeapCellValueTag,
}
-impl fmt::Display for HeapCellValue {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- read_heap_cell!(*self,
- (HeapCellValueTag::Atom, (name, arity)) => {
- if arity == 0 {
- write!(f, "{}", name.as_str())
- } else {
- write!(
- f,
- "{}/{}",
- name.as_str(),
- arity
- )
- }
- }
- (HeapCellValueTag::PStr, pstr_atom) => {
- let pstr = PartialString::from(pstr_atom);
-
- write!(
- f,
- "pstr ( \"{}\", )",
- pstr.as_str_from(0)
- )
- }
- (HeapCellValueTag::Cons, c) => {
- match_untyped_arena_ptr!(c,
- (ArenaHeaderTag::Integer, n) => {
- write!(f, "{}", n)
- }
- (ArenaHeaderTag::Rational, r) => {
- write!(f, "{}", r)
- }
- (ArenaHeaderTag::F64, fl) => {
- write!(f, "{}", fl)
- }
- (ArenaHeaderTag::Stream, stream) => {
- write!(f, "$stream({})", stream.as_ptr() as usize)
- }
- _ => {
- write!(f, "")
- }
- )
- }
- _ => {
- unreachable!()
- }
- )
- }
-}
-
impl fmt::Debug for HeapCellValue {
fn fmt(&self, f: &mut std::fmt::Formatter) -> fmt::Result {
match self.get_tag() {