Mercurial > hg > octave-nkf
comparison libinterp/parse-tree/pt-classdef.h @ 15841:5861c4bde387 classdef
Move classdef related source files to correct location.
author | Michael Goffioul <michael.goffioul@gmail.com> |
---|---|
date | Sun, 23 Dec 2012 17:43:06 -0500 |
parents | src/parse-tree/pt-classdef.h@069c552587a0 |
children | 5e5705b3e505 |
comparison
equal
deleted
inserted
replaced
15840:af9e2ad52943 | 15841:5861c4bde387 |
---|---|
1 /* | |
2 | |
3 Copyright (C) 2012 John W. Eaton | |
4 | |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
9 Free Software Foundation; either version 3 of the License, or (at your | |
10 option) any later version. | |
11 | |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with Octave; see the file COPYING. If not, see | |
19 <http://www.gnu.org/licenses/>. | |
20 | |
21 */ | |
22 | |
23 #if !defined (octave_tree_classdef_h) | |
24 #define octave_tree_classdef_h 1 | |
25 | |
26 class octave_value; | |
27 | |
28 class tree_walker; | |
29 | |
30 #include "pt-cmd.h" | |
31 #include "pt-exp.h" | |
32 #include "pt-id.h" | |
33 | |
34 #include "base-list.h" | |
35 | |
36 #include <list> | |
37 | |
38 class tree_classdef_attribute | |
39 { | |
40 public: | |
41 | |
42 tree_classdef_attribute (tree_identifier *i = 0, tree_expression *e = 0) | |
43 : id (i), expr (e), neg (false) { } | |
44 | |
45 tree_classdef_attribute (tree_identifier *i, bool b) | |
46 : id (i), expr (0), neg (b) { } | |
47 | |
48 ~tree_classdef_attribute (void) | |
49 { | |
50 delete id; | |
51 delete expr; | |
52 } | |
53 | |
54 tree_identifier *ident (void) { return id; } | |
55 | |
56 tree_expression *expression (void) { return expr; } | |
57 | |
58 bool negate (void) { return neg; } | |
59 | |
60 void accept (tree_walker&); | |
61 | |
62 private: | |
63 | |
64 tree_identifier *id; | |
65 tree_expression *expr; | |
66 bool neg; | |
67 | |
68 // No copying! | |
69 | |
70 tree_classdef_attribute (const tree_classdef_attribute&); | |
71 | |
72 tree_classdef_attribute& operator = (const tree_classdef_attribute&); | |
73 }; | |
74 | |
75 class tree_classdef_attribute_list : public octave_base_list<tree_classdef_attribute *> | |
76 { | |
77 public: | |
78 | |
79 tree_classdef_attribute_list (void) { } | |
80 | |
81 tree_classdef_attribute_list (tree_classdef_attribute *a) { append (a); } | |
82 | |
83 tree_classdef_attribute_list (const octave_base_list<tree_classdef_attribute *>& a) | |
84 : octave_base_list<tree_classdef_attribute *> (a) { } | |
85 | |
86 ~tree_classdef_attribute_list (void); | |
87 | |
88 void accept (tree_walker&); | |
89 | |
90 private: | |
91 | |
92 // No copying! | |
93 | |
94 tree_classdef_attribute_list (const tree_classdef_attribute_list&); | |
95 | |
96 tree_classdef_attribute_list& operator = (const tree_classdef_attribute_list&); | |
97 }; | |
98 | |
99 class tree_classdef_superclass | |
100 { | |
101 public: | |
102 | |
103 tree_classdef_superclass (tree_identifier *i = 0, tree_identifier *p = 0) | |
104 : id (i), pkg (p) { } | |
105 | |
106 ~tree_classdef_superclass (void) | |
107 { | |
108 delete id; | |
109 delete pkg; | |
110 } | |
111 | |
112 tree_identifier *ident (void) { return id; } | |
113 | |
114 tree_identifier * package (void) { return pkg; } | |
115 | |
116 void accept (tree_walker&); | |
117 | |
118 private: | |
119 | |
120 tree_identifier *id; | |
121 tree_identifier *pkg; | |
122 | |
123 // No copying! | |
124 | |
125 tree_classdef_superclass (const tree_classdef_superclass&); | |
126 | |
127 tree_classdef_superclass& operator = (const tree_classdef_superclass&); | |
128 }; | |
129 | |
130 class tree_classdef_superclass_list : public octave_base_list<tree_classdef_superclass *> | |
131 { | |
132 public: | |
133 | |
134 tree_classdef_superclass_list (void) { } | |
135 | |
136 tree_classdef_superclass_list (tree_classdef_superclass *sc) { append (sc); } | |
137 | |
138 tree_classdef_superclass_list (const octave_base_list<tree_classdef_superclass *>& a) | |
139 : octave_base_list<tree_classdef_superclass *> (a) { } | |
140 | |
141 ~tree_classdef_superclass_list (void); | |
142 | |
143 void accept (tree_walker&); | |
144 | |
145 private: | |
146 | |
147 // No copying! | |
148 | |
149 tree_classdef_superclass_list (const tree_classdef_superclass_list&); | |
150 | |
151 tree_classdef_superclass_list& operator = (const tree_classdef_superclass_list&); | |
152 }; | |
153 | |
154 template <typename T> | |
155 class tree_classdef_element : public tree | |
156 { | |
157 public: | |
158 | |
159 tree_classdef_element (tree_classdef_attribute_list *a, | |
160 octave_base_list<T> *elist, | |
161 octave_comment_list *lc, octave_comment_list *tc, | |
162 int l = -1, int c = -1) | |
163 : tree (l, c), attr_list (a), elt_list (elist), | |
164 lead_comm (lc), trail_comm (tc) | |
165 { } | |
166 | |
167 ~tree_classdef_element (void) | |
168 { | |
169 delete attr_list; | |
170 delete elt_list; | |
171 delete lead_comm; | |
172 delete trail_comm; | |
173 } | |
174 | |
175 tree_classdef_attribute_list *attribute_list (void) { return attr_list; } | |
176 | |
177 octave_base_list<T> *element_list (void) { return elt_list; } | |
178 | |
179 octave_comment_list *leading_comment (void) { return lead_comm; } | |
180 | |
181 octave_comment_list *trailing_comment (void) { return trail_comm; } | |
182 | |
183 void accept (tree_walker&) { } | |
184 | |
185 private: | |
186 | |
187 // List of attributes that apply to this class. | |
188 tree_classdef_attribute_list *attr_list; | |
189 | |
190 // The list of objects contained in this block. | |
191 octave_base_list<T> *elt_list; | |
192 | |
193 // Comment preceding the token marking the beginning of the block. | |
194 octave_comment_list *lead_comm; | |
195 | |
196 // Comment preceding END token. | |
197 octave_comment_list *trail_comm; | |
198 | |
199 // No copying! | |
200 | |
201 tree_classdef_element (const tree_classdef_element&); | |
202 | |
203 tree_classdef_element& operator = (const tree_classdef_element&); | |
204 }; | |
205 | |
206 class tree_classdef_property | |
207 { | |
208 public: | |
209 | |
210 tree_classdef_property (tree_identifier *i = 0, tree_expression *e = 0) | |
211 : id (i), expr (e) { } | |
212 | |
213 ~tree_classdef_property (void) | |
214 { | |
215 delete id; | |
216 delete expr; | |
217 } | |
218 | |
219 tree_identifier *ident (void) { return id; } | |
220 | |
221 tree_expression *expression (void) { return expr; } | |
222 | |
223 void accept (tree_walker&); | |
224 | |
225 private: | |
226 | |
227 tree_identifier *id; | |
228 tree_expression *expr; | |
229 | |
230 // No copying! | |
231 | |
232 tree_classdef_property (const tree_classdef_property&); | |
233 | |
234 tree_classdef_property& operator = (const tree_classdef_property&); | |
235 }; | |
236 | |
237 class tree_classdef_property_list : public octave_base_list<tree_classdef_property *> | |
238 { | |
239 public: | |
240 | |
241 tree_classdef_property_list (void) { } | |
242 | |
243 tree_classdef_property_list (tree_classdef_property* p) { append (p); } | |
244 | |
245 tree_classdef_property_list (const octave_base_list<tree_classdef_property *>& a) | |
246 : octave_base_list<tree_classdef_property *> (a) { } | |
247 | |
248 ~tree_classdef_property_list (void); | |
249 | |
250 void accept (tree_walker&); | |
251 | |
252 private: | |
253 | |
254 // No copying! | |
255 | |
256 tree_classdef_property_list (const tree_classdef_property_list&); | |
257 | |
258 tree_classdef_property_list& operator = (const tree_classdef_property_list&); | |
259 }; | |
260 | |
261 class tree_classdef_properties_block | |
262 : public tree_classdef_element<tree_classdef_property *> | |
263 { | |
264 public: | |
265 | |
266 tree_classdef_properties_block (tree_classdef_attribute_list *a, | |
267 tree_classdef_property_list *plist, | |
268 octave_comment_list *lc, | |
269 octave_comment_list *tc, | |
270 int l = -1, int c = -1) | |
271 : tree_classdef_element<tree_classdef_property *> (a, plist, lc, tc, l, c) { } | |
272 | |
273 ~tree_classdef_properties_block (void) { } | |
274 | |
275 void accept (tree_walker&); | |
276 | |
277 private: | |
278 | |
279 // No copying! | |
280 | |
281 tree_classdef_properties_block (const tree_classdef_properties_block&); | |
282 | |
283 tree_classdef_properties_block& operator = (const tree_classdef_properties_block&); | |
284 }; | |
285 | |
286 class tree_classdef_methods_list : public octave_base_list<octave_value> | |
287 { | |
288 public: | |
289 | |
290 tree_classdef_methods_list (void) { } | |
291 | |
292 tree_classdef_methods_list (const octave_value& f) { append (f); } | |
293 | |
294 tree_classdef_methods_list (const octave_base_list<octave_value>& a) | |
295 : octave_base_list<octave_value> (a) { } | |
296 | |
297 ~tree_classdef_methods_list (void) { } | |
298 | |
299 void accept (tree_walker&); | |
300 | |
301 private: | |
302 | |
303 // No copying! | |
304 | |
305 tree_classdef_methods_list (const tree_classdef_methods_list&); | |
306 | |
307 tree_classdef_methods_list& operator = (const tree_classdef_methods_list&); | |
308 }; | |
309 | |
310 class tree_classdef_methods_block : public tree_classdef_element<octave_value> | |
311 { | |
312 public: | |
313 | |
314 tree_classdef_methods_block (tree_classdef_attribute_list *a, | |
315 tree_classdef_methods_list *mlist, | |
316 octave_comment_list *lc, | |
317 octave_comment_list *tc, int l = -1, int c = -1) | |
318 : tree_classdef_element<octave_value> (a, mlist, lc, tc, l, c) { } | |
319 | |
320 ~tree_classdef_methods_block (void) { } | |
321 | |
322 void accept (tree_walker&); | |
323 | |
324 private: | |
325 | |
326 // No copying! | |
327 | |
328 tree_classdef_methods_block (const tree_classdef_methods_block&); | |
329 | |
330 tree_classdef_methods_block& operator = (const tree_classdef_methods_block&); | |
331 }; | |
332 | |
333 class tree_classdef_event | |
334 { | |
335 public: | |
336 | |
337 tree_classdef_event (tree_identifier *i = 0) : id (i) { } | |
338 | |
339 ~tree_classdef_event (void) | |
340 { | |
341 delete id; | |
342 } | |
343 | |
344 tree_identifier *ident (void) { return id; } | |
345 | |
346 void accept (tree_walker&); | |
347 | |
348 private: | |
349 | |
350 tree_identifier *id; | |
351 | |
352 // No copying! | |
353 | |
354 tree_classdef_event (const tree_classdef_event&); | |
355 | |
356 tree_classdef_event& operator = (const tree_classdef_event&); | |
357 }; | |
358 | |
359 class tree_classdef_events_list : public octave_base_list<tree_classdef_event *> | |
360 { | |
361 public: | |
362 | |
363 tree_classdef_events_list (void) { } | |
364 | |
365 tree_classdef_events_list (tree_classdef_event *e) { append (e); } | |
366 | |
367 tree_classdef_events_list (const octave_base_list<tree_classdef_event *>& a) | |
368 : octave_base_list<tree_classdef_event *> (a) { } | |
369 | |
370 ~tree_classdef_events_list (void); | |
371 | |
372 void accept (tree_walker&); | |
373 | |
374 private: | |
375 | |
376 // No copying! | |
377 | |
378 tree_classdef_events_list (const tree_classdef_events_list&); | |
379 | |
380 tree_classdef_events_list& operator = (const tree_classdef_events_list&); | |
381 }; | |
382 | |
383 class tree_classdef_events_block | |
384 : public tree_classdef_element<tree_classdef_event *> | |
385 { | |
386 public: | |
387 | |
388 tree_classdef_events_block (tree_classdef_attribute_list *a, | |
389 tree_classdef_events_list *elist, | |
390 octave_comment_list *lc, | |
391 octave_comment_list *tc, int l = -1, int c = -1) | |
392 : tree_classdef_element<tree_classdef_event *> (a, elist, lc, tc, l, c) { } | |
393 | |
394 ~tree_classdef_events_block (void) { } | |
395 | |
396 void accept (tree_walker&); | |
397 | |
398 private: | |
399 | |
400 // No copying! | |
401 | |
402 tree_classdef_events_block (const tree_classdef_events_block&); | |
403 | |
404 tree_classdef_events_block& operator = (const tree_classdef_events_block&); | |
405 }; | |
406 | |
407 class tree_classdef_enum | |
408 { | |
409 public: | |
410 | |
411 tree_classdef_enum (void) : id (0), expr (0) { } | |
412 | |
413 tree_classdef_enum (tree_identifier *i, tree_expression *e) | |
414 : id (i), expr (e) { } | |
415 | |
416 ~tree_classdef_enum (void) | |
417 { | |
418 delete id; | |
419 delete expr; | |
420 } | |
421 | |
422 tree_identifier *ident (void) { return id; } | |
423 | |
424 tree_expression *expression (void) { return expr; } | |
425 | |
426 void accept (tree_walker&); | |
427 | |
428 private: | |
429 | |
430 tree_identifier *id; | |
431 tree_expression *expr; | |
432 | |
433 // No copying! | |
434 | |
435 tree_classdef_enum (const tree_classdef_enum&); | |
436 | |
437 tree_classdef_enum& operator = (const tree_classdef_enum&); | |
438 }; | |
439 | |
440 class tree_classdef_enum_list : public octave_base_list<tree_classdef_enum *> | |
441 { | |
442 public: | |
443 | |
444 tree_classdef_enum_list (void) { } | |
445 | |
446 tree_classdef_enum_list (tree_classdef_enum *e) { append (e); } | |
447 | |
448 tree_classdef_enum_list (const octave_base_list<tree_classdef_enum *>& a) | |
449 : octave_base_list<tree_classdef_enum *> (a) { } | |
450 | |
451 ~tree_classdef_enum_list (void); | |
452 | |
453 void accept (tree_walker&); | |
454 | |
455 private: | |
456 | |
457 // No copying! | |
458 | |
459 tree_classdef_enum_list (const tree_classdef_enum_list&); | |
460 | |
461 tree_classdef_enum_list& operator = (const tree_classdef_enum_list&); | |
462 }; | |
463 | |
464 class tree_classdef_enum_block | |
465 : public tree_classdef_element<tree_classdef_enum *> | |
466 { | |
467 public: | |
468 | |
469 tree_classdef_enum_block (tree_classdef_attribute_list *a, | |
470 tree_classdef_enum_list *elist, | |
471 octave_comment_list *lc, | |
472 octave_comment_list *tc, int l = -1, int c = -1) | |
473 : tree_classdef_element<tree_classdef_enum *> (a, elist, lc, tc, l, c) { } | |
474 | |
475 ~tree_classdef_enum_block (void) { } | |
476 | |
477 void accept (tree_walker&); | |
478 | |
479 private: | |
480 | |
481 // No copying! | |
482 | |
483 tree_classdef_enum_block (const tree_classdef_enum_block&); | |
484 | |
485 tree_classdef_enum_block& operator = (const tree_classdef_enum_block&); | |
486 }; | |
487 | |
488 class tree_classdef_body | |
489 { | |
490 public: | |
491 | |
492 typedef typename std::list<tree_classdef_properties_block *>::iterator properties_list_iterator; | |
493 typedef typename std::list<tree_classdef_properties_block *>::const_iterator properties_list_const_iterator; | |
494 | |
495 typedef typename std::list<tree_classdef_methods_block *>::iterator methods_list_iterator; | |
496 typedef typename std::list<tree_classdef_methods_block *>::const_iterator methods_list_const_iterator; | |
497 | |
498 typedef typename std::list<tree_classdef_events_block *>::iterator events_list_iterator; | |
499 typedef typename std::list<tree_classdef_events_block *>::const_iterator events_list_const_iterator; | |
500 | |
501 typedef typename std::list<tree_classdef_enum_block *>::iterator enum_list_iterator; | |
502 typedef typename std::list<tree_classdef_enum_block *>::const_iterator enum_list_const_iterator; | |
503 | |
504 tree_classdef_body (void) | |
505 : properties_lst (), methods_lst (), events_lst (), enum_lst () { } | |
506 | |
507 tree_classdef_body (tree_classdef_properties_block *pb) | |
508 : properties_lst (), methods_lst (), events_lst (), enum_lst () | |
509 { | |
510 append (pb); | |
511 } | |
512 | |
513 tree_classdef_body (tree_classdef_methods_block *mb) | |
514 : properties_lst (), methods_lst (), events_lst (), enum_lst () | |
515 { | |
516 append (mb); | |
517 } | |
518 | |
519 tree_classdef_body (tree_classdef_events_block *evb) | |
520 : properties_lst (), methods_lst (), events_lst (), enum_lst () | |
521 { | |
522 append (evb); | |
523 } | |
524 | |
525 tree_classdef_body (tree_classdef_enum_block *enb) | |
526 : properties_lst (), methods_lst (), events_lst (), enum_lst () | |
527 { | |
528 append (enb); | |
529 } | |
530 | |
531 ~tree_classdef_body (void); | |
532 | |
533 void append (tree_classdef_properties_block *pb) | |
534 { | |
535 properties_lst.push_back (pb); | |
536 } | |
537 | |
538 void append (tree_classdef_methods_block *mb) | |
539 { | |
540 methods_lst.push_back (mb); | |
541 } | |
542 | |
543 void append (tree_classdef_events_block *evb) | |
544 { | |
545 events_lst.push_back (evb); | |
546 } | |
547 | |
548 void append (tree_classdef_enum_block *enb) | |
549 { | |
550 enum_lst.push_back (enb); | |
551 } | |
552 | |
553 std::list<tree_classdef_properties_block *> properties_list (void) | |
554 { | |
555 return properties_lst; | |
556 } | |
557 | |
558 std::list<tree_classdef_methods_block *> methods_list (void) | |
559 { | |
560 return methods_lst; | |
561 } | |
562 | |
563 std::list<tree_classdef_events_block *> events_list (void) | |
564 { | |
565 return events_lst; | |
566 } | |
567 | |
568 std::list<tree_classdef_enum_block *> enum_list (void) | |
569 { | |
570 return enum_lst; | |
571 } | |
572 | |
573 void accept (tree_walker&); | |
574 | |
575 private: | |
576 | |
577 std::list<tree_classdef_properties_block *> properties_lst; | |
578 | |
579 std::list<tree_classdef_methods_block *> methods_lst; | |
580 | |
581 std::list<tree_classdef_events_block *> events_lst; | |
582 | |
583 std::list<tree_classdef_enum_block *> enum_lst; | |
584 | |
585 // No copying! | |
586 | |
587 tree_classdef_body (const tree_classdef_body&); | |
588 | |
589 tree_classdef_body& operator = (const tree_classdef_body&); | |
590 }; | |
591 | |
592 // Classdef definition. | |
593 | |
594 class tree_classdef : public tree_command | |
595 { | |
596 public: | |
597 | |
598 tree_classdef (tree_classdef_attribute_list *a, tree_identifier *i, | |
599 tree_classdef_superclass_list *sc, | |
600 tree_classdef_body *b, octave_comment_list *lc, | |
601 octave_comment_list *tc, int l = -1, int c = -1) | |
602 : tree_command (l, c), attr_list (a), id (i), | |
603 supclass_list (sc), element_list (b), lead_comm (lc), trail_comm (tc) { } | |
604 | |
605 ~tree_classdef (void) | |
606 { | |
607 delete attr_list; | |
608 delete id; | |
609 delete supclass_list; | |
610 delete element_list; | |
611 delete lead_comm; | |
612 delete trail_comm; | |
613 } | |
614 | |
615 tree_classdef_attribute_list *attribute_list (void) { return attr_list; } | |
616 | |
617 tree_identifier *ident (void) { return id; } | |
618 | |
619 tree_classdef_superclass_list *superclass_list (void) { return supclass_list; } | |
620 | |
621 tree_classdef_body *body (void) { return element_list; } | |
622 | |
623 octave_comment_list *leading_comment (void) { return lead_comm; } | |
624 octave_comment_list *trailing_comment (void) { return trail_comm; } | |
625 | |
626 octave_value make_meta_class (void) const; | |
627 | |
628 tree_classdef *dup (symbol_table::scope_id scope, | |
629 symbol_table::context_id context) const; | |
630 | |
631 void accept (tree_walker& tw); | |
632 | |
633 private: | |
634 | |
635 tree_classdef_attribute_list *attr_list; | |
636 | |
637 tree_identifier *id; | |
638 | |
639 tree_classdef_superclass_list *supclass_list; | |
640 | |
641 tree_classdef_body *element_list; | |
642 | |
643 octave_comment_list *lead_comm; | |
644 octave_comment_list *trail_comm; | |
645 | |
646 // No copying! | |
647 | |
648 tree_classdef (const tree_classdef&); | |
649 | |
650 tree_classdef& operator = (const tree_classdef&); | |
651 }; | |
652 | |
653 #endif |