diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/hoc/hoc.h |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/hoc/hoc.h')
-rwxr-xr-x | sys/src/cmd/hoc/hoc.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/sys/src/cmd/hoc/hoc.h b/sys/src/cmd/hoc/hoc.h new file mode 100755 index 000000000..787a9dfeb --- /dev/null +++ b/sys/src/cmd/hoc/hoc.h @@ -0,0 +1,82 @@ +typedef void (*Inst)(void); +#define STOP (Inst) 0 + +typedef struct Symbol Symbol; +typedef union Datum Datum; +typedef struct Formal Formal; +typedef struct Saveval Saveval; +typedef struct Fndefn Fndefn; +typedef union Symval Symval; + +union Symval { /* value of a symbol */ + double val; /* VAR */ + double (*ptr)(double); /* BLTIN */ + Fndefn *defn; /* FUNCTION, PROCEDURE */ + char *str; /* STRING */ +}; + +struct Symbol { /* symbol table entry */ + char *name; + long type; + Symval u; + struct Symbol *next; /* to link to another */ +}; +Symbol *install(char*, int, double), *lookup(char*); + +union Datum { /* interpreter stack type */ + double val; + Symbol *sym; +}; + +struct Saveval { /* saved value of variable */ + Symval val; + long type; + Saveval *next; +}; + +struct Formal { /* formal parameter */ + Symbol *sym; + Saveval *save; + Formal *next; +}; + +struct Fndefn { /* formal parameter */ + Inst *code; + Formal *formals; + int nargs; +}; + +extern Formal *formallist(Symbol*, Formal*); +extern double Fgetd(int); +extern int moreinput(void); +extern void restore(Symbol*); +extern void restoreall(void); +extern void execerror(char*, char*); +extern void define(Symbol*, Formal*), verify(Symbol*); +extern Datum pop(void); +extern void initcode(void), push(Datum), xpop(void), constpush(void); +extern void varpush(void); +extern void eval(void), add(void), sub(void), mul(void), div(void), mod(void); +extern void negate(void), power(void); +extern void addeq(void), subeq(void), muleq(void), diveq(void), modeq(void); + +extern Inst *progp, *progbase, prog[], *code(Inst); +extern void assign(void), bltin(void), varread(void); +extern void prexpr(void), prstr(void); +extern void gt(void), lt(void), eq(void), ge(void), le(void), ne(void); +extern void and(void), or(void), not(void); +extern void ifcode(void), whilecode(void), forcode(void); +extern void call(void), arg(void), argassign(void); +extern void funcret(void), procret(void); +extern void preinc(void), predec(void), postinc(void), postdec(void); +extern void execute(Inst*); +extern void printtop(void); + +extern double Log(double), Log10(double), Gamma(double), Sqrt(double), Exp(double); +extern double Asin(double), Acos(double), Sinh(double), Cosh(double), integer(double); +extern double Pow(double, double); + +extern void init(void); +extern int yyparse(void); +extern void execerror(char*, char*); +extern void *emalloc(unsigned); |