franz/tahoe/tahoe.c
/*
 * This removes the frame from the stack for the thunk
 * and retrieves various data.  (Actually merges it into
 * its own stack frame).
 */
This removes the frame from the stack for the thunk
and retrieves various data.  (Actually merges it into
its own stack frame).
This removes the frame from the stack for the thunk and retrieves various data . ( Actually merges it into its own stack frame ) .
lispval
thunkstack1(retfromthunk)
{
	register int *handy, *midthunk;
	int *arglist;
	lispval func;
	int count;
	handy = &retfromthunk;
	arglist = handy + 2;		
	handy[-1] = handy[2];		
	midthunk = (int *) handy[-3];	
	handy[-3] = retfromthunk;
	handy[-2] += (8 + handy[1]);	
	count = *midthunk;
	func = (lispval) midthunk[1];
	return(dothunk(func,count,arglist));
}
lispval thunkstack1 ( retfromthunk ) { register int * handy , * midthunk ; int * arglist ; lispval func ; int count ; handy = & retfromthunk ; arglist = handy + 2 ; handy [ -1 ] = handy [ 2 ] ; midthunk = ( int * ) handy [ -3 ] ; handy [ -3 ] = retfromthunk ; handy [ -2 ] += ( 8 + handy [ 1 ] ) ; count = * midthunk ; func = ( lispval ) midthunk [ 1 ] ; return ( dothunk ( func , count , arglist ) ) ; }
This removes the frame from the stack for the thunk
 and retrieves various data.
This removes the frame from the stack for the thunk and retrieves various data .
/* should be +3, first is taken as
					   vax arglist count and ignored */ /* unlink frame */ /* our oldpc points to mid thunk */ /* save mask for thunk is 0,
					   adjust bytes to remove from us  */ /* you could even merge this in and avoid another callf! */