1 #ifndef __expr_h
2 #define __expr_h
3 
4 #define EE_OK		0
5 #define EE_RETURN	1
6 #define EE_BREAK	2
7 #define EE_NOCASE	3
8 #define EE_NOTDEF	4
9 #define EE_NOTLIT	5
10 #define EE_BADFUNC	6
11 #define EE_DIV0		7
12 #define EE_OVERFLOW	8
13 #define EE_INTERNAL	-1
14 
15 typedef int EValueLookup(const char *func,const char *name,void *data,int *rval);
16 
17 typedef struct expr {
18   int op;			/* Op code */
19   char *lit;			/* Literal or function name  */
20   int value;			/* Value of expression  */
21   struct expr *l,*r,*x;		/* left, right and extended operands */
22 } Expr;
23 
24 Expr *Expr_lit(const char*);
25 Expr *Expr_num(int);
26 Expr *Expr_op(int,Expr*,Expr*);
27 Expr *Expr_case(int,int);
28 Expr *Expr_op3(int,Expr*,Expr*,Expr*);
29 Expr *Expr_func(const char*,Expr*,Expr*);
30 int Expr_print(Expr *e);
31 int Expr_sprint(char *buf,int n,Expr *e);
32 
33 int Expr_eval(Expr *e,int *rval,EValueLookup *f,void *d);
34 
35 void delete_Expr(Expr *e);
36 
37 const extern char *expr_errsym;
38 
39 #endif
40