|
|
385abae |
Description: <short summary of the patch>
|
|
|
385abae |
TODO: Put a short summary on the line above and replace this paragraph
|
|
|
385abae |
with a longer explanation of this change. Complete the meta-information
|
|
|
385abae |
with other relevant fields (see below for details). To make it easier, the
|
|
|
385abae |
information below has been extracted from the changelog. Adjust it or drop
|
|
|
385abae |
it.
|
|
|
385abae |
.
|
|
|
385abae |
gcl (2.6.12-53) unstable; urgency=medium
|
|
|
385abae |
.
|
|
|
385abae |
* list_order.9
|
|
|
385abae |
Author: Camm Maguire <camm@debian.org>
|
|
|
385abae |
|
|
|
385abae |
---
|
|
|
385abae |
The information above should follow the Patch Tagging Guidelines, please
|
|
|
385abae |
checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
|
|
|
385abae |
are templates for supplementary fields that you might want to add:
|
|
|
385abae |
|
|
|
385abae |
Origin: <vendor|upstream|other>, <url of original patch>
|
|
|
385abae |
Bug: <url in upstream bugtracker>
|
|
|
385abae |
Bug-Debian: https://bugs.debian.org/<bugnumber>
|
|
|
385abae |
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
|
|
|
385abae |
Forwarded: <no|not-needed|url proving that it has been forwarded>
|
|
|
385abae |
Reviewed-By: <name and email of someone who approved the patch>
|
|
|
385abae |
Last-Update: 2017-08-23
|
|
|
385abae |
|
|
|
385abae |
--- gcl-2.6.12.orig/o/print.d
|
|
|
385abae |
+++ gcl-2.6.12/o/print.d
|
|
|
385abae |
@@ -35,12 +35,6 @@ int line_length = 72;
|
|
|
385abae |
#define WRITEC_NEWLINE(strm) (writec_stream('\n',strm))
|
|
|
385abae |
#endif
|
|
|
385abae |
|
|
|
385abae |
-#define to_be_escaped(c) \
|
|
|
385abae |
- (standard_readtable->rt.rt_self[(c)&0377].rte_chattrib \
|
|
|
385abae |
- != cat_constituent || \
|
|
|
385abae |
- isLower((c)&0377) || (c) == ':')
|
|
|
385abae |
-
|
|
|
385abae |
-
|
|
|
385abae |
#define READ_TABLE_CASE (Vreadtable->s.s_dbind->rt.rt_case)
|
|
|
385abae |
|
|
|
385abae |
#define mod(x) ((x)%Q_SIZE)
|
|
|
385abae |
@@ -637,50 +631,31 @@ constant_case(object x) {
|
|
|
385abae |
}
|
|
|
385abae |
|
|
|
385abae |
static int
|
|
|
385abae |
-all_dots(object x) {
|
|
|
385abae |
-
|
|
|
385abae |
- fixnum i;
|
|
|
385abae |
-
|
|
|
385abae |
- for (i=0;i<x->s.s_fillp;i++)
|
|
|
385abae |
- if (x->s.s_self[i]!='.')
|
|
|
385abae |
- return 0;
|
|
|
385abae |
+needs_escape (object x) {
|
|
|
385abae |
|
|
|
385abae |
- return 1;
|
|
|
385abae |
-
|
|
|
385abae |
-}
|
|
|
385abae |
-
|
|
|
385abae |
-static int
|
|
|
385abae |
-needs_escape (object x,int pp) {
|
|
|
385abae |
-
|
|
|
385abae |
- fixnum i;
|
|
|
385abae |
- char ch;
|
|
|
385abae |
+ fixnum i,all_dots=1;
|
|
|
385abae |
+ int ch;
|
|
|
385abae |
|
|
|
385abae |
if (!PRINTescape)
|
|
|
385abae |
return 0;
|
|
|
385abae |
|
|
|
385abae |
for (i=0;i<x->s.s_fillp;i++)
|
|
|
385abae |
switch((ch=x->s.s_self[i])) {
|
|
|
385abae |
- case '(':
|
|
|
385abae |
- case ')':
|
|
|
385abae |
case ':':
|
|
|
385abae |
- case '`':
|
|
|
385abae |
- case '\'':
|
|
|
385abae |
- case '"':
|
|
|
385abae |
- case ';':
|
|
|
385abae |
- case ',':
|
|
|
385abae |
- case '\n':
|
|
|
385abae |
return 1;
|
|
|
385abae |
- case ' ':
|
|
|
385abae |
- if (!i) return 1;
|
|
|
385abae |
+ case '.':
|
|
|
385abae |
+ break;
|
|
|
385abae |
default:
|
|
|
385abae |
+ all_dots=0;
|
|
|
385abae |
+ if (Vreadtable->s.s_dbind->rt.rt_self[ch].rte_chattrib!=cat_constituent)
|
|
|
385abae |
+ return 1;
|
|
|
385abae |
if ((READ_TABLE_CASE==sKupcase && isLower(ch)) ||
|
|
|
385abae |
(READ_TABLE_CASE==sKdowncase && isUpper(ch)))
|
|
|
385abae |
return 1;
|
|
|
385abae |
}
|
|
|
385abae |
|
|
|
385abae |
- if (pp)
|
|
|
385abae |
- if (potential_number_p(x, PRINTbase) || all_dots(x))
|
|
|
385abae |
- return 1;
|
|
|
385abae |
+ if (potential_number_p(x, PRINTbase) || all_dots)
|
|
|
385abae |
+ return 1;
|
|
|
385abae |
|
|
|
385abae |
return !x->s.s_fillp;
|
|
|
385abae |
|
|
|
385abae |
@@ -690,19 +665,21 @@ needs_escape (object x,int pp) {
|
|
|
385abae |
#define convertible_lower(c) ((READ_TABLE_CASE==sKdowncase||READ_TABLE_CASE==sKinvert)&& isLower(c))
|
|
|
385abae |
|
|
|
385abae |
static void
|
|
|
385abae |
-print_symbol_name_body(object x,int pp) {
|
|
|
385abae |
+print_symbol_name_body(object x) {
|
|
|
385abae |
|
|
|
385abae |
int i,j,fc,tc,lw,k,cc;
|
|
|
385abae |
|
|
|
385abae |
cc=constant_case(x);
|
|
|
385abae |
- k=needs_escape(x,pp);
|
|
|
385abae |
+ k=needs_escape(x);
|
|
|
385abae |
|
|
|
385abae |
if (k)
|
|
|
385abae |
write_ch('|');
|
|
|
385abae |
|
|
|
385abae |
for (lw=i=0;i<x->s.s_fillp;i++) {
|
|
|
385abae |
j = x->s.s_self[i];
|
|
|
385abae |
- if (PRINTescape && (j == '|' || j == '\\'))
|
|
|
385abae |
+ if (PRINTescape &&
|
|
|
385abae |
+ (Vreadtable->s.s_dbind->rt.rt_self[j].rte_chattrib==cat_single_escape ||
|
|
|
385abae |
+ Vreadtable->s.s_dbind->rt.rt_self[j].rte_chattrib==cat_multiple_escape))
|
|
|
385abae |
write_ch('\\');
|
|
|
385abae |
fc=convertible_upper(j) ? 1 :
|
|
|
385abae |
(convertible_lower(j) ? -1 : 0);
|
|
|
385abae |
@@ -711,7 +688,7 @@ print_symbol_name_body(object x,int pp)
|
|
|
385abae |
(PRINTcase == sKdowncase ? -1 :
|
|
|
385abae |
(PRINTcase == sKcapitalize ? (i==lw ? 1 : -1) : 0))));
|
|
|
385abae |
if (ispunct(j)||isspace(j)) lw=i+1;
|
|
|
385abae |
- j+=(tc*fc && !k ? (tc-fc)>>1 : 0)*('A'-'a');
|
|
|
385abae |
+ j+=(tc && fc && !k ? (tc-fc)>>1 : 0)*('A'-'a');
|
|
|
385abae |
write_ch(j);
|
|
|
385abae |
|
|
|
385abae |
}
|
|
|
385abae |
@@ -721,6 +698,42 @@ print_symbol_name_body(object x,int pp)
|
|
|
385abae |
|
|
|
385abae |
}
|
|
|
385abae |
|
|
|
385abae |
+#define DONE 1
|
|
|
385abae |
+#define FOUND -1
|
|
|
385abae |
+
|
|
|
385abae |
+static int
|
|
|
385abae |
+write_sharp_eq(object *vp,bool dot) {
|
|
|
385abae |
+
|
|
|
385abae |
+ bool defined=vp[1]!=Cnil;
|
|
|
385abae |
+
|
|
|
385abae |
+ if (dot) {
|
|
|
385abae |
+ write_str(" . ");
|
|
|
385abae |
+ if (!defined) return FOUND;
|
|
|
385abae |
+ }
|
|
|
385abae |
+
|
|
|
385abae |
+ vp[1]=Ct;
|
|
|
385abae |
+ write_ch('#');
|
|
|
385abae |
+ write_decimal((vp-PRINTvs_top)/2);
|
|
|
385abae |
+ write_ch(defined ? '#' : '=');
|
|
|
385abae |
+
|
|
|
385abae |
+ return defined ? DONE : FOUND;
|
|
|
385abae |
+
|
|
|
385abae |
+}
|
|
|
385abae |
+
|
|
|
385abae |
+static int
|
|
|
385abae |
+write_sharp_eqs(object x,bool dot) {
|
|
|
385abae |
+
|
|
|
385abae |
+ object *vp;
|
|
|
385abae |
+
|
|
|
385abae |
+ for (vp = PRINTvs_top; vp < PRINTvs_limit; vp += 2)
|
|
|
385abae |
+ if (x == *vp)
|
|
|
385abae |
+ return write_sharp_eq(vp,dot);
|
|
|
385abae |
+
|
|
|
385abae |
+ return 0;
|
|
|
385abae |
+
|
|
|
385abae |
+}
|
|
|
385abae |
+
|
|
|
385abae |
+
|
|
|
385abae |
void
|
|
|
385abae |
write_object(x, level)
|
|
|
385abae |
object x;
|
|
|
385abae |
@@ -728,7 +741,6 @@ int level;
|
|
|
385abae |
{
|
|
|
385abae |
object r, y;
|
|
|
385abae |
int i, j, k;
|
|
|
385abae |
- object *vp;
|
|
|
385abae |
|
|
|
385abae |
cs_check(x);
|
|
|
385abae |
|
|
|
385abae |
@@ -903,29 +915,15 @@ int level;
|
|
|
385abae |
|
|
|
385abae |
if (PRINTescape) {
|
|
|
385abae |
if (x->s.s_hpack == Cnil) {
|
|
|
385abae |
- if (PRINTcircle) {
|
|
|
385abae |
- for (vp = PRINTvs_top; vp < PRINTvs_limit; vp += 2)
|
|
|
385abae |
- if (x == *vp) {
|
|
|
385abae |
- if (vp[1] != Cnil) {
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- write_decimal((vp-PRINTvs_top)/2+1);
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- return;
|
|
|
385abae |
- } else {
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- write_decimal((vp-PRINTvs_top)/2+1);
|
|
|
385abae |
- write_ch('=');
|
|
|
385abae |
- vp[1] = Ct;
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
+ if (PRINTcircle)
|
|
|
385abae |
+ if (write_sharp_eqs(x,FALSE)==DONE) return;
|
|
|
385abae |
if (PRINTgensym)
|
|
|
385abae |
write_str("#:");
|
|
|
385abae |
} else if (x->s.s_hpack == keyword_package) {
|
|
|
385abae |
write_ch(':');
|
|
|
385abae |
} else if (PRINTpackage||find_symbol(x,current_package())!=x || !intern_flag) {
|
|
|
385abae |
|
|
|
385abae |
- print_symbol_name_body(x->s.s_hpack->p.p_name,0);
|
|
|
385abae |
+ print_symbol_name_body(x->s.s_hpack->p.p_name);
|
|
|
385abae |
|
|
|
385abae |
if (find_symbol(x, x->s.s_hpack) != x)
|
|
|
385abae |
error("can't print symbol");
|
|
|
385abae |
@@ -939,7 +937,7 @@ int level;
|
|
|
385abae |
}
|
|
|
385abae |
|
|
|
385abae |
}
|
|
|
385abae |
- print_symbol_name_body(x,1);
|
|
|
385abae |
+ print_symbol_name_body(x);
|
|
|
385abae |
break;
|
|
|
385abae |
}
|
|
|
385abae |
case t_array:
|
|
|
385abae |
@@ -953,23 +951,8 @@ int level;
|
|
|
385abae |
write_str(">");
|
|
|
385abae |
break;
|
|
|
385abae |
}
|
|
|
385abae |
- if (PRINTcircle) {
|
|
|
385abae |
- for (vp = PRINTvs_top; vp < PRINTvs_limit; vp += 2)
|
|
|
385abae |
- if (x == *vp) {
|
|
|
385abae |
- if (vp[1] != Cnil) {
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- write_decimal((vp-PRINTvs_top)/2);
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- return;
|
|
|
385abae |
- } else {
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- write_decimal((vp-PRINTvs_top)/2);
|
|
|
385abae |
- write_ch('=');
|
|
|
385abae |
- vp[1] = Ct;
|
|
|
385abae |
- break;
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
+ if (PRINTcircle)
|
|
|
385abae |
+ if (write_sharp_eqs(x,FALSE)==DONE) return;
|
|
|
385abae |
if (PRINTlevel >= 0 && level >= PRINTlevel) {
|
|
|
385abae |
write_ch('#');
|
|
|
385abae |
break;
|
|
|
385abae |
@@ -1044,23 +1027,8 @@ int level;
|
|
|
385abae |
write_str(">");
|
|
|
385abae |
break;
|
|
|
385abae |
}
|
|
|
385abae |
- if (PRINTcircle) {
|
|
|
385abae |
- for (vp = PRINTvs_top; vp < PRINTvs_limit; vp += 2)
|
|
|
385abae |
- if (x == *vp) {
|
|
|
385abae |
- if (vp[1] != Cnil) {
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- write_decimal((vp-PRINTvs_top)/2);
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- return;
|
|
|
385abae |
- } else {
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- write_decimal((vp-PRINTvs_top)/2);
|
|
|
385abae |
- write_ch('=');
|
|
|
385abae |
- vp[1] = Ct;
|
|
|
385abae |
- break;
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
+ if (PRINTcircle)
|
|
|
385abae |
+ if (write_sharp_eqs(x,FALSE)==DONE) return;
|
|
|
385abae |
if (PRINTlevel >= 0 && level >= PRINTlevel) {
|
|
|
385abae |
write_ch('#');
|
|
|
385abae |
break;
|
|
|
385abae |
@@ -1130,23 +1098,8 @@ int level;
|
|
|
385abae |
write_object(x->c.c_cdr, level);
|
|
|
385abae |
break;
|
|
|
385abae |
}
|
|
|
385abae |
- if (PRINTcircle) {
|
|
|
385abae |
- for (vp = PRINTvs_top; vp < PRINTvs_limit; vp += 2)
|
|
|
385abae |
- if (x == *vp) {
|
|
|
385abae |
- if (vp[1] != Cnil) {
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- write_decimal((vp-PRINTvs_top)/2);
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- return;
|
|
|
385abae |
- } else {
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- write_decimal((vp-PRINTvs_top)/2);
|
|
|
385abae |
- write_ch('=');
|
|
|
385abae |
- vp[1] = Ct;
|
|
|
385abae |
- break;
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
+ if (PRINTcircle)
|
|
|
385abae |
+ if (write_sharp_eqs(x,FALSE)==DONE) return;
|
|
|
385abae |
if (PRINTpretty) {
|
|
|
385abae |
if (x->c.c_car == sLquote &&
|
|
|
385abae |
type_of(x->c.c_cdr) == t_cons &&
|
|
|
385abae |
@@ -1192,22 +1145,15 @@ int level;
|
|
|
385abae |
}
|
|
|
385abae |
break;
|
|
|
385abae |
}
|
|
|
385abae |
- if (PRINTcircle) {
|
|
|
385abae |
- for (vp = PRINTvs_top; vp < PRINTvs_limit; vp += 2)
|
|
|
385abae |
- if (x == *vp) {
|
|
|
385abae |
- if (vp[1] != Cnil) {
|
|
|
385abae |
- write_str(" . #");
|
|
|
385abae |
- write_decimal((vp-PRINTvs_top)/2);
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- goto RIGHT_PAREN;
|
|
|
385abae |
- } else {
|
|
|
385abae |
- write_ch(INDENT);
|
|
|
385abae |
- write_str(". ");
|
|
|
385abae |
- write_object(x, level);
|
|
|
385abae |
- goto RIGHT_PAREN;
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
+ if (PRINTcircle)
|
|
|
385abae |
+ switch (write_sharp_eqs(x,TRUE)) {
|
|
|
385abae |
+ case FOUND:
|
|
|
385abae |
+ write_object(x, level);
|
|
|
385abae |
+ case DONE:
|
|
|
385abae |
+ goto RIGHT_PAREN;
|
|
|
385abae |
+ default:
|
|
|
385abae |
+ break;
|
|
|
385abae |
+ }
|
|
|
385abae |
if (i == 0 && y != OBJNULL && type_of(y) == t_symbol)
|
|
|
385abae |
write_ch(INDENT1);
|
|
|
385abae |
else
|
|
|
385abae |
@@ -1369,23 +1315,8 @@ int level;
|
|
|
385abae |
break;
|
|
|
385abae |
|
|
|
385abae |
case t_structure:
|
|
|
385abae |
- if (PRINTcircle) {
|
|
|
385abae |
- for (vp = PRINTvs_top; vp < PRINTvs_limit; vp += 2)
|
|
|
385abae |
- if (x == *vp) {
|
|
|
385abae |
- if (vp[1] != Cnil) {
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- write_decimal((vp-PRINTvs_top)/2);
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- return;
|
|
|
385abae |
- } else {
|
|
|
385abae |
- write_ch('#');
|
|
|
385abae |
- write_decimal((vp-PRINTvs_top)/2);
|
|
|
385abae |
- write_ch('=');
|
|
|
385abae |
- vp[1] = Ct;
|
|
|
385abae |
- break;
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
- }
|
|
|
385abae |
+ if (PRINTcircle)
|
|
|
385abae |
+ if (write_sharp_eqs(x,FALSE)==DONE) return;
|
|
|
385abae |
if (PRINTlevel >= 0 && level >= PRINTlevel) {
|
|
|
385abae |
write_ch('#');
|
|
|
385abae |
break;
|
|
|
385abae |
@@ -1468,48 +1399,73 @@ static int dgs;
|
|
|
385abae |
|
|
|
385abae |
#include "page.h"
|
|
|
385abae |
|
|
|
385abae |
+#define travel_seen(x) x->d.m
|
|
|
385abae |
+#define travel_pushed(x) x->d.f
|
|
|
385abae |
+#define travel_bits(x) x->md.mf
|
|
|
385abae |
+
|
|
|
385abae |
static void
|
|
|
385abae |
-travel_push_new(object x) {
|
|
|
385abae |
+travel_push(object x) {
|
|
|
385abae |
|
|
|
385abae |
- object y;
|
|
|
385abae |
int i;
|
|
|
385abae |
|
|
|
385abae |
- BEGIN:
|
|
|
385abae |
- if (NULL_OR_ON_C_STACK(x)) return;
|
|
|
385abae |
- if (is_marked(x)) {
|
|
|
385abae |
- vs_check_push(x);
|
|
|
385abae |
- vs_check_push(Cnil);
|
|
|
385abae |
+ if (NULL_OR_ON_C_STACK(x))
|
|
|
385abae |
+ return;
|
|
|
385abae |
+
|
|
|
385abae |
+ if (travel_seen(x)) {
|
|
|
385abae |
+
|
|
|
385abae |
+ if (!travel_pushed(x)) {
|
|
|
385abae |
+ vs_check_push(x);
|
|
|
385abae |
+ vs_check_push(Cnil);
|
|
|
385abae |
+ travel_pushed(x)=1;
|
|
|
385abae |
+ }
|
|
|
385abae |
+
|
|
|
385abae |
return;
|
|
|
385abae |
+
|
|
|
385abae |
}
|
|
|
385abae |
+
|
|
|
385abae |
switch (type_of(x)) {
|
|
|
385abae |
+
|
|
|
385abae |
case t_symbol:
|
|
|
385abae |
- if (dgs && x->s.s_hpack==Cnil) {mark(x);}
|
|
|
385abae |
+
|
|
|
385abae |
+ if (dgs && x->s.s_hpack==Cnil)
|
|
|
385abae |
+ travel_seen(x)=1;
|
|
|
385abae |
break;
|
|
|
385abae |
+
|
|
|
385abae |
case t_cons:
|
|
|
385abae |
- y=x->c.c_cdr;
|
|
|
385abae |
- mark(x);
|
|
|
385abae |
- travel_push_new(x->c.c_car);
|
|
|
385abae |
- x=y;
|
|
|
385abae |
- goto BEGIN;
|
|
|
385abae |
+
|
|
|
385abae |
+ {
|
|
|
385abae |
+ object y=x->c.c_cdr;
|
|
|
385abae |
+ travel_seen(x)=1;
|
|
|
385abae |
+ travel_push(x->c.c_car);
|
|
|
385abae |
+ travel_push(y);
|
|
|
385abae |
+ }
|
|
|
385abae |
break;
|
|
|
385abae |
+
|
|
|
385abae |
case t_array:
|
|
|
385abae |
- mark(x);
|
|
|
385abae |
+
|
|
|
385abae |
+ travel_seen(x)=1;
|
|
|
385abae |
if ((enum aelttype)x->a.a_elttype == aet_object)
|
|
|
385abae |
for (i=0;i<x->a.a_dim;i++)
|
|
|
385abae |
- travel_push_new(x->a.a_self[i]);
|
|
|
385abae |
+ travel_push(x->a.a_self[i]);
|
|
|
385abae |
break;
|
|
|
385abae |
+
|
|
|
385abae |
case t_vector:
|
|
|
385abae |
- mark(x);
|
|
|
385abae |
+
|
|
|
385abae |
+ travel_seen(x)=1;
|
|
|
385abae |
if ((enum aelttype)x->v.v_elttype == aet_object)
|
|
|
385abae |
for (i=0;i<x->v.v_fillp;i++)
|
|
|
385abae |
- travel_push_new(x->v.v_self[i]);
|
|
|
385abae |
+ travel_push(x->v.v_self[i]);
|
|
|
385abae |
break;
|
|
|
385abae |
+
|
|
|
385abae |
case t_structure:
|
|
|
385abae |
- mark(x);
|
|
|
385abae |
+
|
|
|
385abae |
+ travel_seen(x)=1;
|
|
|
385abae |
for (i = 0; i < S_DATA(x->str.str_def)->length; i++)
|
|
|
385abae |
- travel_push_new(structure_ref(x,x->str.str_def,i));
|
|
|
385abae |
+ travel_push(structure_ref(x,x->str.str_def,i));
|
|
|
385abae |
break;
|
|
|
385abae |
+
|
|
|
385abae |
default:
|
|
|
385abae |
+
|
|
|
385abae |
break;
|
|
|
385abae |
|
|
|
385abae |
}
|
|
|
385abae |
@@ -1518,34 +1474,45 @@ travel_push_new(object x) {
|
|
|
385abae |
|
|
|
385abae |
|
|
|
385abae |
static void
|
|
|
385abae |
-travel_clear_new(object x) {
|
|
|
385abae |
+travel_clear(object x) {
|
|
|
385abae |
|
|
|
385abae |
int i;
|
|
|
385abae |
|
|
|
385abae |
- BEGIN:
|
|
|
385abae |
- if (NULL_OR_ON_C_STACK(x) || !is_marked(x)) return;
|
|
|
385abae |
- unmark(x);
|
|
|
385abae |
+ if (NULL_OR_ON_C_STACK(x) || !travel_bits(x))
|
|
|
385abae |
+ return;
|
|
|
385abae |
+
|
|
|
385abae |
+ travel_bits(x)=0;
|
|
|
385abae |
+
|
|
|
385abae |
switch (type_of(x)) {
|
|
|
385abae |
+
|
|
|
385abae |
case t_cons:
|
|
|
385abae |
- travel_clear_new(x->c.c_car);
|
|
|
385abae |
- x=x->c.c_cdr;
|
|
|
385abae |
- goto BEGIN;
|
|
|
385abae |
+
|
|
|
385abae |
+ travel_clear(x->c.c_car);
|
|
|
385abae |
+ travel_clear(x->c.c_cdr);
|
|
|
385abae |
break;
|
|
|
385abae |
+
|
|
|
385abae |
case t_array:
|
|
|
385abae |
+
|
|
|
385abae |
if ((enum aelttype)x->a.a_elttype == aet_object)
|
|
|
385abae |
for (i=0;i<x->a.a_dim;i++)
|
|
|
385abae |
- travel_clear_new(x->a.a_self[i]);
|
|
|
385abae |
+ travel_clear(x->a.a_self[i]);
|
|
|
385abae |
break;
|
|
|
385abae |
+
|
|
|
385abae |
case t_vector:
|
|
|
385abae |
+
|
|
|
385abae |
if ((enum aelttype)x->v.v_elttype == aet_object)
|
|
|
385abae |
for (i=0;i<x->v.v_fillp;i++)
|
|
|
385abae |
- travel_clear_new(x->v.v_self[i]);
|
|
|
385abae |
+ travel_clear(x->v.v_self[i]);
|
|
|
385abae |
break;
|
|
|
385abae |
+
|
|
|
385abae |
case t_structure:
|
|
|
385abae |
+
|
|
|
385abae |
for (i = 0; i < S_DATA(x->str.str_def)->length; i++)
|
|
|
385abae |
- travel_clear_new(structure_ref(x,x->str.str_def,i));
|
|
|
385abae |
+ travel_clear(structure_ref(x,x->str.str_def,i));
|
|
|
385abae |
break;
|
|
|
385abae |
+
|
|
|
385abae |
default:
|
|
|
385abae |
+
|
|
|
385abae |
break;
|
|
|
385abae |
|
|
|
385abae |
}
|
|
|
385abae |
@@ -1558,74 +1525,14 @@ setupPRINTcircle(object x,int dogensyms)
|
|
|
385abae |
|
|
|
385abae |
BEGIN_NO_INTERRUPT;
|
|
|
385abae |
dgs=dogensyms;
|
|
|
385abae |
- travel_push_new(x);
|
|
|
385abae |
+ travel_push(x);
|
|
|
385abae |
dgs=0;
|
|
|
385abae |
PRINTvs_limit = vs_top;
|
|
|
385abae |
- travel_clear_new(x);
|
|
|
385abae |
+ travel_clear(x);
|
|
|
385abae |
END_NO_INTERRUPT;
|
|
|
385abae |
|
|
|
385abae |
}
|
|
|
385abae |
|
|
|
385abae |
-/* char travel_push_type[32]; */
|
|
|
385abae |
-
|
|
|
385abae |
-/* static void */
|
|
|
385abae |
-/* travel_push_object(x) */
|
|
|
385abae |
-/* object x; */
|
|
|
385abae |
-/* { */
|
|
|
385abae |
-/* enum type t; */
|
|
|
385abae |
-/* int i; */
|
|
|
385abae |
-/* object *vp; */
|
|
|
385abae |
-
|
|
|
385abae |
-/* cs_check(x); */
|
|
|
385abae |
-
|
|
|
385abae |
-/* BEGIN: */
|
|
|
385abae |
-/* t = type_of(x); */
|
|
|
385abae |
-/* if(travel_push_type[(int)t]==0) return; */
|
|
|
385abae |
-/* if(t==t_symbol && x->s.s_hpack != Cnil) return; */
|
|
|
385abae |
-
|
|
|
385abae |
-/* for (vp = PRINTvs_top; vp < vs_top; vp += 2) */
|
|
|
385abae |
-/* if (x == *vp) { */
|
|
|
385abae |
-/* if (vp[1] != Cnil) */
|
|
|
385abae |
-/* return; */
|
|
|
385abae |
-/* vp[1] = Ct; */
|
|
|
385abae |
-/* return; */
|
|
|
385abae |
-/* } */
|
|
|
385abae |
-/* vs_check_push(x); */
|
|
|
385abae |
-/* vs_check_push(Cnil); */
|
|
|
385abae |
-/* if (t == t_array && (enum aelttype)x->a.a_elttype == aet_object) */
|
|
|
385abae |
-/* for (i = 0; i < x->a.a_dim; i++) */
|
|
|
385abae |
-/* travel_push_object(x->a.a_self[i]); */
|
|
|
385abae |
-/* else if (t == t_vector && (enum aelttype)x->v.v_elttype == aet_object) */
|
|
|
385abae |
-/* for (i = 0; i < x->v.v_fillp; i++) */
|
|
|
385abae |
-/* travel_push_object(x->v.v_self[i]); */
|
|
|
385abae |
-/* else if (t == t_cons) { */
|
|
|
385abae |
-/* travel_push_object(x->c.c_car); */
|
|
|
385abae |
-/* x = x->c.c_cdr; */
|
|
|
385abae |
-/* goto BEGIN; */
|
|
|
385abae |
-/* } else if (t == t_structure) { */
|
|
|
385abae |
-/* for (i = 0; i < S_DATA(x->str.str_def)->length; i++) */
|
|
|
385abae |
-/* travel_push_object(structure_ref(x,x->str.str_def,i)); */
|
|
|
385abae |
-/* } */
|
|
|
385abae |
-/* } */
|
|
|
385abae |
-
|
|
|
385abae |
-/* static void */
|
|
|
385abae |
-/* setupPRINTcircle(x,dogensyms) */
|
|
|
385abae |
-/* object x; */
|
|
|
385abae |
-/* int dogensyms; */
|
|
|
385abae |
-/* { object *vp,*vq; */
|
|
|
385abae |
-/* travel_push_type[(int)t_symbol]=dogensyms; */
|
|
|
385abae |
-/* travel_push_type[(int)t_array]= */
|
|
|
385abae |
-/* (travel_push_type[(int)t_vector]=PRINTarray); */
|
|
|
385abae |
-/* travel_push_object(x); */
|
|
|
385abae |
-/* for (vp = vq = PRINTvs_top; vp < vs_top; vp += 2) */
|
|
|
385abae |
-/* if (vp[1] != Cnil) { */
|
|
|
385abae |
-/* vq[0] = vp[0]; */
|
|
|
385abae |
-/* vq[1] = Cnil; */
|
|
|
385abae |
-/* vq += 2; */
|
|
|
385abae |
-/* } */
|
|
|
385abae |
-/* PRINTvs_limit = vs_top = vq; */
|
|
|
385abae |
-/* } */
|
|
|
385abae |
-
|
|
|
385abae |
void
|
|
|
385abae |
setupPRINTdefault(x)
|
|
|
385abae |
object x;
|
|
|
385abae |
@@ -1640,8 +1547,8 @@ object x;
|
|
|
385abae |
vs_push(PRINTstream);
|
|
|
385abae |
FEwrong_type_argument(sLstream, PRINTstream);
|
|
|
385abae |
}
|
|
|
385abae |
- PRINTescape = symbol_value(sLAprint_escapeA) != Cnil;
|
|
|
385abae |
PRINTreadably = symbol_value(sLAprint_readablyA) != Cnil;
|
|
|
385abae |
+ PRINTescape = PRINTreadably || symbol_value(sLAprint_escapeA) != Cnil;
|
|
|
385abae |
PRINTpretty = symbol_value(sLAprint_prettyA) != Cnil;
|
|
|
385abae |
PRINTcircle = symbol_value(sLAprint_circleA) != Cnil;
|
|
|
385abae |
y = symbol_value(sLAprint_baseA);
|