GNU Octave 10.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 
Loading...
Searching...
No Matches
pt-classdef.h
Go to the documentation of this file.
1////////////////////////////////////////////////////////////////////////
2//
3// Copyright (C) 2012-2025 The Octave Project Developers
4//
5// See the file COPYRIGHT.md in the top-level directory of this
6// distribution or <https://octave.org/copyright/>.
7//
8// This file is part of Octave.
9//
10// Octave is free software: you can redistribute it and/or modify it
11// under the terms of the GNU General Public License as published by
12// the Free Software Foundation, either version 3 of the License, or
13// (at your option) any later version.
14//
15// Octave is distributed in the hope that it will be useful, but
16// WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18// GNU General Public License for more details.
19//
20// You should have received a copy of the GNU General Public License
21// along with Octave; see the file COPYING. If not, see
22// <https://www.gnu.org/licenses/>.
23//
24////////////////////////////////////////////////////////////////////////
25
26#if ! defined (octave_tree_classdef_h)
27#define octave_tree_classdef_h 1
28
29#include "octave-config.h"
30
31class octave_value;
32
33#include "pt-cmd.h"
34#include "pt-delimiter-list.h"
35#include "pt-exp.h"
36#include "pt-walk.h"
37#include "pt-id.h"
38#include "token.h"
39
40#include <list>
41
43
44class coment_list;
45class interpreter;
47
49{
50public:
51
52 tree_superclass_ref (const std::string& meth, const std::string& cls, const token& tok)
53 : m_method_name (meth), m_class_name (cls), m_token (tok)
54 { }
55
56 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_superclass_ref)
57
59
60 filepos beg_pos () const { return m_token.beg_pos (); }
61 filepos end_pos () const { return m_token.end_pos (); }
62
63 std::string method_name () const
64 {
65 return m_method_name;
66 }
67
68 std::string class_name () const { return m_class_name; }
69
70 tree_superclass_ref * dup (symbol_scope& scope) const;
71
72 octave_value evaluate (tree_evaluator& tw, int nargout = 1)
73 {
74 octave_value_list retval = evaluate_n (tw, nargout);
75
76 return retval.length () > 0 ? retval(0) : octave_value ();
77 }
78
79 octave_value_list evaluate_n (tree_evaluator& tw, int nargout = 1);
80
82 {
83 tw.visit_superclass_ref (*this);
84 }
85
86private:
87
88 // The name of the method to call. This is the text before the
89 // "@" and may be of the form "object.method".
90 std::string m_method_name;
91
92 // The name of the superclass. This is the text after the "@"
93 // and may be of the form "object.method".
94 std::string m_class_name;
95
96 token m_token;
97};
98
100{
101public:
102
103 tree_metaclass_query (const std::string& cls, const token& tok)
104 : m_class_name (cls), m_token (tok)
105 { }
106
107 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_metaclass_query)
108
110
111 filepos beg_pos () const { return m_token.beg_pos (); }
112 filepos end_pos () const { return m_token.end_pos (); }
113
114 std::string class_name () const { return m_class_name; }
115
116 tree_metaclass_query * dup (symbol_scope& scope) const;
117
118 octave_value evaluate (tree_evaluator&, int nargout = 1);
119
121 {
122 return ovl (evaluate (tw, nargout));
123 }
124
126 {
127 tw.visit_metaclass_query (*this);
128 }
129
130private:
131
132 std::string m_class_name;
133
134 token m_token;
135};
136
138{
139public:
140
142 : m_id (i)
143 { }
144
146 : m_id (i), m_eq_tok (eq_tok), m_expr (e)
147 { }
148
149 tree_classdef_attribute (const token& not_tok, tree_identifier *i, bool b)
150 : m_not_tok (not_tok), m_id (i), m_neg (b)
151 { }
152
153 OCTAVE_DISABLE_COPY_MOVE (tree_classdef_attribute)
154
156 {
157 delete m_id;
158 delete m_expr;
159 }
160
161 filepos beg_pos () const { return m_not_tok ? m_not_tok.beg_pos () : m_id->beg_pos (); }
162 filepos end_pos () const { return m_expr ? m_expr->end_pos () : m_id->end_pos (); }
163
164 tree_identifier * ident () { return m_id; }
165
166 tree_expression * expression () { return m_expr; }
167
168 bool negate () { return m_neg; }
169
171 {
172 tw.visit_classdef_attribute (*this);
173 }
174
175private:
176
177 token m_not_tok;
178 tree_identifier *m_id;
179 token m_eq_tok;
180 tree_expression *m_expr {nullptr};
181 bool m_neg {false};
182};
183
184class tree_classdef_attribute_list : public std::list<tree_classdef_attribute *>
185{
186public:
187
189
191
192 tree_classdef_attribute_list (const std::list<tree_classdef_attribute *>& a)
193 : std::list<tree_classdef_attribute *> (a)
194 { }
195
196 OCTAVE_DISABLE_COPY_MOVE (tree_classdef_attribute_list)
197
199
200 tree_classdef_attribute_list * mark_in_delims (const token& open_delim, token& close_delim)
201 {
202 m_delims.push (open_delim, close_delim);
203 return this;
204 }
205
207 {
209 }
210
211private:
212
213 tree_delimiter_list m_delims;
214};
215
217{
218public:
219
221 : m_fqident (fqident)
222 { }
223
224 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_classdef_superclass)
225
227
228 void set_separator (const token& sep_tok) { m_sep_tok = sep_tok; }
229
230 std::string class_name () { return m_fqident.text (); }
231
233 {
234 tw.visit_classdef_superclass (*this);
235 }
236
237private:
238
239 // The '<' or '&&' token introducing an element of a superclass list
240 // element. Is there a better name for it?
241
242 token m_sep_tok;
243
244 // The fully-qualified identifier token for this superclass element.
245 token m_fqident;
246};
247
249 : public std::list<tree_classdef_superclass *>
250{
251public:
252
254
256 {
257 push_back (sc);
258 }
259
260 tree_classdef_superclass_list (const std::list<tree_classdef_superclass *>& a)
261 : std::list<tree_classdef_superclass *> (a)
262 { }
263
264 OCTAVE_DISABLE_COPY_MOVE (tree_classdef_superclass_list)
265
267
269 {
271 }
272};
273
275{
276public:
277
279 : m_block_tok (block_tok), m_attr_list (a), m_end_tok (end_tok)
280 { }
281
282 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_base_classdef_block)
283
285 {
286 delete m_attr_list;
287 }
288
290
292
293 void accept (tree_walker&) { }
294
295protected:
296
298
299 // List of attributes that apply to this class.
301
303};
304
305template <typename T>
307{
308public:
309
310 tree_classdef_block (const token& block_tok, tree_classdef_attribute_list *a, T *elt_list, const token& end_tok)
311 : tree_base_classdef_block (block_tok, a, end_tok), m_elt_list (elt_list)
312 { }
313
314 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_classdef_block)
315
317 {
318 delete m_elt_list;
319 }
320
321 filepos beg_pos () const { return m_block_tok.beg_pos (); }
322 filepos end_pos () const { return m_end_tok.end_pos (); }
323
324 T * element_list () { return m_elt_list; }
325
326private:
327
328 T *m_elt_list;
329};
330
331// FIXME: should this class be derived from tree?
332
334{
335public:
336
338
339 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_classdef_property)
340
342
344
345 void doc_string (const std::string& s) { m_doc_string = s; }
346
347 std::string doc_string () const { return m_doc_string; }
348
349 bool have_doc_string () const { return ! m_doc_string.empty (); }
350
352
354
356 {
357 tw.visit_classdef_property (*this);
358 }
359
360private:
361
363
364 std::string m_doc_string;
365};
366
367class tree_classdef_property_list : public std::list<tree_classdef_property *>
368{
369public:
370
372
374
375 tree_classdef_property_list (const std::list<tree_classdef_property *>& a)
376 : std::list<tree_classdef_property *> (a) { }
377
378 OCTAVE_DISABLE_COPY_MOVE (tree_classdef_property_list)
379
381
383 {
385 }
386};
387
388class tree_classdef_properties_block : public tree_classdef_block<tree_classdef_property_list>
389{
390public:
391
393 : tree_classdef_block<tree_classdef_property_list> (block_tok, a, plist, end_tok)
394 { }
395
396 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_classdef_properties_block)
397
399
401
403 {
405 }
406};
407
408class tree_classdef_method_list : public std::list<octave_value>
409{
410public:
411
413
414 tree_classdef_method_list (const octave_value& f) { push_back (f); }
415
416 tree_classdef_method_list (const std::list<octave_value>& a)
417 : std::list<octave_value> (a) { }
418
419 OCTAVE_DISABLE_COPY_MOVE (tree_classdef_method_list)
420
422
424 {
426 }
427};
428
429class tree_classdef_methods_block : public tree_classdef_block<tree_classdef_method_list>
430{
431public:
432
434 : tree_classdef_block<tree_classdef_method_list> (block_tok, a, mlist, end_tok)
435 { }
436
437 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_classdef_methods_block)
438
440
442
444 {
446 }
447};
448
450{
451public:
452
454
455 OCTAVE_DISABLE_COPY_MOVE (tree_classdef_event)
456
458 {
459 delete m_id;
460 }
461
462 tree_identifier * ident () { return m_id; }
463
465 {
466 tw.visit_classdef_event (*this);
467 }
468
469private:
470
471 tree_identifier *m_id;
472};
473
474class tree_classdef_event_list : public std::list<tree_classdef_event *>
475{
476public:
477
479
481
482 tree_classdef_event_list (const std::list<tree_classdef_event *>& a)
483 : std::list<tree_classdef_event *> (a)
484 { }
485
486 OCTAVE_DISABLE_COPY_MOVE (tree_classdef_event_list)
487
489
491 {
492 tw.visit_classdef_event_list (*this);
493 }
494};
495
496class tree_classdef_events_block : public tree_classdef_block<tree_classdef_event_list>
497{
498public:
499
501 : tree_classdef_block<tree_classdef_event_list> (block_tok, a, elist, end_tok)
502 { }
503
504 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_classdef_events_block)
505
507
509
511 {
513 }
514};
515
517{
518public:
519
521
522 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_classdef_enum)
523
525 {
526 delete m_id;
527 delete m_expr;
528 }
529
530 tree_identifier * ident () { return m_id; }
531
532 token open_paren () const { return m_open_paren; }
533
534 tree_expression * expression () { return m_expr; }
535
536 token close_paren () const { return m_close_paren; }
537
539 {
540 tw.visit_classdef_enum (*this);
541 }
542
543private:
544
545 tree_identifier *m_id;
546 token m_open_paren;
547 tree_expression *m_expr;
548 token m_close_paren;
549};
550
551class tree_classdef_enum_list : public std::list<tree_classdef_enum *>
552{
553public:
554
556
558
559 tree_classdef_enum_list (const std::list<tree_classdef_enum *>& a)
560 : std::list<tree_classdef_enum *> (a)
561 { }
562
563 OCTAVE_DISABLE_COPY_MOVE (tree_classdef_enum_list)
564
566
568 {
569 tw.visit_classdef_enum_list (*this);
570 }
571};
572
573class tree_classdef_enum_block : public tree_classdef_block<tree_classdef_enum_list>
574{
575public:
576
578 : tree_classdef_block<tree_classdef_enum_list> (block_tok, a, elist, end_tok)
579 { }
580
581 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_classdef_enum_block)
582
584
586
588 {
589 tw.visit_classdef_enum_block (*this);
590 }
591};
592
593// FIXME: should this class be derived from tree?
594
596{
597public:
598
599 typedef std::list<tree_classdef_properties_block *>::iterator property_list_iterator;
600 typedef std::list<tree_classdef_properties_block *>::const_iterator property_list_const_iterator;
601
602 typedef std::list<tree_classdef_methods_block *>::iterator method_list_iterator;
603 typedef std::list<tree_classdef_methods_block *>::const_iterator method_list_const_iterator;
604
605 typedef std::list<tree_classdef_events_block *>::iterator event_list_iterator;
606 typedef std::list<tree_classdef_events_block *>::const_iterator event_list_const_iterator;
607
608 typedef std::list<tree_classdef_enum_block *>::iterator enum_list_iterator;
609 typedef std::list<tree_classdef_enum_block *>::const_iterator enum_list_const_iterator;
610
612
614
616
618
620
621 OCTAVE_DISABLE_COPY_MOVE (tree_classdef_body)
622
624
626
628 {
629 m_property_lst.push_back (pb);
630 m_all_elements.push_back (pb);
631 return this;
632 }
633
635 {
636 m_method_lst.push_back (mb);
637 m_all_elements.push_back (mb);
638 return this;
639 }
640
642 {
643 m_event_lst.push_back (evb);
644 m_all_elements.push_back (evb);
645 return this;
646 }
647
649 {
650 m_enum_lst.push_back (enb);
651 m_all_elements.push_back (enb);
652 return this;
653 }
654
655 std::list<tree_classdef_properties_block *> property_list ()
656 {
657 return m_property_lst;
658 }
659
660 std::list<tree_classdef_methods_block *> method_list ()
661 {
662 return m_method_lst;
663 }
664
665 std::list<tree_classdef_events_block *> event_list ()
666 {
667 return m_event_lst;
668 }
669
670 std::list<tree_classdef_enum_block *> enum_list ()
671 {
672 return m_enum_lst;
673 }
674
676 {
677 tw.visit_classdef_body (*this);
678 }
679
680private:
681
682 std::list<tree_classdef_properties_block *> m_property_lst;
683
684 std::list<tree_classdef_methods_block *> m_method_lst;
685
686 std::list<tree_classdef_events_block *> m_event_lst;
687
688 std::list<tree_classdef_enum_block *> m_enum_lst;
689
690 std::list<tree_base_classdef_block *> m_all_elements;
691};
692
693// Classdef definition.
694
696{
697public:
698
699 tree_classdef (const symbol_scope& scope, const token& cdef_tok, tree_classdef_attribute_list *a, tree_identifier *i, tree_classdef_superclass_list *sc, tree_classdef_body *b, const token& end_tok, const std::string& pn = "", const std::string& fn = "")
700 : m_scope (scope), m_cdef_tok (cdef_tok), m_attr_list (a), m_id (i), m_supclass_list (sc), m_body (b), m_end_tok (end_tok), m_pack_name (pn), m_file_name (fn)
701 {
702 cache_doc_string ();
703 }
704
705 OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_classdef)
706
708 {
709 delete m_attr_list;
710 delete m_id;
711 delete m_supclass_list;
712 delete m_body;
713 }
714
715 filepos beg_pos () const { return m_cdef_tok.beg_pos (); }
716 filepos end_pos () const { return m_end_tok.end_pos (); }
717
718 symbol_scope scope () { return m_scope; }
719
721 attribute_list () { return m_attr_list; }
722
723 tree_identifier * ident () { return m_id; }
724
726 superclass_list () { return m_supclass_list; }
727
728 tree_classdef_body * body () { return m_body; }
729
730 comment_list leading_comments () const { return m_cdef_tok.leading_comments (); }
731
732 std::string package_name () const { return m_pack_name; }
733
734 std::string file_name () const { return m_file_name; }
735
737 bool is_at_folder = false);
738
739 std::string doc_string () const { return m_doc_string; }
740
742 {
743 tw.visit_classdef (*this);
744 }
745
746private:
747
748 void cache_doc_string ()
749 {
750 // First non-copyright comments found above and below classdef
751 // keyword are candidates for the documentation string. Use the
752 // first one that is not empty.
753
754 comment_list comments = m_cdef_tok.leading_comments ();
755
756 m_doc_string = comments.find_doc_string ();
757
758 if (m_doc_string.empty ())
759 {
760 comments = m_body->leading_comments ();
761
762 m_doc_string = comments.find_doc_string ();
763 }
764 }
765
766 // The scope that was used when parsing the classdef object and that
767 // corresponds to any identifiers that were found in attribute lists
768 // (for example). Used again when computing the meta class object.
769
770 symbol_scope m_scope;
771
772 token m_cdef_tok;
773
774 tree_classdef_attribute_list *m_attr_list;
775
776 tree_identifier *m_id;
777
778 tree_classdef_superclass_list *m_supclass_list;
779
780 tree_classdef_body *m_body;
781
782 token m_end_tok;
783
784 std::string m_doc_string;
785
786 std::string m_pack_name;
787 std::string m_file_name;
788};
789
790OCTAVE_END_NAMESPACE(octave)
791
792#endif
793
std::string find_doc_string() const
octave_idx_type length() const
Definition ovl.h:111
Definition token.h:42
filepos end_pos() const
Definition token.h:129
comment_list leading_comments() const
Definition token.h:134
filepos beg_pos() const
Definition token.h:128
std::string text() const
Definition token.h:151
tree_classdef_attribute_list * m_attr_list
tree_base_classdef_block(const token &block_tok, tree_classdef_attribute_list *a, const token &end_tok)
void accept(tree_walker &)
comment_list leading_comments() const
tree_classdef_attribute_list * attribute_list()
tree_classdef_attribute_list(const std::list< tree_classdef_attribute * > &a)
tree_classdef_attribute_list(tree_classdef_attribute *a)
tree_classdef_attribute_list * mark_in_delims(const token &open_delim, token &close_delim)
void accept(tree_walker &tw)
tree_classdef_attribute(tree_identifier *i, const token eq_tok, tree_expression *e)
tree_identifier * ident()
void accept(tree_walker &tw)
filepos end_pos() const
tree_expression * expression()
tree_classdef_attribute(const token &not_tok, tree_identifier *i, bool b)
filepos beg_pos() const
tree_classdef_attribute(tree_identifier *i)
filepos beg_pos() const
filepos end_pos() const
tree_classdef_block(const token &block_tok, tree_classdef_attribute_list *a, T *elt_list, const token &end_tok)
std::list< tree_classdef_methods_block * >::const_iterator method_list_const_iterator
std::list< tree_classdef_events_block * >::const_iterator event_list_const_iterator
std::list< tree_classdef_events_block * >::iterator event_list_iterator
tree_classdef_body * append(tree_classdef_properties_block *pb)
std::list< tree_classdef_properties_block * >::const_iterator property_list_const_iterator
tree_classdef_body * append(tree_classdef_events_block *evb)
tree_classdef_body * append(tree_classdef_enum_block *enb)
comment_list leading_comments() const
std::list< tree_classdef_properties_block * >::iterator property_list_iterator
void accept(tree_walker &tw)
std::list< tree_classdef_enum_block * >::iterator enum_list_iterator
std::list< tree_classdef_properties_block * > property_list()
std::list< tree_classdef_methods_block * > method_list()
tree_classdef_body * append(tree_classdef_methods_block *mb)
std::list< tree_classdef_enum_block * > enum_list()
std::list< tree_classdef_events_block * > event_list()
std::list< tree_classdef_enum_block * >::const_iterator enum_list_const_iterator
std::list< tree_classdef_methods_block * >::iterator method_list_iterator
tree_classdef_enum_list * enum_list()
tree_classdef_enum_block(const token &block_tok, tree_classdef_attribute_list *a, tree_classdef_enum_list *elist, const token &end_tok)
void accept(tree_walker &tw)
~tree_classdef_enum_block()=default
void accept(tree_walker &tw)
tree_classdef_enum_list(const std::list< tree_classdef_enum * > &a)
tree_classdef_enum_list(tree_classdef_enum *e)
tree_identifier * ident()
tree_expression * expression()
token close_paren() const
token open_paren() const
void accept(tree_walker &tw)
void accept(tree_walker &tw)
tree_classdef_event_list(const std::list< tree_classdef_event * > &a)
tree_classdef_event_list(tree_classdef_event *e)
void accept(tree_walker &tw)
tree_identifier * ident()
void accept(tree_walker &tw)
~tree_classdef_events_block()=default
tree_classdef_event_list * event_list()
tree_classdef_events_block(const token &block_tok, tree_classdef_attribute_list *a, tree_classdef_event_list *elist, const token &end_tok)
tree_classdef_method_list(const octave_value &f)
void accept(tree_walker &tw)
tree_classdef_method_list(const std::list< octave_value > &a)
~tree_classdef_method_list()=default
tree_classdef_method_list * method_list()
void accept(tree_walker &tw)
tree_classdef_methods_block(const token &block_tok, tree_classdef_attribute_list *a, tree_classdef_method_list *mlist, const token &end_tok)
~tree_classdef_methods_block()=default
tree_classdef_properties_block(const token &block_tok, tree_classdef_attribute_list *a, tree_classdef_property_list *plist, const token &end_tok)
tree_classdef_property_list * property_list()
void accept(tree_walker &tw)
tree_classdef_property_list(const std::list< tree_classdef_property * > &a)
void accept(tree_walker &tw)
tree_classdef_property_list(tree_classdef_property *p)
comment_list leading_comments()
void doc_string(const std::string &s)
std::string doc_string() const
void accept(tree_walker &tw)
tree_expression * expression()
tree_identifier * ident()
bool have_doc_string() const
tree_classdef_superclass_list(const std::list< tree_classdef_superclass * > &a)
void accept(tree_walker &tw)
tree_classdef_superclass_list(tree_classdef_superclass *sc)
tree_classdef_superclass(const token &fqident)
void accept(tree_walker &tw)
~tree_classdef_superclass()=default
void set_separator(const token &sep_tok)
comment_list leading_comments() const
octave_value make_meta_class(interpreter &interp, bool is_at_folder=false)
std::string package_name() const
tree_classdef_body * body()
tree_identifier * ident()
filepos end_pos() const
void accept(tree_walker &tw)
tree_classdef_superclass_list * superclass_list()
tree_classdef_attribute_list * attribute_list()
symbol_scope scope()
std::string doc_string() const
tree_classdef(const symbol_scope &scope, const token &cdef_tok, tree_classdef_attribute_list *a, tree_identifier *i, tree_classdef_superclass_list *sc, tree_classdef_body *b, const token &end_tok, const std::string &pn="", const std::string &fn="")
filepos beg_pos() const
std::string file_name() const
void push(const token &open_delim, const token &close_delim)
filepos beg_pos() const
Definition pt-id.h:75
filepos end_pos() const
Definition pt-id.h:76
tree_metaclass_query * dup(symbol_scope &scope) const
filepos end_pos() const
std::string class_name() const
tree_metaclass_query(const std::string &cls, const token &tok)
void accept(tree_walker &tw)
octave_value evaluate(tree_evaluator &, int nargout=1)
octave_value_list evaluate_n(tree_evaluator &tw, int nargout=1)
filepos beg_pos() const
~tree_metaclass_query()=default
filepos end_pos() const
Definition pt-classdef.h:61
void accept(tree_walker &tw)
Definition pt-classdef.h:81
std::string method_name() const
Definition pt-classdef.h:63
filepos beg_pos() const
Definition pt-classdef.h:60
tree_superclass_ref(const std::string &meth, const std::string &cls, const token &tok)
Definition pt-classdef.h:52
octave_value evaluate(tree_evaluator &tw, int nargout=1)
Definition pt-classdef.h:72
~tree_superclass_ref()=default
std::string class_name() const
Definition pt-classdef.h:68
octave_value_list evaluate_n(tree_evaluator &tw, int nargout=1)
tree_superclass_ref * dup(symbol_scope &scope) const
virtual void visit_classdef_attribute(tree_classdef_attribute &)
Definition pt-walk.cc:666
virtual void visit_classdef_methods_block(tree_classdef_methods_block &)
Definition pt-walk.cc:744
virtual void visit_classdef_enum_block(tree_classdef_enum_block &)
Definition pt-walk.cc:794
virtual void visit_classdef(tree_classdef &)
Definition pt-walk.cc:832
virtual void visit_classdef_superclass(tree_classdef_superclass &)
Definition pt-walk.cc:690
virtual void visit_classdef_property(tree_classdef_property &)
Definition pt-walk.cc:706
virtual void visit_classdef_event_list(tree_classdef_event_list &)
Definition pt-walk.cc:759
virtual void visit_classdef_events_block(tree_classdef_events_block &)
Definition pt-walk.cc:769
virtual void visit_classdef_property_list(tree_classdef_property_list &)
Definition pt-walk.cc:713
virtual void visit_classdef_body(tree_classdef_body &)
Definition pt-walk.cc:803
virtual void visit_classdef_enum(tree_classdef_enum &)
Definition pt-walk.cc:778
virtual void visit_classdef_enum_list(tree_classdef_enum_list &)
Definition pt-walk.cc:784
virtual void visit_classdef_properties_block(tree_classdef_properties_block &)
Definition pt-walk.cc:723
virtual void visit_classdef_superclass_list(tree_classdef_superclass_list &)
Definition pt-walk.cc:696
virtual void visit_classdef_attribute_list(tree_classdef_attribute_list &)
Definition pt-walk.cc:680
virtual void visit_classdef_method_list(tree_classdef_method_list &)
Definition pt-walk.cc:732
virtual void visit_classdef_event(tree_classdef_event &)
Definition pt-walk.cc:753
virtual void visit_superclass_ref(tree_superclass_ref &)
Definition pt-walk.cc:654
virtual void visit_metaclass_query(tree_metaclass_query &)
Definition pt-walk.cc:660
Definition pt.h:47
virtual filepos end_pos() const =0
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
F77_RET_T const F77_DBLE const F77_DBLE * f
octave_value_list ovl(const OV_Args &... args)
Construct an octave_value_list with less typing.
Definition ovl.h:217