ack/lang/basic/lib/return.c

30 lines
525 B
C
Raw Permalink Normal View History

#include "lib.h"
1984-11-29 14:22:02 +00:00
#define MAXNESTING 1000
1984-11-29 14:22:02 +00:00
int _gotable[MAXNESTING];
int topstk = 0;
1984-11-29 14:22:02 +00:00
2016-12-12 20:15:25 +00:00
void _gosub(int x)
1984-11-29 14:22:02 +00:00
{
/* administer gosub */
1984-11-29 14:22:02 +00:00
#ifdef DEBUG
printf("store %d in %d\n", x, topstk);
1984-11-29 14:22:02 +00:00
#endif
if (topstk == MAXNESTING)
error(26);
_gotable[topstk] = x;
1984-11-29 14:22:02 +00:00
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
1984-11-29 14:22:02 +00:00
of the stack */
#ifdef DEBUG
printf("return to %d %d\n", _gotable[topstk - 1], topstk - 1);
1984-11-29 14:22:02 +00:00
#endif
if (topstk == 0 || topstk == MAXNESTING)
1984-11-29 14:22:02 +00:00
error(1);
return (_gotable[--topstk]);
1984-11-29 14:22:02 +00:00
}