|
|
1.1 root 1: /* Copyright (c) 1982 Regents of the University of California */
2:
3: /* static char sccsid[] = "@(#)tree.h 1.4 2/13/82"; */
4:
5: /*
6: * This file contains the declarations of the variables and routines
7: * within the "tree" subdirectory that are accessible from outside.
8: */
9:
10: #include "tree/opinfo.h"
11:
12: /*
13: * Evaluation stack manipulation macros. These are publically
14: * available because "eval" leaves it's result on the stack.
15: *
16: * These macros allow one to operate on stacks of arbitrary types
17: * (including a stack of different typed objects).
18: *
19: * Sadly, underflow and overflow are not checked for.
20: */
21:
22: typedef char STACK;
23:
24: #define WMASK (sizeof(int) - 1)
25:
26: #define push(type, value) ((type *) (sp += sizeof(type)))[-1] = (value)
27: #define pop(type) (*((type *) (sp -= sizeof(type))))
28: #define alignstack() sp = (char *) (( ((int) sp) + WMASK)&~WMASK)
29:
30: STACK stack[];
31: STACK *sp;
32:
33: NODE *build(); /* create a node in the parse tree */
34: prtree(); /* print a tree in source form */
35: eval(); /* evaluate a tree, leaving value on stack */
36: long popsmall(); /* pop a small item from the stack given its type */
37: tfree(); /* release storage for a tree */
38: BOOLEAN tr_equal(); /* test if two trees are structurally equivalent */
39: BOOLEAN cond(); /* evaluate a node for a conditional */
40: ADDRESS lval(); /* return the object address of a node */
41: BOOLEAN isredirected(); /* TRUE if output is being redirected */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.