/* asm.h */

extern void  asm_error_loc(unsigned line);

extern unsigned  asm_line_number;
#ifdef  LEX
extern char  yytext[];
#else  /* LEX */
extern char  *yytext;
#endif  /* LEX */
extern FILE  *yyin;

typedef struct ptree_struct  {
	enum {pt_uminus, pt_add, pt_sub, pt_mul, pt_div, pt_end}  parsetype;
	aval_t  val;
	char  str[STR_MAXLEN];
	struct ptree_struct  *left, *right;
	unsigned  line;
} ptree_t;

typedef struct argtop_struct  {
	amode_t  mode;
	ptree_t  *pt;
} argtop_t;

typedef struct stmt_struct  {
	op_t  op;
	char  str[STR_MAXLEN];
	argtop_t  *a;
	argtop_t  *b;
	aval_t  addr;
	unsigned  marked, line;  /* To prevent recursive EQUs. */
	struct stmt_struct  *next;
} stmt_t;

typedef union  {
	stmt_t  *stmt;
  op_t  op;
	amode_t  am;
	argtop_t  *argtop;
	ptree_t  *ptree;
	aval_t  val;
} asm_yytype;

#define  YYSTYPE  asm_yytype
