@@ -61,77 +61,49 @@ newvarobject(tp, size)
6161 return op ;
6262}
6363
64- int StopPrint ; /* Flag to indicate printing must be stopped */
65-
66- static int prlevel ;
67-
68- void
64+ int
6965printobject (op , fp , flags )
7066 object * op ;
7167 FILE * fp ;
7268 int flags ;
7369{
74- /* Hacks to make printing a long or recursive object interruptible */
75- /* XXX Interrupts should leave a more permanent error */
76- prlevel ++ ;
77- if (!StopPrint && intrcheck ()) {
78- fprintf (fp , "\n[print interrupted]\n" );
79- StopPrint = 1 ;
70+ if (intrcheck ()) {
71+ err_set (KeyboardInterrupt );
72+ return -1 ;
8073 }
81- if (!StopPrint ) {
82- if (op == NULL ) {
83- fprintf (fp , "<nil>" );
84- }
85- else {
86- if (op -> ob_refcnt <= 0 )
87- fprintf (fp , "(refcnt %d):" , op -> ob_refcnt );
88- if (op -> ob_type -> tp_print == NULL ) {
89- fprintf (fp , "<%s object at %lx>" ,
90- op -> ob_type -> tp_name , (long )op );
91- }
92- else {
93- (* op -> ob_type -> tp_print )(op , fp , flags );
94- }
95- }
74+ if (op == NULL ) {
75+ fprintf (fp , "<nil>" );
9676 }
97- prlevel -- ;
98- if (prlevel == 0 )
99- StopPrint = 0 ;
77+ else {
78+ if (op -> ob_refcnt <= 0 )
79+ fprintf (fp , "(refcnt %d):" , op -> ob_refcnt );
80+ if (op -> ob_type -> tp_print == NULL )
81+ fprintf (fp , "<%s object at %lx>" ,
82+ op -> ob_type -> tp_name , (long )op );
83+ else
84+ return (* op -> ob_type -> tp_print )(op , fp , flags );
85+ }
86+ return 0 ;
10087}
10188
10289object *
10390reprobject (v )
10491 object * v ;
10592{
106- object * w = NULL ;
107- /* Hacks to make converting a long or recursive object interruptible */
108- prlevel ++ ;
109- if (!StopPrint && intrcheck ()) {
110- StopPrint = 1 ;
93+ if (intrcheck ()) {
11194 err_set (KeyboardInterrupt );
95+ return NULL ;
11296 }
113- if (!StopPrint ) {
114- if (v == NULL ) {
115- w = newstringobject ("<NULL>" );
116- }
117- else if (v -> ob_type -> tp_repr == NULL ) {
118- char buf [100 ];
119- sprintf (buf , "<%.80s object at %lx>" ,
120- v -> ob_type -> tp_name , (long )v );
121- w = newstringobject (buf );
122- }
123- else {
124- w = (* v -> ob_type -> tp_repr )(v );
125- }
126- if (StopPrint ) {
127- XDECREF (w );
128- w = NULL ;
129- }
97+ if (v == NULL )
98+ return newstringobject ("<NULL>" );
99+ else if (v -> ob_type -> tp_repr == NULL ) {
100+ char buf [120 ];
101+ sprintf (buf , "<%.80s object at %lx>" ,
102+ v -> ob_type -> tp_name , (long )v );
103+ return newstringobject (buf );
130104 }
131- prlevel -- ;
132- if (prlevel == 0 )
133- StopPrint = 0 ;
134- return w ;
105+ else
106+ return (* v -> ob_type -> tp_repr )(v );
135107}
136108
137109int
@@ -191,13 +163,14 @@ There is (and should be!) no way to create other objects of this type,
191163so there is exactly one (which is indestructible, by the way).
192164*/
193165
194- static void
166+ static int
195167none_print (op , fp , flags )
196168 object * op ;
197169 FILE * fp ;
198170 int flags ;
199171{
200172 fprintf (fp , "None" );
173+ return 0 ;
201174}
202175
203176static object *
@@ -278,7 +251,8 @@ printrefs(fp)
278251 fprintf (fp , "Remaining objects:\n" );
279252 for (op = refchain ._ob_next ; op != & refchain ; op = op -> _ob_next ) {
280253 fprintf (fp , "[%d] " , op -> ob_refcnt );
281- printobject (op , fp , 0 );
254+ if (printobject (op , fp , 0 ) != 0 )
255+ err_clear ();
282256 putc ('\n' , fp );
283257 }
284258}
0 commit comments