Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
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 */