Annotation of researchv10no/cmd/make/gram.c, revision 1.1.1.1

1.1       root        1: 
                      2: # line 1 "gram.y"
                      3: #include "defs"
                      4: static char *sccsid = "@(#)gram.y      8th Edition (Bell Labs) 85/05/14";
                      5: 
                      6: # line 6 "gram.y"
                      7: typedef union 
                      8:        {
                      9:        struct shblock *yshblock;
                     10:        depblkp ydepblock;
                     11:        nameblkp ynameblock;
                     12:        } YYSTYPE;
                     13: # define NAME 257
                     14: # define SHELLINE 258
                     15: # define START 259
                     16: # define MACRODEF 260
                     17: # define COLON 261
                     18: # define DOUBLECOLON 262
                     19: # define GREATER 263
                     20: # define AMPER 264
                     21: # define AMPERAMPER 265
                     22: #define yyclearin yychar = -1
                     23: #define yyerrok yyerrflag = 0
                     24: extern int yychar;
                     25: extern short yyerrflag;
                     26: #ifndef YYMAXDEPTH
                     27: #define YYMAXDEPTH 150
                     28: #endif
                     29: YYSTYPE yylval, yyval;
                     30: 
                     31: # line 21 "gram.y"
                     32: struct depblock *pp;
                     33: FSTATIC struct shblock *prevshp;
                     34: 
                     35: FSTATIC struct nameblock *lefts[NLEFTS];
                     36: struct nameblock *leftp;
                     37: FSTATIC int nlefts;
                     38: 
                     39: struct lineblock *lp, *lpp;
                     40: FSTATIC struct depblock *prevdep;
                     41: FSTATIC int sepc;
                     42: FSTATIC int allnowait;
                     43: 
                     44: FSTATIC struct fstack
                     45:        {
                     46:        FILE *fin;
                     47:        char *fname;
                     48:        int lineno;
                     49:        } filestack[MAXINCLUDE];
                     50: FSTATIC int ninclude = 0;
                     51: # define YYERRCODE 256
                     52: 
                     53: # line 150 "gram.y"
                     54: 
                     55: 
                     56: FSTATIC char *zznextc; /* null if need another line;
                     57:                           otherwise points to next char */
                     58: FSTATIC int yylineno;
                     59: FSTATIC FILE * fin;
                     60: 
                     61: parse(name)
                     62: char *name;
                     63: {
                     64: extern int yylineno;
                     65: FILE *stream;
                     66: extern char *zznextc;
                     67: 
                     68: if(name == CHNULL)
                     69:        {
                     70:        stream = NULL;
                     71:        name = "(builtin-rules)";
                     72:        }
                     73: else if(equal(name, "-"))
                     74:        {
                     75:        stream = stdin;
                     76:        name = "(stdin)";
                     77:        }
                     78: else if( (stream = fopen(name, "r")) == NULL)
                     79:        return NO;
                     80: filestack[0].fname = copys(name);
                     81: ninclude = 1;
                     82: fin = stream;
                     83: yylineno = 0;
                     84: zznextc = 0;
                     85: 
                     86: if( yyparse() )
                     87:        fatal("Description file error");
                     88: 
                     89: if(fin)
                     90:        fclose(fin);
                     91: return YES;
                     92: }
                     93: 
                     94: 
                     95: yylex()
                     96: {
                     97: register char *p;
                     98: register char *q;
                     99: char word[INMAX];
                    100: 
                    101: if(! zznextc )
                    102:        return nextlin() ;
                    103: 
                    104: while( isspace(*zznextc) )
                    105:        ++zznextc;
                    106: switch(*zznextc)
                    107:        {
                    108:        case '\0':
                    109:                return nextlin() ;
                    110: 
                    111:        case '|':
                    112:                if(zznextc[1]==':')
                    113:                        {
                    114:                        zznextc += 2;
                    115:                        return DOUBLECOLON;
                    116:                        }
                    117:                break;
                    118:        case ':':
                    119:                if(*++zznextc == ':')
                    120:                        {
                    121:                        ++zznextc;
                    122:                        return DOUBLECOLON;
                    123:                        }
                    124:                return COLON;
                    125:        case '>':
                    126:                ++zznextc;
                    127:                return GREATER;
                    128:        case '&':
                    129:                if(*++zznextc == '&')
                    130:                        {
                    131:                        ++zznextc;
                    132:                        return AMPERAMPER;
                    133:                        }
                    134:                return AMPER;
                    135:        case ';':
                    136:                return retsh(zznextc) ;
                    137:        }
                    138: 
                    139: p = zznextc;
                    140: q = word;
                    141: 
                    142: while( ! ( funny[*p] & TERMINAL) )
                    143:        *q++ = *p++;
                    144: 
                    145: if(p != zznextc)
                    146:        {
                    147:        *q = '\0';
                    148:        if((yylval.ynameblock=srchname(word))==0)
                    149:                yylval.ynameblock = makename(word);
                    150:        zznextc = p;
                    151:        return NAME;
                    152:        }
                    153: 
                    154: else   {
                    155:        char junk[100];
                    156:        sprintf(junk, "Bad character %c (octal %o), line %d of file %s",
                    157:                *zznextc, *zznextc, yylineno, filestack[ninclude-1].fname);
                    158:        fatal(junk);
                    159:        }
                    160: return 0;      /* never executed */
                    161: }
                    162: 
                    163: 
                    164: 
                    165: 
                    166: 
                    167: retsh(q)
                    168: char *q;
                    169: {
                    170: register char *p;
                    171: struct shblock *sp;
                    172: char *copys();
                    173: 
                    174: for(p=q+1 ; *p==' '||*p=='\t' ; ++p)  ;
                    175: 
                    176: sp = ALLOC(shblock);
                    177: sp->nxtshblock = NULL;
                    178: sp->shbp = (fin ? copys(p) : p );
                    179: yylval.yshblock = sp;
                    180: zznextc = 0;
                    181: return SHELLINE;
                    182: }
                    183: 
                    184: nextlin()
                    185: {
                    186: static char yytext[INMAX];
                    187: static char *yytextl   = yytext+INMAX;
                    188: char *text, templin[INMAX];
                    189: register char c;
                    190: register char *p, *t;
                    191: char lastch, *lastchp;
                    192: extern char **linesptr;
                    193: int incom;
                    194: int kc;
                    195: 
                    196: again:
                    197: 
                    198:        incom = NO;
                    199:        zznextc = 0;
                    200: 
                    201: if(fin == NULL)
                    202:        {
                    203:        if( (text = *linesptr++) == 0)
                    204:                return 0;
                    205:        ++yylineno;
                    206:        }
                    207: 
                    208: else   {
                    209:        for(p = text = yytext ; p<yytextl ; *p++ = kc)
                    210:                switch(kc = getc(fin))
                    211:                        {
                    212:                        case '\t':
                    213:                                if(p == yytext)
                    214:                                        incom = YES;
                    215:                                break;
                    216: 
                    217:                        case ';':
                    218:                                incom = YES;
                    219:                                break;
                    220: 
                    221:                        case '#':
                    222:                                if(! incom)
                    223:                                        kc = '\0';
                    224:                                break;
                    225: 
                    226:                        case '\n':
                    227:                                ++yylineno;
                    228:                                if(p==yytext || p[-1]!='\\')
                    229:                                        {
                    230:                                        *p = '\0';
                    231:                                        goto endloop;
                    232:                                        }
                    233:                                p[-1] = ' ';
                    234:                                while( (kc=getc(fin))=='\t' || kc==' ' || kc=='\n')
                    235:                                        if(kc == '\n')
                    236:                                                ++yylineno;
                    237:        
                    238:                                if(kc != EOF)
                    239:                                        break;
                    240:                        case EOF:
                    241:                                *p = '\0';
                    242:                                if(ninclude > 1)
                    243:                                        {
                    244:                                        register struct fstack *stp;
                    245:                                        fclose(fin);
                    246:                                        --ninclude;
                    247:                                        stp = filestack + ninclude;
                    248:                                        fin = stp->fin;
                    249:                                        yylineno = stp->lineno;
                    250:                                        free(stp->fname);
                    251:                                        goto again;
                    252:                                        }
                    253:                                return 0;
                    254:                        }
                    255: 
                    256:        fatal("line too long");
                    257:        }
                    258: 
                    259: endloop:
                    260: 
                    261:        if((c = text[0]) == '\t')
                    262:                return retsh(text) ;
                    263:        
                    264:        if(isalpha(c) || isdigit(c) || c==' ' || c=='.')
                    265:                for(p=text+1; *p!='\0'; )
                    266:                        if(*p == ':')
                    267:                                break;
                    268:                        else if(*p++ == '=')
                    269:                                {
                    270:                                eqsign(text);
                    271:                                return MACRODEF;
                    272:                                }
                    273: 
                    274: 
                    275: if(!strncmp(text, "include", 7) && isinclude(text+7))
                    276:        goto again;
                    277: 
                    278: /* substitute for macros on dependency line up to the semicolon if any */
                    279: 
                    280: for(t = yytext ; *t!='\0' && *t!=';' ; ++t)
                    281:        ;
                    282: 
                    283: lastchp = t;
                    284: lastch = *t;
                    285: *t = '\0';     /* replace the semi with a null so subst will stop */
                    286: 
                    287: subst(yytext, templin);                /* Substitute for macros on dependency lines */
                    288: 
                    289: if(lastch)     /* copy the stuff after the semicolon */
                    290:        {
                    291:        *lastchp = lastch;
                    292:        strcat(templin, lastchp);
                    293:        }
                    294: 
                    295: strcpy(yytext, templin);
                    296: 
                    297: for(p = zznextc = text ; *p ; ++p )
                    298:        if(*p!=' ' && *p!='\t')
                    299:                return START;
                    300: goto again;
                    301: }
                    302: 
                    303: 
                    304: 
                    305: isinclude(s)
                    306: register char *s;
                    307: {
                    308: register char *t;
                    309: register struct fstack *p;
                    310: 
                    311: for(t=s; *t==' ' || *t=='\t' ; ++t)
                    312:        ;
                    313: if(t == s)
                    314:        return NO;
                    315: 
                    316: for(s = t; *s!='\n' && *s!='#' && *s!='\0' ; ++s)
                    317:        if(*s == ':')
                    318:                return NO;
                    319: *s = '\0';
                    320: 
                    321: if(ninclude >= MAXINCLUDE)
                    322:        fatal("include depth exceeded");
                    323: p = filestack + ninclude;
                    324: p->fin = fin;
                    325: p->lineno = yylineno;
                    326: p->fname = copys(t);
                    327: if( (fin = fopen(t, "r")) == NULL)
                    328:        fatal1("Cannot open include file %s", t);
                    329: yylineno = 0;
                    330: ++ninclude;
                    331: return YES;
                    332: }
                    333: 
                    334: 
                    335: 
                    336: yyerror(s)
                    337: char *s;
                    338: {
                    339: char buf[100];
                    340: 
                    341: sprintf(buf, "line %d of file %s: %s",
                    342:                yylineno, filestack[ninclude-1].fname, s);
                    343: fatal(buf);
                    344: }
                    345: short yyexca[] ={
                    346: -1, 1,
                    347:        0, -1,
                    348:        -2, 0,
                    349:        };
                    350: # define YYNPROD 22
                    351: # define YYLAST 21
                    352: short yyact[]={
                    353: 
                    354:   17,  20,  21,  16,   7,   9,  11,  18,  19,  12,
                    355:   13,   5,   2,   1,   3,   4,  10,   8,   6,  14,
                    356:   15 };
                    357: short yypact[]={
                    358: 
                    359: -1000,-245,-1000,-253,-1000,-1000,-252,-1000,-255,-1000,
                    360: -257,-263,-1000,-1000,-1000,-256,-1000,-1000,-1000,-1000,
                    361: -1000,-1000 };
                    362: short yypgo[]={
                    363: 
                    364:    0,  20,  19,  18,  17,  16,  13,  12,   6 };
                    365: short yyr1[]={
                    366: 
                    367:    0,   6,   6,   7,   7,   7,   7,   3,   3,   4,
                    368:    4,   5,   5,   5,   5,   5,   8,   8,   2,   2,
                    369:    1,   1 };
                    370: short yyr2[]={
                    371: 
                    372:    0,   0,   2,   1,   1,   4,   1,   1,   2,   0,
                    373:    1,   1,   2,   2,   2,   2,   1,   1,   0,   1,
                    374:    1,   2 };
                    375: short yychk[]={
                    376: 
                    377: -1000,  -6,  -7, 259, 260, 256,  -3, 257,  -4, 257,
                    378:   -5,  -8, 261, 262,  -2,  -1, 258, 257, 264, 265,
                    379:  264, 258 };
                    380: short yydef[]={
                    381: 
                    382:    1,  -2,   2,   3,   4,   6,   9,   7,  18,   8,
                    383:   10,  11,  16,  17,   5,  19,  20,  13,  14,  15,
                    384:   12,  21 };
                    385: # ifdef YYDEBUG
                    386: # include "y.debug"
                    387: # endif
                    388: 
                    389: # define YYFLAG -1000
                    390: # define YYERROR goto yyerrlab
                    391: # define YYACCEPT return(0)
                    392: # define YYABORT return(1)
                    393: 
                    394: /*     parser for yacc output  */
                    395: 
                    396: #ifdef YYDEBUG
                    397: int yydebug = 0; /* 1 for debugging */
                    398: #endif
                    399: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
                    400: int yychar = -1; /* current input token number */
                    401: int yynerrs = 0;  /* number of errors */
                    402: short yyerrflag = 0;  /* error recovery flag */
                    403: 
                    404: yyparse()
                    405: {      short yys[YYMAXDEPTH];
                    406:        int yyj, yym;
                    407:        register YYSTYPE *yypvt;
                    408:        register int yystate, yyn;
                    409:        register short *yyps;
                    410:        register YYSTYPE *yypv;
                    411:        register short *yyxi;
                    412: 
                    413:        yystate = 0;
                    414:        yychar = -1;
                    415:        yynerrs = 0;
                    416:        yyerrflag = 0;
                    417:        yyps= &yys[-1];
                    418:        yypv= &yyv[-1];
                    419: 
                    420: yystack:    /* put a state and value onto the stack */
                    421: #ifdef YYDEBUG
                    422:        if(yydebug >= 3)
                    423:                if(yychar < 0 || yytoknames[yychar] == 0)
                    424:                        printf("char %d in %s", yychar, yystates[yystate]);
                    425:                else
                    426:                        printf("%s in %s", yytoknames[yychar], yystates[yystate]);
                    427: #endif
                    428:        if( ++yyps >= &yys[YYMAXDEPTH] ) { 
                    429:                yyerror( "yacc stack overflow" ); 
                    430:                return(1); 
                    431:        }
                    432:        *yyps = yystate;
                    433:        ++yypv;
                    434:        *yypv = yyval;
                    435: yynewstate:
                    436:        yyn = yypact[yystate];
                    437:        if(yyn <= YYFLAG) goto yydefault; /* simple state */
                    438:        if(yychar<0) {
                    439:                yychar = yylex();
                    440: #ifdef YYDEBUG
                    441:                if(yydebug >= 2) {
                    442:                        if(yychar <= 0)
                    443:                                printf("lex EOF\n");
                    444:                        else if(yytoknames[yychar])
                    445:                                printf("lex %s\n", yytoknames[yychar]);
                    446:                        else
                    447:                                printf("lex (%c)\n", yychar);
                    448:                }
                    449: #endif
                    450:                if(yychar < 0)
                    451:                        yychar = 0;
                    452:        }
                    453:        if((yyn += yychar) < 0 || yyn >= YYLAST)
                    454:                goto yydefault;
                    455:        if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
                    456:                yychar = -1;
                    457:                yyval = yylval;
                    458:                yystate = yyn;
                    459:                if( yyerrflag > 0 ) --yyerrflag;
                    460:                goto yystack;
                    461:        }
                    462: yydefault:
                    463:        /* default state action */
                    464:        if( (yyn=yydef[yystate]) == -2 ) {
                    465:                if(yychar < 0) {
                    466:                        yychar = yylex();
                    467: #ifdef YYDEBUG
                    468:                        if(yydebug >= 2)
                    469:                                if(yychar < 0)
                    470:                                        printf("lex EOF\n");
                    471:                                else
                    472:                                        printf("lex %s\n", yytoknames[yychar]);
                    473: #endif
                    474:                        if(yychar < 0)
                    475:                                yychar = 0;
                    476:                }
                    477:                /* look through exception table */
                    478:                for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate);
                    479:                        yyxi += 2 ) ; /* VOID */
                    480:                while( *(yyxi+=2) >= 0 ){
                    481:                        if( *yyxi == yychar ) break;
                    482:                }
                    483:                if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
                    484:        }
                    485:        if( yyn == 0 ){ /* error */
                    486:                /* error ... attempt to resume parsing */
                    487:                switch( yyerrflag ){
                    488:                case 0:   /* brand new error */
                    489: #ifdef YYDEBUG
                    490:                        yyerror("syntax error\n%s", yystates[yystate]);
                    491:                        if(yytoknames[yychar])
                    492:                                yyerror("saw %s\n", yytoknames[yychar]);
                    493:                        else if(yychar >= ' ' && yychar < '\177')
                    494:                                yyerror("saw `%c'\n", yychar);
                    495:                        else if(yychar == 0)
                    496:                                yyerror("saw EOF\n");
                    497:                        else
                    498:                                yyerror("saw char 0%o\n", yychar);
                    499: #else
                    500:                        yyerror( "syntax error" );
                    501: #endif
                    502: yyerrlab:
                    503:                        ++yynerrs;
                    504:                case 1:
                    505:                case 2: /* incompletely recovered error ... try again */
                    506:                        yyerrflag = 3;
                    507:                        /* find a state where "error" is a legal shift action */
                    508:                        while ( yyps >= yys ) {
                    509:                                yyn = yypact[*yyps] + YYERRCODE;
                    510:                                if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
                    511:                                        yystate = yyact[yyn];  /* simulate a shift of "error" */
                    512:                                        goto yystack;
                    513:                                }
                    514:                                yyn = yypact[*yyps];
                    515:                                /* the current yyps has no shift onn "error", pop stack */
                    516: #ifdef YYDEBUG
                    517:                                if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
                    518: #endif
                    519:                                --yyps;
                    520:                                --yypv;
                    521:                        }
                    522:                        /* there is no state on the stack with an error shift ... abort */
                    523: yyabort:
                    524:                        return(1);
                    525:                case 3:  /* no shift yet; clobber input char */
                    526: #ifdef YYDEBUG
                    527:                        if( yydebug ) {
                    528:                                printf("error recovery discards ");
                    529:                                if(yytoknames[yychar])
                    530:                                        printf("%s\n", yytoknames[yychar]);
                    531:                                else if(yychar >= ' ' && yychar < '\177')
                    532:                                        printf("`%c'\n", yychar);
                    533:                                else if(yychar == 0)
                    534:                                        printf("EOF\n");
                    535:                                else
                    536:                                        printf("char 0%o\n", yychar);
                    537:                        }
                    538: #endif
                    539:                        if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
                    540:                        yychar = -1;
                    541:                        goto yynewstate;   /* try again in the same state */
                    542:                }
                    543:        }
                    544:        /* reduction by production yyn */
                    545: #ifdef YYDEBUG
                    546:        if(yydebug) {   char *s;
                    547:                printf("reduce %d in:\n\t", yyn);
                    548:                for(s = yystates[yystate]; *s; s++) {
                    549:                        putchar(*s);
                    550:                        if(*s == '\n' && *(s+1))
                    551:                                putchar('\t');
                    552:                }
                    553:        }
                    554: #endif
                    555:        yyps -= yyr2[yyn];
                    556:        yypvt = yypv;
                    557:        yypv -= yyr2[yyn];
                    558:        yyval = yypv[1];
                    559:        yym=yyn;
                    560:        /* consult goto table to find next state */
                    561:        yyn = yyr1[yyn];
                    562:        yyj = yypgo[yyn] + *yyps + 1;
                    563:        if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
                    564:        switch(yym){
                    565:                
                    566: case 5:
                    567: # line 49 "gram.y"
                    568:  {
                    569:            while( --nlefts >= 0)
                    570:                {
                    571:                wildp iswild(), wp;
                    572: 
                    573:                leftp = lefts[nlefts];
                    574:                if(wp = iswild(leftp->namep))
                    575:                        {
                    576:                        leftp->septype = SOMEDEPS;
                    577:                        if(lastwild)
                    578:                                lastwild->next = wp;
                    579:                        else
                    580:                                firstwild = wp;
                    581:                        lastwild = wp;
                    582:                        }
                    583: 
                    584:                if(leftp->septype == 0)
                    585:                        leftp->septype = sepc;
                    586:                else if(leftp->septype != sepc)
                    587:                        {
                    588:                        if(! wp)
                    589:                                fprintf(stderr,
                    590:                                        "Inconsistent rules lines for `%s'\n",
                    591:                                        leftp->namep);
                    592:                        }
                    593:                else if(sepc==ALLDEPS && leftp->namep[0]!='.' && yypvt[-0].yshblock!=0)
                    594:                        {
                    595:                        for(lp=leftp->linep; lp->nxtlineblock; lp=lp->nxtlineblock)
                    596:                        if(lp->shp)
                    597:                                fprintf(stderr,
                    598:                                        "Multiple rules lines for `%s'\n",
                    599:                                        leftp->namep);
                    600:                        }
                    601: 
                    602:                lp = ALLOC(lineblock);
                    603:                lp->nxtlineblock = NULL;
                    604:                lp->depp = yypvt[-1].ydepblock;
                    605:                lp->shp = yypvt[-0].yshblock;
                    606:                if(wp)
                    607:                        wp->linep = lp;
                    608: 
                    609:                if(equal(leftp->namep, ".SUFFIXES") && yypvt[-1].ydepblock==0)
                    610:                        leftp->linep = 0;
                    611:                else if(leftp->linep == 0)
                    612:                        leftp->linep = lp;
                    613:                else    {
                    614:                        for(lpp = leftp->linep; lpp->nxtlineblock;
                    615:                                lpp = lpp->nxtlineblock) ;
                    616:                                if(sepc==ALLDEPS && leftp->namep[0]=='.')
                    617:                                        lpp->shp = 0;
                    618:                        lpp->nxtlineblock = lp;
                    619:                        }
                    620:                }
                    621:        } break;
                    622: case 7:
                    623: # line 106 "gram.y"
                    624:  { lefts[0] = yypvt[-0].ynameblock; nlefts = 1; } break;
                    625: case 8:
                    626: # line 107 "gram.y"
                    627:  { lefts[nlefts++] = yypvt[-0].ynameblock;
                    628:                if(nlefts>=NLEFTS) fatal("Too many lefts"); } break;
                    629: case 9:
                    630: # line 112 "gram.y"
                    631: {
                    632:                char junk[10];
                    633:                sprintf(junk, "%d", yylineno);
                    634:                fatal1("Must be a separator on rules line %s", junk);
                    635:                } break;
                    636: case 11:
                    637: # line 120 "gram.y"
                    638:  { prevdep = 0;  yyval.ydepblock = 0; allnowait = NO; } break;
                    639: case 12:
                    640: # line 121 "gram.y"
                    641:  { prevdep = 0; yyval.ydepblock = 0; allnowait = YES; } break;
                    642: case 13:
                    643: # line 122 "gram.y"
                    644:  {
                    645:                          pp = ALLOC(depblock);
                    646:                          pp->nxtdepblock = NULL;
                    647:                          pp->depname = yypvt[-0].ynameblock;
                    648:                          pp->nowait = allnowait;
                    649:                          if(prevdep == 0) yyval.ydepblock = pp;
                    650:                          else  prevdep->nxtdepblock = pp;
                    651:                          prevdep = pp;
                    652:                          } break;
                    653: case 14:
                    654: # line 131 "gram.y"
                    655:  { if(prevdep) prevdep->nowait = YES; } break;
                    656: case 16:
                    657: # line 135 "gram.y"
                    658:  { sepc = ALLDEPS; } break;
                    659: case 17:
                    660: # line 136 "gram.y"
                    661:  { sepc = SOMEDEPS; } break;
                    662: case 18:
                    663: # line 139 "gram.y"
                    664:  {yyval.yshblock = 0; } break;
                    665: case 19:
                    666: # line 140 "gram.y"
                    667:  { yyval.yshblock = yypvt[-0].yshblock; } break;
                    668: case 20:
                    669: # line 143 "gram.y"
                    670:  { yyval.yshblock = yypvt[-0].yshblock;  prevshp = yypvt[-0].yshblock; } break;
                    671: case 21:
                    672: # line 144 "gram.y"
                    673:  { yyval.yshblock = yypvt[-1].yshblock;
                    674:                        prevshp->nxtshblock = yypvt[-0].yshblock;
                    675:                        prevshp = yypvt[-0].yshblock;
                    676:                        } break;
                    677:        }
                    678:        goto yystack;  /* stack new state and value */
                    679: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.