ack/util/int/fra.c
1988-06-22 16:57:09 +00:00

56 lines
862 B
C

/* $Header$ */
#include "logging.h"
#include "global.h"
#include "mem.h"
#include "shadow.h"
#include "fra.h"
#include "alloc.h"
#ifdef LOGGING
char *FRA_sh; /* shadowbytes */
#endif LOGGING
init_FRA() {
FRA = Malloc(FRALimit, "Function Return Area");
#ifdef LOGGING
FRA_sh = Malloc(FRALimit, "shadowspace for Function Return Area");
#endif LOGGING
FRA_def = UNDEFINED; /* set FRA illegal */
}
pushFRA(sz)
size sz;
{
register int i;
if (sz == 0)
return;
st_inc(max(sz, wsize));
for (i = 0; i < sz; i++) {
stack_loc(SP + i) = FRA[i];
#ifdef LOGGING
st_sh(SP + i) = (i < FRASize ? FRA_sh[i] : UNDEFINED);
#endif LOGGING
}
}
popFRA(sz)
size sz;
{
register int i;
if (sz == 0)
return;
for (i = 0; i < sz; i++) {
FRA[i] = stack_loc(SP + i);
#ifdef LOGGING
FRA_sh[i] = st_sh(SP + i);
#endif LOGGING
}
st_dec(max(sz, wsize));
}