3
Copyright (C) 1996-2013 John W. Eaton
5
This file is part of Octave.
7
Octave is free software; you can redistribute it and/or modify it
8
under the terms of the GNU General Public License as published by the
9
Free Software Foundation; either version 3 of the License, or (at your
10
option) any later version.
12
Octave is distributed in the hope that it will be useful, but WITHOUT
13
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17
You should have received a copy of the GNU General Public License
18
along with Octave; see the file COPYING. If not, see
19
<http://www.gnu.org/licenses/>.
23
#if !defined (octave_pt_loop_h)
24
#define octave_pt_loop_h 1
29
class tree_argument_list;
30
class tree_expression;
31
class tree_statement_list;
35
#include "comment-list.h"
44
tree_while_command : public tree_command
48
tree_while_command (int l = -1, int c = -1)
49
: tree_command (l, c), expr (0), list (0), lead_comm (0),
56
tree_while_command (tree_expression *e,
57
octave_comment_list *lc = 0,
58
octave_comment_list *tc = 0,
59
int l = -1, int c = -1)
60
: tree_command (l, c), expr (e), list (0), lead_comm (lc),
67
tree_while_command (tree_expression *e, tree_statement_list *lst,
68
octave_comment_list *lc = 0,
69
octave_comment_list *tc = 0,
70
int l = -1, int c = -1)
71
: tree_command (l, c), expr (e), list (lst), lead_comm (lc),
78
~tree_while_command (void);
80
tree_expression *condition (void) { return expr; }
82
tree_statement_list *body (void) { return list; }
84
octave_comment_list *leading_comment (void) { return lead_comm; }
86
octave_comment_list *trailing_comment (void) { return trail_comm; }
88
tree_command *dup (symbol_table::scope_id scope,
89
symbol_table::context_id context) const;
91
void accept (tree_walker& tw);
94
// some functions use by tree_jit
95
jit_info *get_info (void) const
100
void stash_info (jit_info *jinfo)
108
// Expression to test.
109
tree_expression *expr;
111
// List of commands to execute.
112
tree_statement_list *list;
114
// Comment preceding WHILE token.
115
octave_comment_list *lead_comm;
117
// Comment preceding ENDWHILE token.
118
octave_comment_list *trail_comm;
123
// compiled version of the loop
129
tree_while_command (const tree_while_command&);
131
tree_while_command& operator = (const tree_while_command&);
137
tree_do_until_command : public tree_while_command
141
tree_do_until_command (int l = -1, int c = -1)
142
: tree_while_command (l, c) { }
144
tree_do_until_command (tree_expression *e,
145
octave_comment_list *lc = 0,
146
octave_comment_list *tc = 0,
147
int l = -1, int c = -1)
148
: tree_while_command (e, lc, tc, l, c) { }
150
tree_do_until_command (tree_expression *e, tree_statement_list *lst,
151
octave_comment_list *lc = 0,
152
octave_comment_list *tc = 0,
153
int l = -1, int c = -1)
154
: tree_while_command (e, lst, lc, tc, l, c) { }
156
~tree_do_until_command (void) { }
158
tree_command *dup (symbol_table::scope_id scope,
159
symbol_table::context_id context) const;
161
void accept (tree_walker& tw);
167
tree_do_until_command (const tree_do_until_command&);
169
tree_do_until_command& operator = (const tree_do_until_command&);
175
tree_simple_for_command : public tree_command
179
tree_simple_for_command (int l = -1, int c = -1)
180
: tree_command (l, c), parallel (false), lhs (0), expr (0),
181
maxproc (0), list (0), lead_comm (0), trail_comm (0)
187
tree_simple_for_command (bool parallel_arg, tree_expression *le,
189
tree_expression *maxproc_arg,
190
tree_statement_list *lst,
191
octave_comment_list *lc = 0,
192
octave_comment_list *tc = 0,
193
int l = -1, int c = -1)
194
: tree_command (l, c), parallel (parallel_arg), lhs (le),
195
expr (re), maxproc (maxproc_arg), list (lst),
196
lead_comm (lc), trail_comm (tc)
202
~tree_simple_for_command (void);
204
bool in_parallel (void) { return parallel; }
206
tree_expression *left_hand_side (void) { return lhs; }
208
tree_expression *control_expr (void) { return expr; }
210
tree_expression *maxproc_expr (void) { return maxproc; }
212
tree_statement_list *body (void) { return list; }
214
octave_comment_list *leading_comment (void) { return lead_comm; }
216
octave_comment_list *trailing_comment (void) { return trail_comm; }
218
tree_command *dup (symbol_table::scope_id scope,
219
symbol_table::context_id context) const;
221
void accept (tree_walker& tw);
224
// some functions use by tree_jit
225
jit_info *get_info (void) const
230
void stash_info (jit_info *jinfo)
237
// TRUE means operate in parallel (subject to the value of the
238
// maxproc expression).
241
// Expression to modify.
242
tree_expression *lhs;
244
// Expression to evaluate.
245
tree_expression *expr;
247
// Expression to tell how many processors should be used (only valid
248
// if parallel is TRUE).
249
tree_expression *maxproc;
251
// List of commands to execute.
252
tree_statement_list *list;
254
// Comment preceding FOR token.
255
octave_comment_list *lead_comm;
257
// Comment preceding ENDFOR token.
258
octave_comment_list *trail_comm;
260
// compiled version of the loop
265
tree_simple_for_command (const tree_simple_for_command&);
267
tree_simple_for_command& operator = (const tree_simple_for_command&);
271
tree_complex_for_command : public tree_command
275
tree_complex_for_command (int l = -1, int c = -1)
276
: tree_command (l, c), lhs (0), expr (0), list (0), lead_comm (0),
279
tree_complex_for_command (tree_argument_list *le, tree_expression *re,
280
tree_statement_list *lst,
281
octave_comment_list *lc = 0,
282
octave_comment_list *tc = 0,
283
int l = -1, int c = -1)
284
: tree_command (l, c), lhs (le), expr (re), list (lst),
285
lead_comm (lc), trail_comm (tc) { }
287
~tree_complex_for_command (void);
289
tree_argument_list *left_hand_side (void) { return lhs; }
291
tree_expression *control_expr (void) { return expr; }
293
tree_statement_list *body (void) { return list; }
295
octave_comment_list *leading_comment (void) { return lead_comm; }
297
octave_comment_list *trailing_comment (void) { return trail_comm; }
299
tree_command *dup (symbol_table::scope_id scope,
300
symbol_table::context_id context) const;
302
void accept (tree_walker& tw);
306
// Expression to modify.
307
tree_argument_list *lhs;
309
// Expression to evaluate.
310
tree_expression *expr;
312
// List of commands to execute.
313
tree_statement_list *list;
315
// Comment preceding FOR token.
316
octave_comment_list *lead_comm;
318
// Comment preceding ENDFOR token.
319
octave_comment_list *trail_comm;
323
tree_complex_for_command (const tree_complex_for_command&);
325
tree_complex_for_command& operator = (const tree_complex_for_command&);