2 |
- |
1 |
/* Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
|
|
|
2 |
|
|
|
3 |
This software is provided AS-IS with no warranty, either express or
|
|
|
4 |
implied.
|
|
|
5 |
|
|
|
6 |
This software is distributed under license and may not be copied,
|
|
|
7 |
modified or distributed except as expressly authorized under the terms
|
|
|
8 |
of the license contained in the file LICENSE in this distribution.
|
|
|
9 |
|
|
|
10 |
For more information about licensing, please refer to
|
|
|
11 |
http://www.ghostscript.com/licensing/. For information on
|
|
|
12 |
commercial licensing, go to http://www.artifex.com/licensing/ or
|
|
|
13 |
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
|
|
|
14 |
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
|
15 |
*/
|
|
|
16 |
|
|
|
17 |
/* $Id: iesdata.h,v 1.4 2002/02/21 22:24:53 giles Exp $ */
|
|
|
18 |
/* Generic execution stack structure definition */
|
|
|
19 |
|
|
|
20 |
#ifndef iesdata_INCLUDED
|
|
|
21 |
# define iesdata_INCLUDED
|
|
|
22 |
|
|
|
23 |
#include "isdata.h"
|
|
|
24 |
|
|
|
25 |
/* Define the execution stack structure. */
|
|
|
26 |
typedef struct exec_stack_s {
|
|
|
27 |
|
|
|
28 |
ref_stack_t stack; /* the actual execution stack */
|
|
|
29 |
|
|
|
30 |
/*
|
|
|
31 |
* To improve performance, we cache the currentfile pointer
|
|
|
32 |
* (i.e., `shallow-bind' it in Lisp terminology). The invariant is as
|
|
|
33 |
* follows: either esfile points to the currentfile slot on the estack
|
|
|
34 |
* (i.e., the topmost slot with an executable file), or it is 0.
|
|
|
35 |
* To maintain the invariant, it is sufficient that whenever a routine
|
|
|
36 |
* pushes or pops anything on the estack, if the object *might* be
|
|
|
37 |
* an executable file, invoke esfile_clear_cache(); alternatively,
|
|
|
38 |
* immediately after pushing an object, invoke esfile_check_cache().
|
|
|
39 |
*/
|
|
|
40 |
ref *current_file;
|
|
|
41 |
|
|
|
42 |
} exec_stack_t;
|
|
|
43 |
|
|
|
44 |
/*
|
|
|
45 |
* current_file is cleared by garbage collection, so we don't declare it
|
|
|
46 |
* as a pointer.
|
|
|
47 |
*/
|
|
|
48 |
#define public_st_exec_stack() /* in interp.c */\
|
|
|
49 |
gs_public_st_suffix_add0(st_exec_stack, exec_stack_t, "exec_stack_t",\
|
|
|
50 |
exec_stack_enum_ptrs, exec_stack_reloc_ptrs, st_ref_stack)
|
|
|
51 |
#define st_exec_stack_num_ptrs st_ref_stack_num_ptrs
|
|
|
52 |
|
|
|
53 |
#endif /* iesdata_INCLUDED */
|