# line 108 "../mip/cgram.y"
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
# line 127 "../mip/cgram.y"
static char fakename
[NCHNAM
+1];
# line 814 "../mip/cgram.y"
mkty( t
, d
, s
) unsigned t
; {
return( block( TYPE
, NIL
, NIL
, t
, d
, s
) );
bdty( op
, p
, v
) NODE
*p
; {
q
= block( op
, p
, NIL
, INT
, 0, INT
);
dstash( n
){ /* put n into the dimension table */
if( curdim
>= DIMTABSZ
-1 ){
cerror( "dimension table overflow");
if( psavbc
> & asavbc
[BCSZ
-4 ] ){
cerror( "whiles, fors, etc. too deeply nested");
flostat
= *--psavbc
| (flostat
&mask
);
addcase(p
) NODE
*p
; { /* add case to switch */
p
= optim( p
); /* change enum to ints */
uerror( "non-constant case expression");
uerror( "case not in switch");
if( swp
>= &swtab
[SWITSZ
] ){
cerror( "switch table overflow");
deflab( swp
->slab
= getlab() );
adddef(){ /* add default case to switch */
if( swtab
[swx
].slab
>= 0 ){
uerror( "duplicate default in switch");
uerror( "default not inside switch");
deflab( swtab
[swx
].slab
= getlab() );
/* begin a switch block */
if( swp
>= &swtab
[SWITSZ
] ){
cerror( "switch table overflow");
swend(){ /* end a switch block */
register struct sw
*swbeg
, *p
, *q
, *r
, *r1
;
/* bubble largest to end */
for( q
=swbeg
; q
<r
; ++q
){
if( q
->sval
> (q
+1)->sval
){
for( p
= swbeg
+1; p
<swp
; ++p
){
if( p
->sval
== (p
-1)->sval
){
uerror( "duplicate case in switch, %d", tempi
=p
->sval
);
genswitch( swbeg
-1, swp
-swbeg
);
# define YYERROR goto yyerrlab
# define YYACCEPT return(0)
# define YYABORT return(1)
/* parser for yacc output */
int yydebug
= 0; /* 1 for debugging */
YYSTYPE yyv
[YYMAXDEPTH
]; /* where the values are stored */
int yychar
= -1; /* current input token number */
int yynerrs
= 0; /* number of errors */
short yyerrflag
= 0; /* error recovery flag */
register short yystate
, *yyps
, yyn
;
yystack
: /* put a state and value onto the stack */
if( yydebug
) printf( "state %d, char 0%o\n", yystate
, yychar
);
if( ++yyps
> &yys
[YYMAXDEPTH
] ) { yyerror( "yacc stack overflow" ); return(1); }
if( yyn
<= YYFLAG
) goto yydefault
; /* simple state */
if( yychar
<0 ) if( (yychar
=yylex())<0 ) yychar
=0;
if( (yyn
+= yychar
)<0 || yyn
>= YYLAST
) goto yydefault
;
if( yychk
[ yyn
=yyact
[ yyn
] ] == yychar
){ /* valid shift */
if( yyerrflag
> 0 ) --yyerrflag
;
/* default state action */
if( (yyn
=yydef
[yystate
]) == -2 ) {
if( yychar
<0 ) if( (yychar
=yylex())<0 ) yychar
= 0;
/* look through exception table */
for( yyxi
=yyexca
; (*yyxi
!= (-1)) || (yyxi
[1]!=yystate
) ; yyxi
+= 2 ) ; /* VOID */
while( *(yyxi
+=2) >= 0 ){
if( *yyxi
== yychar
) break;
if( (yyn
= yyxi
[1]) < 0 ) return(0); /* accept */
if( yyn
== 0 ){ /* error */
/* error ... attempt to resume parsing */
case 0: /* brand new error */
yyerror( "syntax error" );
case 2: /* incompletely recovered error ... try again */
/* find a state where "error" is a legal shift action */
yyn
= yypact
[*yyps
] + YYERRCODE
;
if( yyn
>= 0 && yyn
< YYLAST
&& yychk
[yyact
[yyn
]] == YYERRCODE
){
yystate
= yyact
[yyn
]; /* simulate a shift of "error" */
/* the current yyps has no shift onn "error", pop stack */
if( yydebug
) printf( "error recovery pops state %d, uncovers %d\n", *yyps
, yyps
[-1] );
/* there is no state on the stack with an error shift ... abort */
case 3: /* no shift yet; clobber input char */
if( yydebug
) printf( "error recovery discards char %d\n", yychar
);
if( yychar
== 0 ) goto yyabort
; /* don't discard EOF, quit */
goto yynewstate
; /* try again in the same state */
/* reduction by production yyn */
if( yydebug
) printf("reduce %d\n",yyn
);
/* consult goto table to find next state */
yyj
= yypgo
[yyn
] + *yyps
+ 1;
if( yyj
>=YYLAST
|| yychk
[ yystate
= yyact
[yyj
] ] != -yyn
) yystate
= yyact
[yypgo
[yyn
]];
# line 133 "../mip/cgram.y"
# line 136 "../mip/cgram.y"
{ curclass
= SNULL
; blevel
= 0; } break;
# line 138 "../mip/cgram.y"
{ curclass
= SNULL
; blevel
= 0; } break;
# line 142 "../mip/cgram.y"
{ yypvt
[-1].nodep
->op
= FREE
; } break;
# line 144 "../mip/cgram.y"
{ yypvt
[-2].nodep
->op
= FREE
; } break;
# line 145 "../mip/cgram.y"
defid( tymerge(yypvt
[-1].nodep
,yypvt
[-0].nodep
), curclass
==STATIC
?STATIC
:EXTDEF
);
pfstab(stab
[yypvt
[-0].nodep
->rval
].sname
);
# line 151 "../mip/cgram.y"
if( blevel
) cerror( "function level error" );
if( reached
) retstat
|= NRETVAL
;
yypvt
[-3].nodep
->op
= FREE
;
# line 162 "../mip/cgram.y"
# line 167 "../mip/cgram.y"
# line 173 "../mip/cgram.y"
{ yypvt
[-1].nodep
->op
= FREE
;
# line 179 "../mip/cgram.y"
{ yypvt
[-2].nodep
->op
= FREE
;
# line 187 "../mip/cgram.y"
{ yypvt
[-1].nodep
->op
= FREE
; } break;
# line 189 "../mip/cgram.y"
{ yypvt
[-2].nodep
->op
= FREE
; } break;
# line 193 "../mip/cgram.y"
{ curclass
= SNULL
; yypvt
[-2].nodep
->op
= FREE
; } break;
# line 195 "../mip/cgram.y"
{ curclass
= SNULL
; yypvt
[-1].nodep
->op
= FREE
; } break;
# line 197 "../mip/cgram.y"
{ curclass
= SNULL
; } break;
# line 201 "../mip/cgram.y"
{ yyval
.nodep
= mkty(INT
,0,INT
); curclass
= SNULL
; } break;
# line 204 "../mip/cgram.y"
{ yyval
.nodep
= yypvt
[-0].nodep
; } break;
# line 207 "../mip/cgram.y"
{ yyval
.nodep
= mkty(INT
,0,INT
); } break;
# line 209 "../mip/cgram.y"
{ curclass
= SNULL
; } break;
# line 214 "../mip/cgram.y"
{ curclass
= yypvt
[-0].intval
; } break;
# line 219 "../mip/cgram.y"
{ yypvt
[-1].nodep
->type
= types( yypvt
[-1].nodep
->type
, yypvt
[-0].nodep
->type
, UNDEF
);
yypvt
[-0].nodep
->op
= FREE
;
# line 223 "../mip/cgram.y"
{ yypvt
[-2].nodep
->type
= types( yypvt
[-2].nodep
->type
, yypvt
[-1].nodep
->type
, yypvt
[-0].nodep
->type
);
yypvt
[-1].nodep
->op
= yypvt
[-0].nodep
->op
= FREE
;
# line 231 "../mip/cgram.y"
{ yyval
.nodep
= dclstruct(yypvt
[-4].intval
); } break;
# line 233 "../mip/cgram.y"
{ yyval
.nodep
= rstruct(yypvt
[-0].intval
,0); stwart
= instruct
; } break;
# line 237 "../mip/cgram.y"
{ yyval
.intval
= bstruct(-1,0); } break;
# line 239 "../mip/cgram.y"
{ yyval
.intval
= bstruct(yypvt
[-0].intval
,0); } break;
# line 247 "../mip/cgram.y"
{ moedef( yypvt
[-0].intval
); } break;
# line 249 "../mip/cgram.y"
{ strucoff
= yypvt
[-0].intval
; moedef( yypvt
[-2].intval
); } break;
# line 253 "../mip/cgram.y"
{ yyval
.nodep
= dclstruct(yypvt
[-4].intval
); } break;
# line 255 "../mip/cgram.y"
{ yyval
.nodep
= rstruct(yypvt
[-0].intval
,yypvt
[-1].intval
); } break;
# line 259 "../mip/cgram.y"
{ yyval
.intval
= bstruct(-1,yypvt
[-0].intval
); stwart
=0; } break;
# line 261 "../mip/cgram.y"
{ yyval
.intval
= bstruct(yypvt
[-0].intval
,yypvt
[-1].intval
); stwart
=0; } break;
# line 269 "../mip/cgram.y"
{ curclass
= SNULL
; stwart
=0; yypvt
[-1].nodep
->op
= FREE
; } break;
# line 271 "../mip/cgram.y"
sprintf( fakename
, "$%dFAKE", fake
++ );
defid( tymerge(yypvt
[-0].nodep
, bdty(NAME
,NIL
,lookup( fakename
, SMOS
))), curclass
);
yypvt
[-0].nodep
->op
= FREE
;
# line 285 "../mip/cgram.y"
{ defid( tymerge(yypvt
[-1].nodep
,yypvt
[-0].nodep
), curclass
); stwart
= instruct
; } break;
# line 286 "../mip/cgram.y"
{yyval
.nodep
=yypvt
[-2].nodep
;} break;
# line 287 "../mip/cgram.y"
{ defid( tymerge(yypvt
[-4].nodep
,yypvt
[-0].nodep
), curclass
); stwart
= instruct
; } break;
# line 293 "../mip/cgram.y"
{ if( !(instruct
&INSTRUCT
) ) uerror( "field outside of structure" );
if( yypvt
[-0].intval
<0 || yypvt
[-0].intval
>= FIELD
){
uerror( "illegal field size" );
defid( tymerge(yypvt
[-3].nodep
,yypvt
[-2].nodep
), FIELD
|yypvt
[-0].intval
);
# line 303 "../mip/cgram.y"
{ if( !(instruct
&INSTRUCT
) ) uerror( "field outside of structure" );
falloc( stab
, yypvt
[-0].intval
, -1, yypvt
[-2].nodep
); /* alignment or hole */
# line 308 "../mip/cgram.y"
{ yyval
.nodep
= NIL
; } break;
# line 313 "../mip/cgram.y"
yyval
.nodep
= bdty( UNARY MUL
, yypvt
[-0].nodep
, 0 ); } break;
# line 316 "../mip/cgram.y"
yyval
.nodep
= bdty( UNARY CALL
, yypvt
[-2].nodep
, 0 ); } break;
# line 319 "../mip/cgram.y"
yyval
.nodep
= bdty( LB
, yypvt
[-2].nodep
, 0 ); } break;
# line 322 "../mip/cgram.y"
if( (int)yypvt
[-1].intval
<= 0 ) werror( "zero or negative subscript" );
yyval
.nodep
= bdty( LB
, yypvt
[-3].nodep
, yypvt
[-1].intval
); } break;
# line 326 "../mip/cgram.y"
{ yyval
.nodep
= bdty( NAME
, NIL
, yypvt
[-0].intval
); } break;
# line 328 "../mip/cgram.y"
{ yyval
.nodep
=yypvt
[-1].nodep
; } break;
# line 331 "../mip/cgram.y"
# line 333 "../mip/cgram.y"
# line 335 "../mip/cgram.y"
# line 337 "../mip/cgram.y"
# line 339 "../mip/cgram.y"
{ yyval
.nodep
= yypvt
[-1].nodep
; } break;
# line 341 "../mip/cgram.y"
if( blevel
!=0 ) uerror("function declaration in bad context");
yyval
.nodep
= bdty( UNARY CALL
, bdty(NAME
,NIL
,yypvt
[-2].intval
), 0 );
# line 347 "../mip/cgram.y"
yyval
.nodep
= bdty( UNARY CALL
, bdty(NAME
,NIL
,yypvt
[-1].intval
), 0 );
# line 354 "../mip/cgram.y"
/* turn off typedefs for argument names */
# line 361 "../mip/cgram.y"
{ ftnarg( yypvt
[-0].intval
); stwart
= SEENAME
; } break;
# line 363 "../mip/cgram.y"
{ ftnarg( yypvt
[-0].intval
); stwart
= SEENAME
; } break;
# line 368 "../mip/cgram.y"
{yyval
.nodep
=yypvt
[-2].nodep
;} break;
# line 372 "../mip/cgram.y"
{ defid( yypvt
[-0].nodep
= tymerge(yypvt
[-1].nodep
,yypvt
[-0].nodep
), curclass
);
beginit(yypvt
[-0].nodep
->rval
);
# line 379 "../mip/cgram.y"
{ nidcl( tymerge(yypvt
[-1].nodep
,yypvt
[-0].nodep
) ); } break;
# line 381 "../mip/cgram.y"
{ defid( tymerge(yypvt
[-1].nodep
,yypvt
[-0].nodep
), uclass(curclass
) );
# line 385 "../mip/cgram.y"
{ doinit( yypvt
[-0].nodep
);
# line 388 "../mip/cgram.y"
# line 397 "../mip/cgram.y"
{ doinit( yypvt
[-0].nodep
); } break;
# line 399 "../mip/cgram.y"
# line 411 "../mip/cgram.y"
{ werror( "old-fashioned initialization: use =" ); } break;
# line 416 "../mip/cgram.y"
# line 426 "../mip/cgram.y"
if( blevel
== 1 ) blevel
= 0;
# line 440 "../mip/cgram.y"
if( blevel
== 1 ) blevel
= 0;
# line 450 "../mip/cgram.y"
{ if( blevel
== 1 ) dclargs();
if( psavbc
> &asavbc
[BCSZ
-2] ) cerror( "nesting too deep" );
# line 459 "../mip/cgram.y"
{ ecomp( yypvt
[-1].nodep
); } break;
# line 462 "../mip/cgram.y"
{ deflab(yypvt
[-1].intval
);
# line 466 "../mip/cgram.y"
{ if( yypvt
[-1].intval
!= NOLAB
){
deflab( yypvt
[-1].intval
);
# line 472 "../mip/cgram.y"
if( (flostat
&FBRK
) || !(flostat
&FLOOP
)) reached
= 1;
# line 479 "../mip/cgram.y"
if( flostat
& FCONT
) reached
= 1;
ecomp( buildtree( CBRANCH
, buildtree( NOT
, yypvt
[-2].nodep
, NIL
), bcon( yypvt
[-6].intval
) ) );
# line 487 "../mip/cgram.y"
if( flostat
&FCONT
) reached
= 1;
if( yypvt
[-2].nodep
) ecomp( yypvt
[-2].nodep
);
branch( yypvt
[-3].intval
);
if( (flostat
&FBRK
) || !(flostat
&FLOOP
) ) reached
= 1;
# line 497 "../mip/cgram.y"
{ if( reached
) branch( brklab
);
deflab( yypvt
[-1].intval
);
if( (flostat
&FBRK
) || !(flostat
&FDEF
) ) reached
= 1;
# line 505 "../mip/cgram.y"
{ if( brklab
== NOLAB
) uerror( "illegal break");
else if(reached
) branch( brklab
);
# line 512 "../mip/cgram.y"
{ if( contlab
== NOLAB
) uerror( "illegal continue");
# line 518 "../mip/cgram.y"
if( !reached
) werror( "statement not reached");
# line 525 "../mip/cgram.y"
temp
= buildtree( NAME
, NIL
, NIL
);
temp
->type
= DECREF( temp
->type
);
temp
= buildtree( RETURN
, temp
, yypvt
[-1].nodep
);
/* now, we have the type of the RHS correct */
ecomp( buildtree( FORCE
, temp
->right
, NIL
) );
# line 539 "../mip/cgram.y"
q
= block( FREE
, NIL
, NIL
, INT
|ARY
, 0, INT
);
q
->rval
= idname
= yypvt
[-1].intval
;
stab
[idname
].suse
= -lineno
;
branch( stab
[idname
].offset
);
# line 553 "../mip/cgram.y"
q
= block( FREE
, NIL
, NIL
, INT
|ARY
, 0, LABEL
);
q
->rval
= yypvt
[-1].intval
;
# line 560 "../mip/cgram.y"
{ addcase(yypvt
[-1].nodep
);
# line 564 "../mip/cgram.y"
# line 570 "../mip/cgram.y"
if( !reached
) werror( "loop not entered at top");
deflab( yyval
.intval
= getlab() );
# line 579 "../mip/cgram.y"
{ ecomp( buildtree( CBRANCH
, yypvt
[-1].nodep
, bcon( yyval
.intval
=getlab()) ) ) ;
# line 584 "../mip/cgram.y"
{ if( reached
) branch( yyval
.intval
= getlab() );
else yyval
.intval
= NOLAB
;
deflab( yypvt
[-2].intval
);
# line 592 "../mip/cgram.y"
if( !reached
) werror( "loop not entered at top");
if( yypvt
[-1].nodep
->op
== ICON
&& yypvt
[-1].nodep
->lval
!= 0 ) flostat
= FLOOP
;
deflab( contlab
= getlab() );
if( flostat
== FLOOP
) tfree( yypvt
[-1].nodep
);
else ecomp( buildtree( CBRANCH
, yypvt
[-1].nodep
, bcon( brklab
) ) );
# line 603 "../mip/cgram.y"
{ if( yypvt
[-3].nodep
) ecomp( yypvt
[-3].nodep
);
else if( !reached
) werror( "loop not entered at top");
deflab( yyval
.intval
= getlab() );
if( yypvt
[-1].nodep
) ecomp( buildtree( CBRANCH
, yypvt
[-1].nodep
, bcon( brklab
) ) );
# line 615 "../mip/cgram.y"
ecomp( buildtree( FORCE
, yypvt
[-1].nodep
, NIL
) );
branch( yyval
.intval
= getlab() );
# line 624 "../mip/cgram.y"
{ yyval
.intval
=instruct
; stwart
=instruct
=0; } break;
# line 626 "../mip/cgram.y"
{ yyval
.intval
= icons( yypvt
[-0].nodep
); instruct
=yypvt
[-1].intval
; } break;
# line 630 "../mip/cgram.y"
{ yyval
.nodep
=0; } break;
# line 635 "../mip/cgram.y"
# line 639 "../mip/cgram.y"
if( yychar
==RELOP
||yychar
==EQUOP
||yychar
==AND
||yychar
==OR
||yychar
==ER
){
if( hflag
) werror( "precedence confusion possible: parenthesize!" );
yyval
.nodep
= buildtree( yypvt
[-1].intval
, yypvt
[-2].nodep
, yypvt
[-0].nodep
);
# line 649 "../mip/cgram.y"
{ yypvt
[-1].intval
= COMOP
;
# line 653 "../mip/cgram.y"
# line 655 "../mip/cgram.y"
{ if(yychar
==SHIFTOP
) goto precplaint
; else goto bop
; } break;
# line 657 "../mip/cgram.y"
{ if(yychar
==SHIFTOP
) goto precplaint
; else goto bop
; } break;
# line 659 "../mip/cgram.y"
{ if(yychar
==PLUS
||yychar
==MINUS
) goto precplaint
; else goto bop
; } break;
# line 661 "../mip/cgram.y"
# line 663 "../mip/cgram.y"
# line 665 "../mip/cgram.y"
{ if( yychar
==RELOP
||yychar
==EQUOP
) goto preconf
; else goto bop
; } break;
# line 667 "../mip/cgram.y"
{ if(yychar
==RELOP
||yychar
==EQUOP
) goto preconf
; else goto bop
; } break;
# line 669 "../mip/cgram.y"
{ if(yychar
==RELOP
||yychar
==EQUOP
) goto preconf
; else goto bop
; } break;
# line 671 "../mip/cgram.y"
# line 673 "../mip/cgram.y"
# line 675 "../mip/cgram.y"
yyval
.nodep
= buildtree( ASG yypvt
[-2].intval
, yypvt
[-3].nodep
, yypvt
[-0].nodep
);
# line 679 "../mip/cgram.y"
# line 681 "../mip/cgram.y"
# line 683 "../mip/cgram.y"
# line 685 "../mip/cgram.y"
# line 687 "../mip/cgram.y"
# line 689 "../mip/cgram.y"
# line 691 "../mip/cgram.y"
# line 693 "../mip/cgram.y"
{ yyval
.nodep
=buildtree(QUEST
, yypvt
[-4].nodep
, buildtree( COLON
, yypvt
[-2].nodep
, yypvt
[-0].nodep
) );
# line 696 "../mip/cgram.y"
{ werror( "old-fashioned assignment operator" ); goto bop
; } break;
# line 698 "../mip/cgram.y"
# line 702 "../mip/cgram.y"
{ yyval
.nodep
= buildtree( yypvt
[-0].intval
, yypvt
[-1].nodep
, bcon(1) ); } break;
# line 704 "../mip/cgram.y"
yyval
.nodep
= buildtree( UNARY yypvt
[-1].intval
, yypvt
[-0].nodep
, NIL
);
# line 708 "../mip/cgram.y"
{ if( ISFTN(yypvt
[-0].nodep
->type
) || ISARY(yypvt
[-0].nodep
->type
) ){
werror( "& before array or function: ignored" );
yyval
.nodep
= yypvt
[-0].nodep
;
# line 715 "../mip/cgram.y"
# line 717 "../mip/cgram.y"
yyval
.nodep
= buildtree( yypvt
[-1].intval
, yypvt
[-0].nodep
, NIL
);
# line 721 "../mip/cgram.y"
{ yyval
.nodep
= buildtree( yypvt
[-1].intval
==INCR
? ASG PLUS
: ASG MINUS
,
# line 726 "../mip/cgram.y"
{ yyval
.nodep
= doszof( yypvt
[-0].nodep
); } break;
# line 728 "../mip/cgram.y"
{ yyval
.nodep
= buildtree( CAST
, yypvt
[-2].nodep
, yypvt
[-0].nodep
);
yyval
.nodep
->left
->op
= FREE
;
yyval
.nodep
= yyval
.nodep
->right
;
# line 734 "../mip/cgram.y"
{ yyval
.nodep
= doszof( yypvt
[-1].nodep
); } break;
# line 736 "../mip/cgram.y"
{ yyval
.nodep
= buildtree( UNARY MUL
, buildtree( PLUS
, yypvt
[-3].nodep
, yypvt
[-1].nodep
), NIL
); } break;
# line 738 "../mip/cgram.y"
{ yyval
.nodep
=buildtree(UNARY CALL
,yypvt
[-1].nodep
,NIL
); } break;
# line 740 "../mip/cgram.y"
{ yyval
.nodep
=buildtree(CALL
,yypvt
[-2].nodep
,yypvt
[-1].nodep
); } break;
# line 742 "../mip/cgram.y"
{ if( yypvt
[-1].intval
== DOT
){
yypvt
[-2].nodep
= buildtree( UNARY AND
, yypvt
[-2].nodep
, NIL
);
idname
= yypvt
[-0].intval
;
yyval
.nodep
= buildtree( STREF
, yypvt
[-2].nodep
, buildtree( NAME
, NIL
, NIL
) );
# line 749 "../mip/cgram.y"
{ idname
= yypvt
[-0].intval
;
/* recognize identifiers in initializations */
if( blevel
==0 && stab
[idname
].stype
== UNDEF
) {
werror( "undeclared initializer name %.8s", stab
[idname
].sname
);
q
= block( FREE
, NIL
, NIL
, INT
, 0, INT
);
yyval
.nodep
=buildtree(NAME
,NIL
,NIL
);
stab
[yypvt
[-0].intval
].suse
= -lineno
;
# line 762 "../mip/cgram.y"
yyval
.nodep
->lval
= lastcon
;
yyval
.nodep
->rval
= NONAME
;
if( yypvt
[-0].intval
) yyval
.nodep
->csiz
= yyval
.nodep
->type
= ctype(LONG
);
# line 768 "../mip/cgram.y"
{ yyval
.nodep
=buildtree(FCON
,NIL
,NIL
);
yyval
.nodep
->dval
= dcon
;
# line 772 "../mip/cgram.y"
{ yyval
.nodep
= getstr(); /* get string contents */ } break;
# line 774 "../mip/cgram.y"
{ yyval
.nodep
=yypvt
[-1].nodep
; } break;
# line 778 "../mip/cgram.y"
yyval
.nodep
= tymerge( yypvt
[-1].nodep
, yypvt
[-0].nodep
);
yypvt
[-1].nodep
->op
= FREE
;
# line 786 "../mip/cgram.y"
{ yyval
.nodep
= bdty( NAME
, NIL
, -1 ); } break;
# line 788 "../mip/cgram.y"
{ yyval
.nodep
= bdty( UNARY CALL
, bdty(NAME
,NIL
,-1),0); } break;
# line 790 "../mip/cgram.y"
{ yyval
.nodep
= bdty( UNARY CALL
, yypvt
[-3].nodep
, 0 ); } break;
# line 792 "../mip/cgram.y"
# line 794 "../mip/cgram.y"
# line 796 "../mip/cgram.y"
# line 798 "../mip/cgram.y"
{ yyval
.nodep
= yypvt
[-1].nodep
; } break;
# line 802 "../mip/cgram.y"
{ if( stab
[yypvt
[-1].intval
].stype
== UNDEF
){
q
= block( FREE
, NIL
, NIL
, FTN
|INT
, 0, INT
);
q
->rval
= yypvt
[-1].intval
;
idname
= yypvt
[-1].intval
;
yyval
.nodep
=buildtree(NAME
,NIL
,NIL
);
stab
[idname
].suse
= -lineno
;
goto yystack
; /* stack new state and value */