Rename printer vars that track cyclic structures
This commit is contained in:
parent
dd3cc748ec
commit
84c10258b3
|
@ -2562,7 +2562,7 @@ static void lisp_init(size_t initial_heapsize)
|
|||
curheap = fromspace;
|
||||
lim = curheap + heapsize - sizeof(struct cons);
|
||||
consflags = bitvector_new(heapsize / sizeof(struct cons), 1);
|
||||
htable_new(&printconses, 32);
|
||||
htable_new(&cycle_visited_pairs, 32);
|
||||
comparehash_init();
|
||||
N_STACK = 262144;
|
||||
Stack = malloc(N_STACK * sizeof(value_t));
|
||||
|
|
24
c/print.h
24
c/print.h
|
@ -15,13 +15,11 @@ static fixnum_t print_length;
|
|||
// *print-level* -- print only the outermost N levels of nested structures
|
||||
static fixnum_t print_level;
|
||||
|
||||
// Internals to keep track of circular structures
|
||||
static struct htable printconses;
|
||||
static uint32_t printlabel;
|
||||
|
||||
static fixnum_t cur_line;
|
||||
static fixnum_t cur_column = 0;
|
||||
static fixnum_t cur_level;
|
||||
static uint32_t cycle_used_labels;
|
||||
static struct htable cycle_visited_pairs;
|
||||
|
||||
static void outc(char c, struct ios *f)
|
||||
{
|
||||
|
@ -72,9 +70,9 @@ void print_traverse(value_t v)
|
|||
|
||||
while (iscons(v)) {
|
||||
if (ismarked(v)) {
|
||||
bp = (value_t *)ptrhash_bp(&printconses, (void *)v);
|
||||
bp = (value_t *)ptrhash_bp(&cycle_visited_pairs, (void *)v);
|
||||
if (*bp == (value_t)HT_NOTFOUND)
|
||||
*bp = fixnum(printlabel++);
|
||||
*bp = fixnum(cycle_used_labels++);
|
||||
return;
|
||||
}
|
||||
mark_cons(v);
|
||||
|
@ -84,9 +82,9 @@ void print_traverse(value_t v)
|
|||
if (!ismanaged(v) || issymbol(v))
|
||||
return;
|
||||
if (ismarked(v)) {
|
||||
bp = (value_t *)ptrhash_bp(&printconses, (void *)v);
|
||||
bp = (value_t *)ptrhash_bp(&cycle_visited_pairs, (void *)v);
|
||||
if (*bp == (value_t)HT_NOTFOUND)
|
||||
*bp = fixnum(printlabel++);
|
||||
*bp = fixnum(cycle_used_labels++);
|
||||
return;
|
||||
}
|
||||
if (isvector(v)) {
|
||||
|
@ -283,7 +281,7 @@ static void print_pair(struct ios *f, value_t v)
|
|||
|
||||
op = NULL;
|
||||
if (iscons(cdr_(v)) && cdr_(cdr_(v)) == NIL &&
|
||||
!ptrhash_has(&printconses, (void *)cdr_(v)) &&
|
||||
!ptrhash_has(&cycle_visited_pairs, (void *)cdr_(v)) &&
|
||||
(((car_(v) == QUOTE) && (op = "'")) ||
|
||||
((car_(v) == BACKQUOTE) && (op = "`")) ||
|
||||
((car_(v) == COMMA) && (op = ",")) ||
|
||||
|
@ -316,7 +314,7 @@ static void print_pair(struct ios *f, value_t v)
|
|||
last_line = cur_line;
|
||||
unmark_cons(v);
|
||||
fl_print_child(f, car_(v));
|
||||
if (!iscons(cd) || ptrhash_has(&printconses, (void *)cd)) {
|
||||
if (!iscons(cd) || ptrhash_has(&cycle_visited_pairs, (void *)cd)) {
|
||||
if (cd != NIL) {
|
||||
outsn(" . ", f, 3);
|
||||
fl_print_child(f, cd);
|
||||
|
@ -377,7 +375,7 @@ static int print_circle_prefix(struct ios *f, value_t v)
|
|||
{
|
||||
value_t label;
|
||||
|
||||
if ((label = (value_t)ptrhash_get(&printconses, (void *)v)) !=
|
||||
if ((label = (value_t)ptrhash_get(&cycle_visited_pairs, (void *)v)) !=
|
||||
(value_t)HT_NOTFOUND) {
|
||||
if (!ismarked(v)) {
|
||||
cur_column += ios_printf(f, "#%ld#", numval(label));
|
||||
|
@ -892,7 +890,7 @@ void fl_print(struct ios *f, value_t v)
|
|||
print_level = -1;
|
||||
cur_level = 0;
|
||||
|
||||
printlabel = 0;
|
||||
cycle_used_labels = 0;
|
||||
if (print_readably)
|
||||
print_traverse(v);
|
||||
cur_line = cur_column = 0;
|
||||
|
@ -906,6 +904,6 @@ void fl_print(struct ios *f, value_t v)
|
|||
|
||||
if ((iscons(v) || isvector(v) || isfunction(v) || iscvalue(v)) &&
|
||||
!fl_isstring(v) && v != FL_T && v != FL_F && v != FL_NIL) {
|
||||
htable_reset(&printconses, 32);
|
||||
htable_reset(&cycle_visited_pairs, 32);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue