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