comparison lwcc/tree.c @ 502:14a40f8bb4eb

Add various operators to lwcc Add various binary and ternary operators to lwcc, but only those which can work with constant operands. Seems like variables are probably required next.
author William Astle <lost@l-w.ca>
date Wed, 25 Sep 2019 20:23:49 -0600
parents f3e9732973f1
children 7e8298f7bc0a
comparison
equal deleted inserted replaced
501:f3e9732973f1 502:14a40f8bb4eb
55 "CONST_INT", 55 "CONST_INT",
56 "OPER_PLUS", 56 "OPER_PLUS",
57 "OPER_MINUS", 57 "OPER_MINUS",
58 "OPER_TIMES", 58 "OPER_TIMES",
59 "OPER_DIVIDE", 59 "OPER_DIVIDE",
60 "OPER_MOD",
61 "OPER_COND",
62 "OPER_FNCALL",
63 "OPER_SUBSCRIPT",
64 "OPER_POSTINC",
65 "OPER_POSTDEC",
66 "OPER_PTRMEM",
67 "OPER_OBJMEM",
68 "OPER_LSH",
69 "OPER_RSH",
70 "OPER_LT",
71 "OPER_LE",
72 "OPER_GT",
73 "OPER_GE",
74 "OPER_EQ",
75 "OPER_NE",
76 "OPER_BWAND",
77 "OPER_BWXOR",
78 "OPER_BWOR",
79 "OPER_BAND",
80 "OPER_BOR",
81 "OPER_ASS",
82 "OPER_ADDASS",
83 "OPER_SUBASS",
84 "OPER_MULASS",
85 "OPER_DIVASS",
86 "OPER_MODASS",
87 "OPER_LSHASS",
88 "OPER_RSHASS",
89 "OPER_BWANDASS",
90 "OPER_BWXORASS",
91 "OPER_BWORASS",
92 "OPER_COMMA",
60 }; 93 };
61 94
62 95
63 96
64 node_t *node_create(int type, ...) 97 node_t *node_create(int type, ...)
76 { 109 {
77 case NODE_OPER_PLUS: 110 case NODE_OPER_PLUS:
78 case NODE_OPER_MINUS: 111 case NODE_OPER_MINUS:
79 case NODE_OPER_TIMES: 112 case NODE_OPER_TIMES:
80 case NODE_OPER_DIVIDE: 113 case NODE_OPER_DIVIDE:
114 case NODE_OPER_MOD:
115 case NODE_OPER_BWAND:
116 case NODE_OPER_BWXOR:
117 case NODE_OPER_BWOR:
118 case NODE_OPER_BAND:
119 case NODE_OPER_BOR:
120 case NODE_OPER_SUBSCRIPT:
121 case NODE_OPER_PTRMEM:
122 case NODE_OPER_OBJMEM:
123 case NODE_OPER_ASS:
124 case NODE_OPER_ADDASS:
125 case NODE_OPER_SUBASS:
126 case NODE_OPER_MULASS:
127 case NODE_OPER_DIVASS:
128 case NODE_OPER_MODASS:
129 case NODE_OPER_LSH:
130 case NODE_OPER_LSHASS:
131 case NODE_OPER_RSH:
132 case NODE_OPER_RSHASS:
133 case NODE_OPER_BWANDASS:
134 case NODE_OPER_BWORASS:
135 case NODE_OPER_BWXORASS:
136 case NODE_OPER_LT:
137 case NODE_OPER_LE:
138 case NODE_OPER_GT:
139 case NODE_OPER_GE:
140 case NODE_OPER_EQ:
141 case NODE_OPER_NE:
142 case NODE_OPER_COMMA:
143 nargs = 2;
144 break;
145
146 case NODE_OPER_FNCALL:
81 nargs = 2; 147 nargs = 2;
82 break; 148 break;
83 149
84 case NODE_DECL: 150 case NODE_DECL:
85 nargs = 2; 151 nargs = 2;
152 break;
153
154 case NODE_OPER_POSTINC:
155 case NODE_OPER_POSTDEC:
156 nargs = 1;
86 break; 157 break;
87 158
88 case NODE_TYPE_PTR: 159 case NODE_TYPE_PTR:
89 nargs = 1; 160 nargs = 1;
90 break; 161 break;
94 r -> strval = lw_strdup(va_arg(args, char *)); 165 r -> strval = lw_strdup(va_arg(args, char *));
95 break; 166 break;
96 167
97 case NODE_FUNDEF: 168 case NODE_FUNDEF:
98 nargs = 4; 169 nargs = 4;
170 break;
171
172 case NODE_OPER_COND:
173 nargs = 3;
99 break; 174 break;
100 175
101 case NODE_FUNDECL: 176 case NODE_FUNDECL:
102 nargs = 3; 177 nargs = 3;
103 break; 178 break;