xref: /plan9-contrib/sys/src/cmd/gs/src/iesdata.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
17dd7cddfSDavid du Colombier /* Copyright (C) 1999 Aladdin Enterprises.  All rights reserved.
27dd7cddfSDavid du Colombier 
3*593dc095SDavid du Colombier   This software is provided AS-IS with no warranty, either express or
4*593dc095SDavid du Colombier   implied.
57dd7cddfSDavid du Colombier 
6*593dc095SDavid du Colombier   This software is distributed under license and may not be copied,
7*593dc095SDavid du Colombier   modified or distributed except as expressly authorized under the terms
8*593dc095SDavid du Colombier   of the license contained in the file LICENSE in this distribution.
97dd7cddfSDavid du Colombier 
10*593dc095SDavid du Colombier   For more information about licensing, please refer to
11*593dc095SDavid du Colombier   http://www.ghostscript.com/licensing/. For information on
12*593dc095SDavid du Colombier   commercial licensing, go to http://www.artifex.com/licensing/ or
13*593dc095SDavid du Colombier   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14*593dc095SDavid du Colombier   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
157dd7cddfSDavid du Colombier */
167dd7cddfSDavid du Colombier 
17*593dc095SDavid du Colombier /* $Id: iesdata.h,v 1.4 2002/02/21 22:24:53 giles Exp $ */
187dd7cddfSDavid du Colombier /* Generic execution stack structure definition */
197dd7cddfSDavid du Colombier 
207dd7cddfSDavid du Colombier #ifndef iesdata_INCLUDED
217dd7cddfSDavid du Colombier #  define iesdata_INCLUDED
227dd7cddfSDavid du Colombier 
237dd7cddfSDavid du Colombier #include "isdata.h"
247dd7cddfSDavid du Colombier 
257dd7cddfSDavid du Colombier /* Define the execution stack structure. */
267dd7cddfSDavid du Colombier typedef struct exec_stack_s {
277dd7cddfSDavid du Colombier 
287dd7cddfSDavid du Colombier     ref_stack_t stack;		/* the actual execution stack */
297dd7cddfSDavid du Colombier 
307dd7cddfSDavid du Colombier /*
317dd7cddfSDavid du Colombier  * To improve performance, we cache the currentfile pointer
327dd7cddfSDavid du Colombier  * (i.e., `shallow-bind' it in Lisp terminology).  The invariant is as
337dd7cddfSDavid du Colombier  * follows: either esfile points to the currentfile slot on the estack
347dd7cddfSDavid du Colombier  * (i.e., the topmost slot with an executable file), or it is 0.
357dd7cddfSDavid du Colombier  * To maintain the invariant, it is sufficient that whenever a routine
367dd7cddfSDavid du Colombier  * pushes or pops anything on the estack, if the object *might* be
377dd7cddfSDavid du Colombier  * an executable file, invoke esfile_clear_cache(); alternatively,
387dd7cddfSDavid du Colombier  * immediately after pushing an object, invoke esfile_check_cache().
397dd7cddfSDavid du Colombier  */
407dd7cddfSDavid du Colombier     ref *current_file;
417dd7cddfSDavid du Colombier 
427dd7cddfSDavid du Colombier } exec_stack_t;
437dd7cddfSDavid du Colombier 
447dd7cddfSDavid du Colombier /*
457dd7cddfSDavid du Colombier  * current_file is cleared by garbage collection, so we don't declare it
467dd7cddfSDavid du Colombier  * as a pointer.
477dd7cddfSDavid du Colombier  */
487dd7cddfSDavid du Colombier #define public_st_exec_stack()	/* in interp.c */\
497dd7cddfSDavid du Colombier   gs_public_st_suffix_add0(st_exec_stack, exec_stack_t, "exec_stack_t",\
507dd7cddfSDavid du Colombier     exec_stack_enum_ptrs, exec_stack_reloc_ptrs, st_ref_stack)
517dd7cddfSDavid du Colombier #define st_exec_stack_num_ptrs st_ref_stack_num_ptrs
527dd7cddfSDavid du Colombier 
537dd7cddfSDavid du Colombier #endif /* iesdata_INCLUDED */
54