ack/lang/basic/lib/return.c

29 lines
508 B
C
Raw Normal View History

1994-06-24 11:31:16 +00:00
/* $Id$ */
1984-11-29 14:22:02 +00:00
#define MAXNESTING 1000
int _gotable[MAXNESTING];
int topstk=0;
2016-12-12 20:15:25 +00:00
void _gosub(int x)
1984-11-29 14:22:02 +00:00
{
/* administer gosub */
#ifdef DEBUG
printf("store %d in %d\n",x,topstk);
#endif
if( topstk== MAXNESTING) error(26);
_gotable[topstk]= x;
topstk++;
}
2016-12-12 20:15:25 +00:00
int _retstmt(void)
1984-11-29 14:22:02 +00:00
{
/* make sure that a return label index is on top
of the stack */
#ifdef DEBUG
printf("return to %d %d\n",_gotable[topstk-1],topstk-1);
#endif
if( topstk==0 || topstk==MAXNESTING)
error(1);
return( _gotable[--topstk]);
}