annotate libinterp/parse-tree/pt-check.cc @ 23075:4e3d47dc7e25

move parse tree classes inside octave namespace * lex.h, lex.ll, oct-parse.in.yy, parse.h, pt-all.h, pt-arg-list.cc, pt-arg-list.h, pt-array-list.cc, pt-array-list.h, pt-assign.cc, pt-assign.h, pt-binop.cc, pt-binop.h, pt-bp.cc, pt-bp.h, pt-cbinop.cc, pt-cbinop.h, pt.cc, pt-cell.cc, pt-cell.h, pt-check.cc, pt-check.h, pt-classdef.cc, pt-classdef.h, pt-cmd.cc, pt-cmd.h, pt-colon.cc, pt-colon.h, pt-const.cc, pt-const.h, pt-decl.cc, pt-decl.h, pt-eval.cc, pt-eval.h, pt-except.cc, pt-except.h, pt-exp.cc, pt-exp.h, pt-fcn-handle.cc, pt-fcn-handle.h, pt-funcall.cc, pt-funcall.h, pt.h, pt-id.cc, pt-id.h, pt-idx.cc, pt-idx.h, pt-jump.cc, pt-jump.h, pt-loop.cc, pt-loop.h, pt-mat.cc, pt-mat.h, pt-misc.cc, pt-misc.h, pt-pr-code.cc, pt-pr-code.h, pt-select.cc, pt-select.h, pt-stmt.cc, pt-stmt.h, pt-unop.cc, pt-unop.h, pt-walk.h, token.cc, token.h: Move classes and most functions inside octave namespace. Change all uses.
author John W. Eaton <jwe@octave.org>
date Thu, 19 Jan 2017 23:41:54 -0500
parents 551ac93c984c
children ef4d915df748
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
1 /*
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
2
22323
bac0d6f07a3e maint: Update copyright notices for 2016.
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
3 Copyright (C) 1996-2016 John W. Eaton
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
4
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
6
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22417
diff changeset
8 under the terms of the GNU General Public License as published by
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22417
diff changeset
9 the Free Software Foundation; either version 3 of the License, or
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22417
diff changeset
10 (at your option) any later version.
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
11
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22417
diff changeset
12 Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22417
diff changeset
13 WITHOUT ANY WARRANTY; without even the implied warranty of
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22417
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22417
diff changeset
15 GNU General Public License for more details.
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
16
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6215
diff changeset
18 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6215
diff changeset
19 <http://www.gnu.org/licenses/>.
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
20
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
21 */
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
22
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
23 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21200
diff changeset
24 # include "config.h"
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
25 #endif
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
26
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
27 #include "error.h"
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
28 #include "input.h"
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
29 #include "ov-usr-fcn.h"
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
30 #include "pt-all.h"
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
31
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
32 namespace octave
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
33 {
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
34 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
35 tree_checker::visit_argument_list (tree_argument_list& lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
36 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
37 tree_argument_list::iterator p = lst.begin ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
38
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
39 while (p != lst.end ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
40 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
41 tree_expression *elt = *p++;
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
42
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
43 if (elt)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
44 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
45 if (do_lvalue_check && ! elt->lvalue_ok ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
46 errmsg ("invalid lvalue in multiple assignment", elt->line ());
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
47 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
48 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
49 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
50
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
51 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
52 tree_checker::visit_binary_expression (tree_binary_expression& expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
53 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
54 tree_expression *op1 = expr.lhs ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
55
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
56 if (op1)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
57 op1->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
58
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
59 tree_expression *op2 = expr.rhs ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
60
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
61 if (op2)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
62 op2->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
63 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
64
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
65 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
66 tree_checker::visit_break_command (tree_break_command&)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
67 { }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
68
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
69 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
70 tree_checker::visit_colon_expression (tree_colon_expression& expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
71 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
72 tree_expression *op1 = expr.base ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
73
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
74 if (op1)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
75 op1->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
76
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
77 tree_expression *op3 = expr.increment ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
78
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
79 if (op3)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
80 op3->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
81
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
82 tree_expression *op2 = expr.limit ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
83
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
84 if (op2)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
85 op2->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
86 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
87
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
88 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
89 tree_checker::visit_continue_command (tree_continue_command&)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
90 { }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
91
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
92 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
93 tree_checker::do_decl_command (tree_decl_command& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
94 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
95 tree_decl_init_list *init_list = cmd.initializer_list ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
96
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
97 if (init_list)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
98 init_list->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
99 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
100
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
101 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
102 tree_checker::visit_global_command (tree_global_command& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
103 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
104 do_decl_command (cmd);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
105 }
8658
73c4516fae10 New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents: 7715
diff changeset
106
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
107 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
108 tree_checker::visit_persistent_command (tree_persistent_command& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
109 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
110 do_decl_command (cmd);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
111 }
8658
73c4516fae10 New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents: 7715
diff changeset
112
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
113 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
114 tree_checker::visit_decl_elt (tree_decl_elt& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
115 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
116 tree_identifier *id = cmd.ident ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
117
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
118 if (id)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
119 id->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
120
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
121 tree_expression *expr = cmd.expression ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
122
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
123 if (expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
124 expr->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
125 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
126
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
127 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
128 tree_checker::visit_decl_init_list (tree_decl_init_list& lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
129 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
130 tree_decl_init_list::iterator p = lst.begin ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
131
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
132 while (p != lst.end ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
133 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
134 tree_decl_elt *elt = *p++;
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
135
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
136 if (elt)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
137 elt->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
138 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
139 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
140
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
141 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
142 tree_checker::visit_simple_for_command (tree_simple_for_command& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
143 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
144 tree_expression *lhs = cmd.left_hand_side ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
145
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
146 if (lhs)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
147 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
148 if (! lhs->lvalue_ok ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
149 errmsg ("invalid lvalue in for command", cmd.line ());
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
150 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
151
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
152 tree_expression *expr = cmd.control_expr ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
153
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
154 if (expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
155 expr->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
156
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
157 tree_expression *maxproc = cmd.maxproc_expr ();
13245
027a2186cd90 parfor keyword and infrastructure, but handle parfor as normal for loop for now
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
158
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
159 if (maxproc)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
160 maxproc->accept (*this);
13245
027a2186cd90 parfor keyword and infrastructure, but handle parfor as normal for loop for now
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
161
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
162 tree_statement_list *list = cmd.body ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
163
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
164 if (list)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
165 list->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
166 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
167
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
168 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
169 tree_checker::visit_complex_for_command (tree_complex_for_command& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
170 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
171 tree_argument_list *lhs = cmd.left_hand_side ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
172
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
173 if (lhs)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
174 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
175 int len = lhs->length ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
176
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
177 if (len == 0 || len > 2)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
178 errmsg ("invalid number of output arguments in for command",
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
179 cmd.line ());
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
180
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
181 do_lvalue_check = true;
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
182
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
183 lhs->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
184
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
185 do_lvalue_check = false;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
186 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
187
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
188 tree_expression *expr = cmd.control_expr ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
189
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
190 if (expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
191 expr->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
192
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
193 tree_statement_list *list = cmd.body ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
194
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
195 if (list)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
196 list->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
197 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
198
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
199 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
200 tree_checker::visit_octave_user_script (octave_user_script& fcn)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
201 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
202 tree_statement_list *cmd_list = fcn.body ();
7715
5b4d278ec828 parse scripts completely before executing
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
203
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
204 if (cmd_list)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
205 cmd_list->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
206 }
7715
5b4d278ec828 parse scripts completely before executing
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
207
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
208 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
209 tree_checker::visit_octave_user_function (octave_user_function& fcn)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
210 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
211 tree_statement_list *cmd_list = fcn.body ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
212
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
213 if (cmd_list)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
214 cmd_list->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
215 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
216
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
217 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
218 tree_checker::visit_function_def (tree_function_def& fdef)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
219 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
220 octave_value fcn = fdef.function ();
7715
5b4d278ec828 parse scripts completely before executing
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
221
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
222 octave_function *f = fcn.function_value ();
8658
73c4516fae10 New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents: 7715
diff changeset
223
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
224 if (f)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
225 f->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
226 }
7715
5b4d278ec828 parse scripts completely before executing
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
227
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
228 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
229 tree_checker::visit_identifier (tree_identifier& /* id */)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
230 { }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
231
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
232 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
233 tree_checker::visit_if_clause (tree_if_clause& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
234 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
235 tree_expression *expr = cmd.condition ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
236
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
237 if (expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
238 expr->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
239
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
240 tree_statement_list *list = cmd.commands ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
241
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
242 if (list)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
243 list->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
244 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
245
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
246 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
247 tree_checker::visit_if_command (tree_if_command& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
248 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
249 tree_if_command_list *list = cmd.cmd_list ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
250
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
251 if (list)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
252 list->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
253 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
254
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
255 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
256 tree_checker::visit_if_command_list (tree_if_command_list& lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
257 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
258 tree_if_command_list::iterator p = lst.begin ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
259
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
260 while (p != lst.end ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
261 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
262 tree_if_clause *elt = *p++;
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
263
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
264 if (elt)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
265 elt->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
266 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
267 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
268
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
269 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
270 tree_checker::visit_index_expression (tree_index_expression& expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
271 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
272 tree_expression *e = expr.expression ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
273
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
274 if (e)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
275 e->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
276
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
277 std::list<tree_argument_list *> lst = expr.arg_lists ();
3933
f9ea3dcf58ee [project @ 2002-05-15 03:21:00 by jwe]
jwe
parents: 3930
diff changeset
278
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
279 std::list<tree_argument_list *>::iterator p = lst.begin ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
280
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
281 while (p != lst.end ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
282 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
283 tree_argument_list *elt = *p++;
3933
f9ea3dcf58ee [project @ 2002-05-15 03:21:00 by jwe]
jwe
parents: 3930
diff changeset
284
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
285 if (elt)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
286 elt->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
287 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
288 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
289
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
290 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
291 tree_checker::visit_matrix (tree_matrix& lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
292 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
293 tree_matrix::iterator p = lst.begin ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
294
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
295 while (p != lst.end ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
296 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
297 tree_argument_list *elt = *p++;
4219
23d06c9e1edd [project @ 2002-12-06 21:29:17 by jwe]
jwe
parents: 4207
diff changeset
298
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
299 if (elt)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
300 elt->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
301 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
302 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
303
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
304 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
305 tree_checker::visit_cell (tree_cell& lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
306 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
307 tree_matrix::iterator p = lst.begin ();
4219
23d06c9e1edd [project @ 2002-12-06 21:29:17 by jwe]
jwe
parents: 4207
diff changeset
308
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
309 while (p != lst.end ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
310 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
311 tree_argument_list *elt = *p++;
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
312
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
313 if (elt)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
314 elt->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
315 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
316 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
317
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
318 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
319 tree_checker::visit_multi_assignment (tree_multi_assignment& expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
320 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
321 tree_argument_list *lhs = expr.left_hand_side ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
322
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
323 if (lhs)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
324 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
325 do_lvalue_check = true;
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
326
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
327 lhs->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
328
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
329 do_lvalue_check = false;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
330 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
331
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
332 tree_expression *rhs = expr.right_hand_side ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
333
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
334 if (rhs)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
335 rhs->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
336 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
337
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
338 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
339 tree_checker::visit_no_op_command (tree_no_op_command& /* cmd */)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
340 { }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
341
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
342 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
343 tree_checker::visit_anon_fcn_handle (tree_anon_fcn_handle& /* afh */)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
344 { }
5861
2a6cb4ed8f1e [project @ 2006-06-16 05:09:41 by jwe]
jwe
parents: 5307
diff changeset
345
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
346 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
347 tree_checker::visit_constant (tree_constant& /* val */)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
348 { }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
349
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
350 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
351 tree_checker::visit_fcn_handle (tree_fcn_handle& /* fh */)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
352 { }
4342
813effe14ee1 [project @ 2003-02-20 08:35:55 by jwe]
jwe
parents: 4229
diff changeset
353
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
354 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
355 tree_checker::visit_funcall (tree_funcall& /* fc */)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
356 { }
15035
a820a990968e new tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 14294
diff changeset
357
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
358 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
359 tree_checker::visit_parameter_list (tree_parameter_list& lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
360 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
361 tree_parameter_list::iterator p = lst.begin ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
362
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
363 while (p != lst.end ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
364 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
365 tree_decl_elt *elt = *p++;
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
366
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
367 if (elt)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
368 elt->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
369 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
370 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
371
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
372 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
373 tree_checker::visit_postfix_expression (tree_postfix_expression& expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
374 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
375 tree_expression *e = expr.operand ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
376
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
377 if (e)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
378 e->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
379 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
380
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
381 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
382 tree_checker::visit_prefix_expression (tree_prefix_expression& expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
383 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
384 tree_expression *e = expr.operand ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
385
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
386 if (e)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
387 e->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
388 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
389
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
390 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
391 tree_checker::visit_return_command (tree_return_command&)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
392 { }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
393
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
394 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
395 tree_checker::visit_return_list (tree_return_list& lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
396 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
397 tree_return_list::iterator p = lst.begin ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
398
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
399 while (p != lst.end ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
400 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
401 tree_index_expression *elt = *p++;
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
402
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
403 if (elt)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
404 elt->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
405 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
406 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
407
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
408 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
409 tree_checker::visit_simple_assignment (tree_simple_assignment& expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
410 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
411 tree_expression *lhs = expr.left_hand_side ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
412
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
413 if (lhs)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
414 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
415 if (! lhs->lvalue_ok ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
416 errmsg ("invalid lvalue in assignment", expr.line ());
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
417 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
418
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
419 tree_expression *rhs = expr.right_hand_side ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
420
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
421 if (rhs)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
422 rhs->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
423 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
424
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
425 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
426 tree_checker::visit_statement (tree_statement& stmt)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
427 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
428 tree_command *cmd = stmt.command ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
429
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
430 if (cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
431 cmd->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
432 else
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
433 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
434 tree_expression *expr = stmt.expression ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
435
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
436 if (expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
437 expr->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
438 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
439 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
440
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
441 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
442 tree_checker::visit_statement_list (tree_statement_list& lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
443 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
444 for (tree_statement* elt : lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
445 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
446 if (elt)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
447 elt->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
448 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
449 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
450
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
451 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
452 tree_checker::visit_switch_case (tree_switch_case& cs)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
453 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
454 tree_expression *label = cs.case_label ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
455
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
456 if (label)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
457 label->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
458
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
459 tree_statement_list *list = cs.commands ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
460
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
461 if (list)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
462 list->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
463 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
464
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
465 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
466 tree_checker::visit_switch_case_list (tree_switch_case_list& lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
467 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
468 tree_switch_case_list::iterator p = lst.begin ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
469
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
470 while (p != lst.end ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
471 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
472 tree_switch_case *elt = *p++;
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
473
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
474 if (elt)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
475 elt->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
476 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
477 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
478
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
479 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
480 tree_checker::visit_switch_command (tree_switch_command& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
481 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
482 tree_expression *expr = cmd.switch_value ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
483
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
484 if (expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
485 expr->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
486
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
487 tree_switch_case_list *list = cmd.case_list ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
488
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
489 if (list)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
490 list->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
491 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
492
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
493 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
494 tree_checker::visit_try_catch_command (tree_try_catch_command& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
495 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
496 tree_statement_list *try_code = cmd.body ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
497
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
498 tree_identifier *expr_id = cmd.identifier ();
17249
923ce8b42db2 improve try-catch-statement to save exception to a variable (bug #33217)
Stefan Mahr <dac922@gmx.de>
parents: 16203
diff changeset
499
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
500 if (expr_id)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
501 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
502 if (! expr_id->lvalue_ok ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
503 errmsg ("invalid lvalue used for identifier in try-catch command",
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
504 cmd.line ());
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
505 }
17249
923ce8b42db2 improve try-catch-statement to save exception to a variable (bug #33217)
Stefan Mahr <dac922@gmx.de>
parents: 16203
diff changeset
506
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
507 if (try_code)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
508 try_code->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
509
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
510 tree_statement_list *catch_code = cmd.cleanup ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
511
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
512 if (catch_code)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
513 catch_code->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
514 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
515
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
516 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
517 tree_checker::visit_unwind_protect_command (tree_unwind_protect_command& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
518 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
519 tree_statement_list *unwind_protect_code = cmd.body ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
520
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
521 if (unwind_protect_code)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
522 unwind_protect_code->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
523
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
524 tree_statement_list *cleanup_code = cmd.cleanup ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
525
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
526 if (cleanup_code)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
527 cleanup_code->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
528 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
529
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
530 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
531 tree_checker::visit_while_command (tree_while_command& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
532 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
533 tree_expression *expr = cmd.condition ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
534
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
535 if (expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
536 expr->accept (*this);
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
537
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
538 tree_statement_list *list = cmd.body ();
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
539
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
540 if (list)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
541 list->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
542 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
543
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
544 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
545 tree_checker::visit_do_until_command (tree_do_until_command& cmd)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
546 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
547 tree_statement_list *list = cmd.body ();
4229
40153a2affd6 [project @ 2002-12-18 20:37:32 by jwe]
jwe
parents: 4219
diff changeset
548
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
549 if (list)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
550 list->accept (*this);
4229
40153a2affd6 [project @ 2002-12-18 20:37:32 by jwe]
jwe
parents: 4219
diff changeset
551
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
552 tree_expression *expr = cmd.condition ();
4229
40153a2affd6 [project @ 2002-12-18 20:37:32 by jwe]
jwe
parents: 4219
diff changeset
553
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
554 if (expr)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
555 expr->accept (*this);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
556 }
4229
40153a2affd6 [project @ 2002-12-18 20:37:32 by jwe]
jwe
parents: 4219
diff changeset
557
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
558 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
559 tree_checker::errmsg (const std::string& msg, int line)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
560 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
561 if (file_name.empty ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
562 error ("%s", msg.c_str ());
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
563 else
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
564 error ("%s: %d: %s", file_name.c_str (), line, msg.c_str ());
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 22872
diff changeset
565 }
3011
2ad9af85b89b [project @ 1997-06-01 19:34:20 by jwe]
jwe
parents:
diff changeset
566 }