55 lines
		
	
	
	
		
			862 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			55 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));
 | 
						|
}
 | 
						|
 |