xref: /plan9/sys/src/cmd/hoc/hoc.h (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1 typedef void (*Inst)(void);
2 #define	STOP	(Inst) 0
3 
4 typedef struct Symbol	Symbol;
5 typedef union Datum 	Datum;
6 typedef struct Formal	Formal;
7 typedef struct Saveval	Saveval;
8 typedef struct Fndefn	Fndefn;
9 typedef union Symval	Symval;
10 
11 union Symval { /* value of a symbol */
12 	double	val;		/* VAR */
13 	double	(*ptr)(double);	/* BLTIN */
14 	Fndefn	*defn;		/* FUNCTION, PROCEDURE */
15 	char	*str;		/* STRING */
16 };
17 
18 struct Symbol {	/* symbol table entry */
19 	char	*name;
20 	long	type;
21 	Symval u;
22 	struct Symbol	*next;	/* to link to another */
23 };
24 Symbol	*install(char*, int, double), *lookup(char*);
25 
26 union Datum {	/* interpreter stack type */
27 	double	val;
28 	Symbol	*sym;
29 };
30 
31 struct Saveval {	/* saved value of variable */
32 	Symval	val;
33 	long		type;
34 	Saveval	*next;
35 };
36 
37 struct Formal {	/* formal parameter */
38 	Symbol	*sym;
39 	Saveval	*save;
40 	Formal	*next;
41 };
42 
43 struct Fndefn {	/* formal parameter */
44 	Inst	*code;
45 	Formal	*formals;
46 	int	nargs;
47 };
48 
49 extern	Formal *formallist(Symbol*, Formal*);
50 extern	double Fgetd(int);
51 extern	int moreinput(void);
52 extern	void restore(Symbol*);
53 extern	void restoreall(void);
54 extern	void execerror(char*, char*);
55 extern	void define(Symbol*, Formal*), verify(Symbol*);
56 extern	Datum pop(void);
57 extern	void initcode(void), push(Datum), xpop(void), constpush(void);
58 extern	void varpush(void);
59 extern	void eval(void), add(void), sub(void), mul(void), div(void), mod(void);
60 extern	void negate(void), power(void);
61 extern	void addeq(void), subeq(void), muleq(void), diveq(void), modeq(void);
62 
63 extern	Inst *progp, *progbase, prog[], *code(Inst);
64 extern	void assign(void), bltin(void), varread(void);
65 extern	void prexpr(void), prstr(void);
66 extern	void gt(void), lt(void), eq(void), ge(void), le(void), ne(void);
67 extern	void and(void), or(void), not(void);
68 extern	void ifcode(void), whilecode(void), forcode(void);
69 extern	void call(void), arg(void), argassign(void);
70 extern	void funcret(void), procret(void);
71 extern	void preinc(void), predec(void), postinc(void), postdec(void);
72 extern	void execute(Inst*);
73 extern	void printtop(void);
74 
75 extern double	Log(double), Log10(double), Gamma(double), Sqrt(double), Exp(double);
76 extern double	Asin(double), Acos(double), Sinh(double), Cosh(double), integer(double);
77 extern double	Pow(double, double);
78 
79 extern	void init(void);
80 extern	int yyparse(void);
81 extern	void execerror(char*, char*);
82 extern	void *emalloc(unsigned);
83