123 last_line = elem->last_line; |
124 last_line = elem->last_line; |
124 last_column = elem->last_column; |
125 last_column = elem->last_column; |
125 } |
126 } |
126 } |
127 } |
127 |
128 |
128 |
129 /* insert a new element before position pos. */ |
129 |
130 /* To insert into the begining of list, call with pos=0 */ |
130 |
131 /* To insert into the end of list, call with pos=list->n */ |
131 #define SYM_LIST(class_name_c) \ |
132 void list_c::insert_element(symbol_c *elem, int pos) { |
|
133 int i; |
|
134 if (pos > n) ERROR; |
|
135 |
|
136 /* add new element to end of list. Basically alocate required memory... */ |
|
137 /* will also increment n by 1 ! */ |
|
138 add_element(elem); |
|
139 /* if not inserting into end position, shift all elements up one position, to open up a slot in pos for new element */ |
|
140 if (pos < (n-1)) for (i = n-2; i >= pos; i--) elements[i+1] = elements[i]; |
|
141 elements[pos] = elem; |
|
142 } |
|
143 |
|
144 |
|
145 |
|
146 #define SYM_LIST(class_name_c, ...) \ |
132 class_name_c::class_name_c( \ |
147 class_name_c::class_name_c( \ |
133 int fl, int fc, const char *ffile, long int forder, \ |
148 int fl, int fc, const char *ffile, long int forder, \ |
134 int ll, int lc, const char *lfile, long int lorder) \ |
149 int ll, int lc, const char *lfile, long int lorder) \ |
135 :list_c(fl, fc, ffile, forder, ll, lc, lfile, lorder) {} \ |
150 :list_c(fl, fc, ffile, forder, ll, lc, lfile, lorder) {} \ |
136 class_name_c::class_name_c(symbol_c *elem, \ |
151 class_name_c::class_name_c(symbol_c *elem, \ |
137 int fl, int fc, const char *ffile, long int forder, \ |
152 int fl, int fc, const char *ffile, long int forder, \ |
138 int ll, int lc, const char *lfile, long int lorder) \ |
153 int ll, int lc, const char *lfile, long int lorder) \ |
139 :list_c(elem, fl, fc, ffile, forder, ll, lc, lfile, lorder) {} \ |
154 :list_c(elem, fl, fc, ffile, forder, ll, lc, lfile, lorder) {} \ |
140 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
155 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
141 |
156 |
142 #define SYM_TOKEN(class_name_c) \ |
157 #define SYM_TOKEN(class_name_c, ...) \ |
143 class_name_c::class_name_c(const char *value, \ |
158 class_name_c::class_name_c(const char *value, \ |
144 int fl, int fc, const char *ffile, long int forder, \ |
159 int fl, int fc, const char *ffile, long int forder, \ |
145 int ll, int lc, const char *lfile, long int lorder) \ |
160 int ll, int lc, const char *lfile, long int lorder) \ |
146 :token_c(value, fl, fc, ffile, forder, ll, lc, lfile, lorder) {} \ |
161 :token_c(value, fl, fc, ffile, forder, ll, lc, lfile, lorder) {} \ |
147 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
162 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
148 |
163 |
149 #define SYM_REF0(class_name_c) \ |
164 #define SYM_REF0(class_name_c, ...) \ |
150 class_name_c::class_name_c( \ |
165 class_name_c::class_name_c( \ |
151 int fl, int fc, const char *ffile, long int forder, \ |
166 int fl, int fc, const char *ffile, long int forder, \ |
152 int ll, int lc, const char *lfile, long int lorder) \ |
167 int ll, int lc, const char *lfile, long int lorder) \ |
153 :symbol_c(fl, fc, ffile, forder, ll, lc, lfile, lorder) {} \ |
168 :symbol_c(fl, fc, ffile, forder, ll, lc, lfile, lorder) {} \ |
154 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
169 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
155 |
170 |
156 |
171 |
157 #define SYM_REF1(class_name_c, ref1) \ |
172 #define SYM_REF1(class_name_c, ref1, ...) \ |
158 class_name_c::class_name_c(symbol_c *ref1, \ |
173 class_name_c::class_name_c(symbol_c *ref1, \ |
159 int fl, int fc, const char *ffile, long int forder, \ |
174 int fl, int fc, const char *ffile, long int forder, \ |
160 int ll, int lc, const char *lfile, long int lorder) \ |
175 int ll, int lc, const char *lfile, long int lorder) \ |
161 :symbol_c(fl, fc, ffile, forder, ll, lc, lfile, lorder) { \ |
176 :symbol_c(fl, fc, ffile, forder, ll, lc, lfile, lorder) { \ |
162 this->ref1 = ref1; \ |
177 this->ref1 = ref1; \ |
163 } \ |
178 } \ |
164 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
179 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
165 |
180 |
166 |
181 |
167 #define SYM_REF2(class_name_c, ref1, ref2) \ |
182 #define SYM_REF2(class_name_c, ref1, ref2, ...) \ |
168 class_name_c::class_name_c(symbol_c *ref1, \ |
183 class_name_c::class_name_c(symbol_c *ref1, \ |
169 symbol_c *ref2, \ |
184 symbol_c *ref2, \ |
170 int fl, int fc, const char *ffile, long int forder, \ |
185 int fl, int fc, const char *ffile, long int forder, \ |
171 int ll, int lc, const char *lfile, long int lorder) \ |
186 int ll, int lc, const char *lfile, long int lorder) \ |
172 :symbol_c(fl, fc, ffile, forder, ll, lc, lfile, lorder) { \ |
187 :symbol_c(fl, fc, ffile, forder, ll, lc, lfile, lorder) { \ |
173 this->ref1 = ref1; \ |
188 this->ref1 = ref1; \ |
174 this->ref2 = ref2; \ |
189 this->ref2 = ref2; \ |
175 } \ |
190 } \ |
176 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
191 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
177 |
192 |
178 |
193 |
179 #define SYM_REF3(class_name_c, ref1, ref2, ref3) \ |
194 #define SYM_REF3(class_name_c, ref1, ref2, ref3, ...) \ |
180 class_name_c::class_name_c(symbol_c *ref1, \ |
195 class_name_c::class_name_c(symbol_c *ref1, \ |
181 symbol_c *ref2, \ |
196 symbol_c *ref2, \ |
182 symbol_c *ref3, \ |
197 symbol_c *ref3, \ |
183 int fl, int fc, const char *ffile, long int forder, \ |
198 int fl, int fc, const char *ffile, long int forder, \ |
184 int ll, int lc, const char *lfile, long int lorder) \ |
199 int ll, int lc, const char *lfile, long int lorder) \ |
185 :symbol_c(fl, fc, ffile, forder, ll, lc, lfile, lorder) { \ |
200 :symbol_c(fl, fc, ffile, forder, ll, lc, lfile, lorder) { \ |
186 this->ref1 = ref1; \ |
201 this->ref1 = ref1; \ |
187 this->ref2 = ref2; \ |
202 this->ref2 = ref2; \ |
188 this->ref3 = ref3; \ |
203 this->ref3 = ref3; \ |
189 } \ |
204 } \ |
190 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
205 void *class_name_c::accept(visitor_c &visitor) {return visitor.visit(this);} |
191 |
206 |
192 |
207 |
193 #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4) \ |
208 #define SYM_REF4(class_name_c, ref1, ref2, ref3, ref4, ...) \ |
194 class_name_c::class_name_c(symbol_c *ref1, \ |
209 class_name_c::class_name_c(symbol_c *ref1, \ |
195 symbol_c *ref2, \ |
210 symbol_c *ref2, \ |
196 symbol_c *ref3, \ |
211 symbol_c *ref3, \ |
197 symbol_c *ref4, \ |
212 symbol_c *ref4, \ |
198 int fl, int fc, const char *ffile, long int forder, \ |
213 int fl, int fc, const char *ffile, long int forder, \ |