|
|
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.