|
|
1.1 root 1: typedef struct Symbol { /* symbol table entry */
2: char *name;
3: short type;
4: union {
5: double val; /* VAR */
6: double (*ptr)(); /* BLTIN */
7: int (**defn)(); /* FUNCTION, PROCEDURE */
8: char *str; /* STRING */
9: } u;
10: struct Symbol *next; /* to link to another */
11: } Symbol;
12: Symbol *install(), *lookup();
13:
14: typedef union Datum { /* interpreter stack type */
15: double val;
16: Symbol *sym;
17: } Datum;
18: extern Datum pop();
19: extern xpop(), eval(), add(), sub(), mul(), div(), mod(), negate(), power();
20: extern addeq(), subeq(), muleq(), diveq(), modeq();
21:
22: typedef int (*Inst)();
23: #define STOP (Inst) 0
24:
25: extern Inst *progp, *progbase, prog[], *code();
26: extern assign(), bltin(), varpush(), constpush(), print(), varread();
27: extern prexpr(), prstr();
28: extern gt(), lt(), eq(), ge(), le(), ne(), and(), or(), not();
29: extern ifcode(), whilecode(), forcode(), call(), arg(), argassign();
30: extern funcret(), procret();
31: extern preinc(), predec(), postinc(), postdec();
32: extern argaddeq(), argsubeq(), argmuleq(), argdiveq(), argmodeq();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.