* Fixing of potential crash issue with function tables in compiler. + SYSTEM.h is now renamed to SYSTEMM2.h to avoid conflicts on non case sensitive filesystems.
		
			
				
	
	
		
			75 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * (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
 | 
						|
 */
 | 
						|
/* P A R S E   T R E E   W A L K E R */
 | 
						|
#ifndef WALK_H_
 | 
						|
#define WALK_H_
 | 
						|
 | 
						|
#include "em_label.h"
 | 
						|
 | 
						|
/* Forward type declarations. */
 | 
						|
typedef struct node t_node;
 | 
						|
typedef struct def  t_def;
 | 
						|
typedef struct desig t_desig;
 | 
						|
 | 
						|
/*	Definition of WalkNode macro
 | 
						|
*/
 | 
						|
extern int (*WalkTable[])(t_node*, label, int);
 | 
						|
 | 
						|
#define	WalkNode(xnd, xlab, rch)	(*WalkTable[(unsigned int)((xnd)->nd_class)])((xnd), (xlab),(rch))
 | 
						|
 | 
						|
extern label	text_label;
 | 
						|
extern label	data_label;
 | 
						|
 | 
						|
#ifndef SQUEEZE
 | 
						|
#define c_loc(x)	C_loc((arith) (x))
 | 
						|
#define c_lae_dlb(x)	C_lae_dlb(x,(arith) 0)
 | 
						|
#define CAL(nm, sz)	(C_cal(nm), C_asp((arith)(sz)))
 | 
						|
#define c_bra(x)	C_bra((label) (x))
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
 | 
						|
int LblWalkNode(label lbl, t_node *nd, int exit, int reach);
 | 
						|
void def_ilb(label l);
 | 
						|
/* Generate line information as necessary for "nd". */
 | 
						|
void DoLineno(register t_node* nd);
 | 
						|
/*	Generate filename information, when needed.
 | 
						|
	This routine is called at the generation of a
 | 
						|
	procedure entry, and after generating a call to
 | 
						|
	another procedure. The current active filename
 | 
						|
	is used.
 | 
						|
*/
 | 
						|
void DoFilename(int needed);
 | 
						|
 | 
						|
/*	Walk through a module, and all its local definitions.
 | 
						|
	Also generate code for its body.
 | 
						|
	This code is collected in an initialization routine.
 | 
						|
*/
 | 
						|
void WalkModule(register t_def* module);
 | 
						|
/*	Walk through the definition of a procedure and all its
 | 
						|
	local definitions, checking and generating code.
 | 
						|
*/
 | 
						|
void WalkProcedure(register t_def* procedure);
 | 
						|
 | 
						|
/*	Walk node "nd", which is a link.
 | 
						|
	"exit_label" is set to a label number when inside a LOOP.
 | 
						|
	"end_reached" maintains info about reachability (REACH_FLAG),
 | 
						|
	and whether an EXIT statement was seen (EXIT_FLAG).
 | 
						|
*/
 | 
						|
int WalkLink(register t_node* nd, label exit_label, int end_reached);
 | 
						|
/* Walk through a statement node "nd", generating code for it. */
 | 
						|
int WalkStat(register t_node* nd, label exit_label, int end_reached);
 | 
						|
/*	Generate code to evaluate a boolean expression "pnd" */
 | 
						|
void ExpectBool(register t_node** pnd, label true_label, label false_label);
 | 
						|
/* Check designator and generate code for it */
 | 
						|
int WalkDesignator(t_node** pnd, t_desig* ds, int flags);
 | 
						|
 | 
						|
void DoAssign(register t_node* nd);
 | 
						|
 | 
						|
int DoForInit(t_node* nd);
 | 
						|
 | 
						|
#endif /* WALK_H_ */
 |