@@ -26,6 +26,8 @@ static char *rcsid="@(#)$Id$";
26
26
27
27
#define syntaxtype (ch ) ((enum ch_type)(current_syntax[thr_self()][ch]))
28
28
29
+ int read_suppress = FALSE;
30
+
29
31
extern pointer FEATURES ,READBASE ,QREADTABLE ;
30
32
extern pointer QNOT , QAND , QOR ; /*eval_read_cond, Jan/1995*/
31
33
@@ -238,7 +240,8 @@ static pointer readlabdef(ctx,f,labx)
238
240
context * ctx ;
239
241
pointer f ; /*stream*/
240
242
eusinteger_t labx ;
241
- { pointer unsol , * unsolp , result ,newlab ;
243
+ { if (read_suppress ) return (read1 (ctx ,f ));
244
+ pointer unsol , * unsolp , result ,newlab ;
242
245
243
246
if (findlabel (labx )!= NIL ) error (E_READLABEL ,makeint (labx )); /*already defined*/
244
247
newlab = (pointer )makelabref (makeint (labx ),UNBOUND ,oblabels [thr_self ()]-> c .lab .next );
@@ -279,7 +282,8 @@ static pointer readlabref(ctx,f,val,subchar)
279
282
pointer f ;
280
283
eusinteger_t val ;
281
284
int subchar ;
282
- { register pointer obj ,element ;
285
+ { if (read_suppress ) return (NIL );
286
+ register pointer obj ,element ;
283
287
obj = findlabel (val );
284
288
if (obj == NIL ) error (E_READLABEL ,makeint (val )); /*undefined label*/
285
289
if ((element = obj -> c .lab .value )== UNBOUND ) return (obj );
@@ -298,7 +302,7 @@ register int size;
298
302
register int i = 0 ;
299
303
Char ch ;
300
304
ch = nextch (ctx ,f );
301
- if (size > 0 ) {
305
+ if (size > 0 && ! read_suppress ) {
302
306
result = makevector (C_VECTOR ,size );
303
307
vpush (result );
304
308
while ((ch != ')' ) && (ch != EOF ) && (i < size )) {
@@ -421,7 +425,8 @@ register pointer s; /*input stream*/
421
425
static pointer readstructure (ctx ,s )
422
426
register context * ctx ;
423
427
register pointer s ; /*input stream*/
424
- { register pointer name , klass , slot , elem , result , varvec , * slotp ;
428
+ { if (read_suppress ) return (read1 (ctx ,s ));
429
+ register pointer name , klass , slot , elem , result , varvec , * slotp ;
425
430
Char ch ;
426
431
427
432
ch = nextch (ctx ,s );
@@ -519,7 +524,8 @@ register context *ctx;
519
524
pointer f ;
520
525
eusinteger_t val ;
521
526
int subchar ;
522
- { register int i = 0 ;
527
+ { if (read_suppress ) return (read1 (ctx ,f ));
528
+ register int i = 0 ;
523
529
char buf [WORD_SIZE /2 ], ch ;
524
530
ch = readch (f ); val = 0 ;
525
531
while (i < WORD_SIZE /2 && ch >='0' && ch < '8' ) { buf [i ++ ] = ch ; ch = readch (f );}
@@ -554,6 +560,7 @@ pointer f;
554
560
{ pointer p ;
555
561
p = read1 (ctx ,f );
556
562
/* if (debug) prinx(ctx,p,Spevalof(QSTDOUT)); */
563
+ if (read_suppress ) return (UNBOUND );
557
564
return (eval (ctx ,p ));}
558
565
559
566
static pointer eval_read_cond (ctx ,expr )
@@ -587,6 +594,7 @@ register pointer f;
587
594
{ register pointer flag ,result ;
588
595
flag = read1 (ctx ,f );
589
596
vpush (flag );
597
+ read_suppress = TRUE;
590
598
result = read1 (ctx ,f );
591
599
if (eval_read_cond (ctx ,flag )== NIL ) result = (pointer )UNBOUND ;
592
600
vpop ();
@@ -598,6 +606,7 @@ register pointer f;
598
606
{ register pointer flag ,result ;
599
607
flag = read1 (ctx ,f );
600
608
vpush (flag );
609
+ read_suppress = TRUE;
601
610
result = read1 (ctx ,f );
602
611
if (eval_read_cond (ctx ,flag )!= NIL ) result = (pointer )UNBOUND ;
603
612
vpop ();
@@ -638,7 +647,9 @@ char token[];
638
647
if (ch == EOF ) return (UNBOUND );}
639
648
subchar = to_upper (ch );
640
649
macrofunc = Spevalof (QREADTABLE )-> c .rdtab .dispatch -> c .vec .v [subchar ];
641
- if (macrofunc == NIL ) error (E_USER ,(pointer )"no # macro defined" );
650
+ if (macrofunc == NIL ) {
651
+ if (read_suppress ) return (read1 (ctx ,f ));
652
+ error (E_USER ,(pointer )"no # macro defined" );}
642
653
if (isint (macrofunc )) { /*internal macro*/
643
654
intmac = (pointer (* )())(intval (macrofunc ));
644
655
result = (* intmac )(ctx ,f ,val ,subchar ,token );}
@@ -693,6 +704,7 @@ char token[];
693
704
doublecolon = 0 ;
694
705
pkg = (pointer )searchpkg ((byte * )token ,colon );}
695
706
if (pkg == (pointer )NULL ) {
707
+ if (read_suppress ) return (NIL );
696
708
if (doublecolon ) colon -- ;
697
709
pkgstr = makestring (token ,colon );
698
710
vpush (pkgstr );
@@ -1014,6 +1026,7 @@ register context *ctx;
1014
1026
register pointer f ,recursivep ;
1015
1027
{ register pointer val ;
1016
1028
Char ch ;
1029
+ read_suppress = FALSE;
1017
1030
current_syntax [thr_self ()]= Spevalof (QREADTABLE )-> c .rdtab .syntax -> c .str .chars ;
1018
1031
ch = nextch (ctx ,f );
1019
1032
if (ch == EOF ) return ((pointer )EOF );
0 commit comments