/* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". * * Author: Ceriel J.H. Jacobs */ /* S C O P E M E C H A N I S M */ #ifndef SCOPE_H_ #define SCOPE_H_ struct def; #define OPENSCOPE 0 /* Indicating an open scope */ #define CLOSEDSCOPE 1 /* Indicating a closed scope (module) */ #define SC_CHKFORW 1 /* Check for forward definitions when closing a scope */ #define SC_CHKPROC 2 /* Check for forward procedure definitions when closing a scope */ #define SC_REVERSE 4 /* Reverse list of definitions, to get it back into original order */ struct scope { /* struct scope *next; */ char *sc_name; /* name of this scope */ struct def *sc_def; /* list of definitions in this scope */ arith sc_off; /* offsets of variables in this scope */ char sc_scopeclosed; /* flag indicating closed or open scope */ char sc_defmodule; /* flag set is this scope is from a separate definition module */ int sc_level; /* level of this scope */ struct def *sc_definedby; /* The def structure defining this scope */ struct node *sc_end; /* node to remember line number of end of scope */ }; struct scopelist { struct scopelist *sc_next; struct scope *sc_scope; struct scopelist *sc_encl; int sc_count; }; extern struct scope *PervasiveScope; extern struct scopelist *CurrVis, *GlobalVis; #define CurrentScope (CurrVis->sc_scope) #define GlobalScope (GlobalVis->sc_scope) #define enclosing(x) ((x)->sc_encl) #define scopeclosed(x) ((x)->sc_scopeclosed) #define nextvisible(x) ((x)->sc_next) /* use with scopelists */ void Reverse(struct def **pdf); void open_scope(int scopetype); struct scope * open_and_close_scope(int scopetype); void InitScope(void); void close_scope(int flag); #ifdef DEBUG void DumpScope(register struct def *df); #endif #endif /* SCOPE_H_ */