Pristine Ack-5.5
[Ack-5.5.git] / lang / m2 / comp / node.H
1 /*
2  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3  * See the copyright notice in the ACK home directory, in the file "Copyright".
4  *
5  * Author: Ceriel J.H. Jacobs
6  */
7
8 /* N O D E   O F   A N   A B S T R A C T   P A R S E T R E E */
9
10 /* $Id: node.H,v 1.27 1994/06/24 12:41:51 ceriel Exp $ */
11
12 struct node {
13         char nd_class;          /* kind of node */
14 #define Value   0               /* constant */
15 #define Arrsel  1               /* array selection */
16 #define Oper    2               /* binary operator */
17 #define Uoper   3               /* unary operator */
18 #define Arrow   4               /* ^ construction */
19 #define Call    5               /* cast or procedure - or function call */
20 #define Name    6               /* an identifier */
21 #define Set     7               /* a set constant */
22 #define Xset    8               /* a set */
23 #define Def     9               /* an identified name */
24 #define Stat    10              /* a statement */
25 #define Select  11              /* a '.' selection */
26 #define Link    12
27                                 /* do NOT change the order or the numbers!!! */
28         char nd_flags;          /* options */
29 #define ROPTION 1
30 #define AOPTION 2
31         struct type *nd_type;   /* type of this node */
32         struct token nd_token;
33 #define nd_set          nd_token.tk_data.tk_set
34 #define nd_def          nd_token.tk_data.tk_def
35 #define nd_LEFT         nd_token.tk_data.tk_left
36 #define nd_RIGHT        nd_token.tk_data.tk_right
37 #define nd_NEXT         nd_token.tk_data.tk_next
38 #define nd_symb         nd_token.tk_symb
39 #define nd_lineno       nd_token.tk_lineno
40 #define nd_IDF          nd_token.TOK_IDF
41 #define nd_SSTR         nd_token.TOK_SSTR
42 #define nd_STR          nd_token.TOK_STR
43 #define nd_SLE          nd_token.TOK_SLE
44 #define nd_INT          nd_token.TOK_INT
45 #define nd_REAL         nd_token.TOK_REAL
46 #define nd_RSTR         nd_token.TOK_RSTR
47 #define nd_RVAL         nd_token.TOK_RVAL
48 };
49
50 typedef struct node     t_node;
51
52 /* ALLOCDEF "node" 50 */
53
54 extern t_node *dot2node(), *dot2leaf(), *getnode();
55
56 #define NULLNODE ((t_node *) 0)
57
58 #define HASSELECTORS    002
59 #define VARIABLE        004
60 #define VALUE           010
61
62 #define IsCast(lnd)     ((lnd)->nd_class == Def && is_type((lnd)->nd_def))
63 #define IsProc(lnd)     ((lnd)->nd_type->tp_fund == T_PROCEDURE)