Annotation of researchv10no/cmd/make/gram.c, revision 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.