/*
 * Copyright 1993, 2000 Christopher Seiwald.
 *
 * This file is part of Jam - see jam.c for Copyright information.
 */

/*
 * parse.h - make and destroy parse trees as driven by the parser
 *
 * 10/22/02 (seiwald) - working return/break/continue statements
 * 11/04/02 (seiwald) - const-ing for string literals
 * 01/05/07 (seiwald) - new yyfname/yylineno for DEBUG_COMPILE
 */

/*
 * parse tree node
 */

typedef struct _PARSE PARSE;

struct _PARSE {
	LIST		*(*func)( PARSE *p, LOL *args, int *jmp );
	PARSE		*left;
	PARSE		*right;
	PARSE		*third;
	const char	*string;
	const char	*string1;
	int		num;
	int		refs;

	/* For DEBUG_COMPILE */

	const char	*yyfname;
	int		yylineno;
} ;

void 	parse_file( const char *f );
void 	parse_save( PARSE *p );

PARSE * parse_make( 
	LIST 		*(*func)( PARSE *p, LOL *args, int *jmp ),
	PARSE		*left,
	PARSE		*right,
	PARSE		*third,
	const char	*string,
	const char	*string1,
	int		num );

void 	parse_refer( PARSE *p );
void 	parse_free( PARSE *p );
