@@ -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,8 +594,10 @@ register pointer f;
587
594
{ register pointer flag ,result ;
588
595
flag = read1 (ctx ,f );
589
596
vpush (flag );
590
- result = read1 (ctx ,f );
591
- if (eval_read_cond (ctx ,flag )== NIL ) result = (pointer )UNBOUND ;
597
+ if (eval_read_cond (ctx ,flag )== NIL ) {
598
+ read_suppress = TRUE; read1 (ctx ,f );
599
+ result = (pointer )UNBOUND ;}
600
+ else result = read1 (ctx ,f );
592
601
vpop ();
593
602
return (result );}
594
603
@@ -598,8 +607,10 @@ register pointer f;
598
607
{ register pointer flag ,result ;
599
608
flag = read1 (ctx ,f );
600
609
vpush (flag );
601
- result = read1 (ctx ,f );
602
- if (eval_read_cond (ctx ,flag )!= NIL ) result = (pointer )UNBOUND ;
610
+ if (eval_read_cond (ctx ,flag )!= NIL ) {
611
+ read_suppress = TRUE; read1 (ctx ,f );
612
+ result = (pointer )UNBOUND ;}
613
+ else result = read1 (ctx ,f );
603
614
vpop ();
604
615
return (result );}
605
616
@@ -638,7 +649,9 @@ char token[];
638
649
if (ch == EOF ) return (UNBOUND );}
639
650
subchar = to_upper (ch );
640
651
macrofunc = Spevalof (QREADTABLE )-> c .rdtab .dispatch -> c .vec .v [subchar ];
641
- if (macrofunc == NIL ) error (E_USER ,(pointer )"no # macro defined" );
652
+ if (macrofunc == NIL ) {
653
+ if (read_suppress ) return (read1 (ctx ,f ));
654
+ error (E_USER ,(pointer )"no # macro defined" );}
642
655
if (isint (macrofunc )) { /*internal macro*/
643
656
intmac = (pointer (* )())(intval (macrofunc ));
644
657
result = (* intmac )(ctx ,f ,val ,subchar ,token );}
@@ -693,6 +706,7 @@ char token[];
693
706
doublecolon = 0 ;
694
707
pkg = (pointer )searchpkg ((byte * )token ,colon );}
695
708
if (pkg == (pointer )NULL ) {
709
+ if (read_suppress ) return (NIL );
696
710
if (doublecolon ) colon -- ;
697
711
pkgstr = makestring (token ,colon );
698
712
vpush (pkgstr );
@@ -1014,6 +1028,7 @@ register context *ctx;
1014
1028
register pointer f ,recursivep ;
1015
1029
{ register pointer val ;
1016
1030
Char ch ;
1031
+ read_suppress = FALSE;
1017
1032
current_syntax [thr_self ()]= Spevalof (QREADTABLE )-> c .rdtab .syntax -> c .str .chars ;
1018
1033
ch = nextch (ctx ,f );
1019
1034
if (ch == EOF ) return ((pointer )EOF );
0 commit comments