annotate src/pt-misc.h @ 2846:52e7c4509983

[project @ 1997-03-26 23:27:35 by jwe]
author jwe
date Wed, 26 Mar 1997 23:29:12 +0000
parents 2c0f259cf83d
children 8b262e771614
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
1 /*
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
2
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
3 Copyright (C) 1996 John W. Eaton
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
4
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
6
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
10 later version.
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
11
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
15 for more details.
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
16
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
1315
611d403c7f3d [project @ 1995-06-25 19:56:32 by jwe]
jwe
parents: 1297
diff changeset
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
20
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
21 */
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
22
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
23 #if !defined (octave_tree_misc_h)
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
24 #define octave_tree_misc_h 1
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
25
1297
12ecc2ecf0e3 [project @ 1995-05-01 18:39:43 by jwe]
jwe
parents: 1269
diff changeset
26 #if defined (__GNUG__)
12ecc2ecf0e3 [project @ 1995-05-01 18:39:43 by jwe]
jwe
parents: 1269
diff changeset
27 #pragma interface
12ecc2ecf0e3 [project @ 1995-05-01 18:39:43 by jwe]
jwe
parents: 1269
diff changeset
28 #endif
12ecc2ecf0e3 [project @ 1995-05-01 18:39:43 by jwe]
jwe
parents: 1269
diff changeset
29
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
30 class ostream;
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
31
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
32 class octave_value_list;
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
33 class octave_value;
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
34 class tree_command;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
35 class tree_expression;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
36 class tree_simple_assignment_expression;
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
37 class tree_index_expression;
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
38 class tree_identifier;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
39 class symbol_record;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
40 class symbol_table;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
41
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
42 class tree_statement;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
43 class tree_statement_list;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
44 class tree_argument_list;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
45 class tree_parameter_list;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
46 class tree_return_list;
723
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
47 class tree_va_return_list;
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
48 class tree_decl_elt;
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
49 class tree_decl_init_list;
2764
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
50 class tree_if_clause;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
51 class tree_if_command_list;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
52 class tree_switch_case;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
53 class tree_switch_case_list;
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
54
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
55 class tree_walker;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
56
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
57 #include <SLList.h>
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
58
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
59 #include "pt-base.h"
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
60
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
61 // A statement is either a command to execute or an expression to
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
62 // evaluate.
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
63
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
64 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
65 tree_statement
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
66 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
67 friend class tree_statement_list;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
68
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
69 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
70
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
71 tree_statement (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
72 : cmd (0), expr (0), print_flag (true) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
73
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
74 tree_statement (tree_command *c)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
75 : cmd (c), expr (0), print_flag (true) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
76
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
77 tree_statement (tree_expression *e)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
78 : cmd (0), expr (e), print_flag (true) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
79
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
80 ~tree_statement (void);
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
81
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
82 void set_print_flag (bool print)
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
83 { print_flag = print; }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
84
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
85 bool is_command (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
86 { return cmd != 0; }
1510
fe9c39fd89c7 [project @ 1995-10-03 10:43:11 by jwe]
jwe
parents: 1491
diff changeset
87
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
88 bool is_expression (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
89 { return expr != 0; }
1510
fe9c39fd89c7 [project @ 1995-10-03 10:43:11 by jwe]
jwe
parents: 1491
diff changeset
90
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
91 int line (void);
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
92 int column (void);
1510
fe9c39fd89c7 [project @ 1995-10-03 10:43:11 by jwe]
jwe
parents: 1491
diff changeset
93
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
94 void maybe_echo_code (bool);
1588
27f5ac98fc4a [project @ 1995-10-31 06:04:47 by jwe]
jwe
parents: 1510
diff changeset
95
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
96 bool print_result (void) { return print_flag; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
97
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
98 tree_command *command (void) { return cmd; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
99
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
100 tree_expression *expression (void) { return expr; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
101
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
102 void accept (tree_walker& tw);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
103
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
104 private:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
105
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
106 // Only one of cmd or expr can be valid at once.
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
107
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
108 // Command to execute.
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
109 tree_command *cmd;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
110
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
111 // Expression to evaluate.
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
112 tree_expression *expr;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
113
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
114 // Print result of eval for this command?
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
115 bool print_flag;
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
116 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
117
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
118 // A list of statements to evaluate.
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
119
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
120 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
121 tree_statement_list : public SLList<tree_statement *>
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
122 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
123 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
124
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
125 tree_statement_list (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
126 : SLList<tree_statement *> (), function_body (false) { }
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
127
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
128 tree_statement_list (tree_statement *s)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
129 : SLList<tree_statement *> (), function_body (false) { append (s); }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
130
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
131 ~tree_statement_list (void)
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
132 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
133 while (! empty ())
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
134 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
135 tree_statement *t = remove_front ();
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
136 delete t;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
137 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
138 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
139
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
140 void mark_as_function_body (void) { function_body = true; }
1588
27f5ac98fc4a [project @ 1995-10-31 06:04:47 by jwe]
jwe
parents: 1510
diff changeset
141
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
142 octave_value eval (bool print);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
143
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
144 octave_value_list eval (bool print, int nargout);
672
066e1551639c [project @ 1994-09-07 21:10:32 by jwe]
jwe
parents: 632
diff changeset
145
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
146 void accept (tree_walker& tw);
1588
27f5ac98fc4a [project @ 1995-10-31 06:04:47 by jwe]
jwe
parents: 1510
diff changeset
147
27f5ac98fc4a [project @ 1995-10-31 06:04:47 by jwe]
jwe
parents: 1510
diff changeset
148 private:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
149
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
150 // Does this list of statements make up the body of a function?
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
151 bool function_body;
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
152 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
153
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
154 // Argument lists. Used to hold the list of expressions that are the
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
155 // arguments in a function call or index expression.
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
156
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
157 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
158 tree_argument_list : public SLList<tree_expression *>
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
159 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
160 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
161
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
162 tree_argument_list (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
163 : SLList<tree_expression *> () { }
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
164
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
165 tree_argument_list (tree_expression *t)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
166 : SLList<tree_expression *> () { append (t); }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
167
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
168 ~tree_argument_list (void)
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
169 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
170 while (! empty ())
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
171 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
172 tree_expression *t = remove_front ();
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
173 delete t;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
174 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
175 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
176
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
177 octave_value_list convert_to_const_vector (void);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
178
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
179 void accept (tree_walker& tw);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
180 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
181
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
182 // Parameter lists. Used to hold the list of input and output
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
183 // parameters in a function definition. Elements are identifiers
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
184 // only.
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
185
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
186 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
187 tree_parameter_list : public SLList<tree_identifier *>
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
188 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
189 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
190
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
191 tree_parameter_list (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
192 : SLList<tree_identifier *> (), marked_for_varargs (0) { }
632
ddc21c0f0089 [project @ 1994-08-19 22:20:16 by jwe]
jwe
parents: 581
diff changeset
193
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
194 tree_parameter_list (tree_identifier *t)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
195 : SLList<tree_identifier *> (), marked_for_varargs (0) { append (t); }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
196
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
197 ~tree_parameter_list (void);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
198
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
199 void mark_as_formal_parameters (void);
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
200
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
201 void mark_varargs (void)
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
202 { marked_for_varargs = 1; }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
203
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
204 bool takes_varargs (void) const
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
205 { return marked_for_varargs != 0; }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
206
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
207 void mark_varargs_only (void)
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
208 { marked_for_varargs = -1; }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
209
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
210 bool varargs_only (void)
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
211 { return (marked_for_varargs < 0); }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
212
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
213 void initialize_undefined_elements (octave_value& val);
1093
51fd9e40a7f7 [project @ 1995-02-03 21:57:34 by jwe]
jwe
parents: 1063
diff changeset
214
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
215 void define_from_arg_vector (const octave_value_list& args);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
216
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
217 bool is_defined (void);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
218
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
219 octave_value_list convert_to_const_vector (tree_va_return_list *vr_list);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
220
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
221 void accept (tree_walker& tw);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
222
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
223 private:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
224
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
225 int marked_for_varargs;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
226 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
227
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
228 // Return lists. Used to hold the right hand sides of multiple
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
229 // assignment expressions.
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
230
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
231 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
232 tree_return_list : public SLList<tree_index_expression *>
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
233 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
234 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
235
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
236 tree_return_list (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
237 : SLList<tree_index_expression *> () { }
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
238
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
239 tree_return_list (tree_index_expression *t)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
240 : SLList<tree_index_expression *> () { append (t); }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
241
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
242 ~tree_return_list (void);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
243
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
244 void accept (tree_walker& tw);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
245 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
246
723
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
247 class
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
248 tree_va_return_list : public SLList<octave_value>
723
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
249 {
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
250 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
251
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
252 tree_va_return_list (void) : SLList<octave_value> () { }
1269
abaf21f34109 [project @ 1995-04-20 19:16:24 by jwe]
jwe
parents: 1227
diff changeset
253
abaf21f34109 [project @ 1995-04-20 19:16:24 by jwe]
jwe
parents: 1227
diff changeset
254 ~tree_va_return_list (void) { }
723
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
255 };
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
256
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
257 // List of expressions that make up a declaration statement.
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
258
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
259 class
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
260 tree_decl_elt
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
261 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
262 public:
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
263
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
264 typedef void (*eval_fcn) (tree_decl_elt &, bool);
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
265
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
266 tree_decl_elt (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
267 : id (0), ass_expr (0) { }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
268
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
269 tree_decl_elt (tree_identifier *i)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
270 : id (i), ass_expr (0) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
271
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
272 tree_decl_elt (tree_simple_assignment_expression *ass)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
273 : id (0), ass_expr (ass) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
274
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
275 ~tree_decl_elt (void);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
276
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
277 void eval (void);
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
278
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
279 tree_identifier *ident (void) { return id; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
280
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
281 tree_simple_assignment_expression *assign_expr (void) { return ass_expr; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
282
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
283 void accept (tree_walker& tw);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
284
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
285 private:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
286
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
287 // Only one of id or ass_expr can be valid at once.
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
288
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
289 // An identifier to tag with the declared property.
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
290 tree_identifier *id;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
291
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
292 // An assignemnt expression. Valid only if the left hand side of
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
293 // the assignment is a simple identifier.
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
294 tree_simple_assignment_expression *ass_expr;
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
295 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
296
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
297 class
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
298 tree_decl_init_list : public SLList<tree_decl_elt *>
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
299 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
300 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
301
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
302 tree_decl_init_list (void)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
303 : SLList<tree_decl_elt *> () { }
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
304
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
305 tree_decl_init_list (tree_decl_elt *t)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
306 : SLList<tree_decl_elt *> () { append (t); }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
307
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
308 ~tree_decl_init_list (void)
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
309 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
310 while (! empty ())
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
311 {
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
312 tree_decl_elt *t = remove_front ();
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
313 delete t;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
314 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
315 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
316
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
317 void eval (tree_decl_elt::eval_fcn, bool);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
318
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
319 void accept (tree_walker& tw);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
320 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
321
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
322 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
323 tree_if_clause
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
324 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
325 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
326
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
327 tree_if_clause (void) : expr (0), list (0) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
328
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
329 tree_if_clause (tree_statement_list *l)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
330 : expr (0), list (l) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
331
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
332 tree_if_clause (tree_expression *e, tree_statement_list *l)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
333 : expr (e), list (l) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
334
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
335 ~tree_if_clause (void);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
336
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
337 bool is_else_clause (void)
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
338 { return ! expr; }
1063
1a3121ebf088 [project @ 1995-01-24 03:25:37 by jwe]
jwe
parents: 1009
diff changeset
339
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
340 int eval (void);
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
341
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
342 tree_expression *condition (void) { return expr; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
343
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
344 tree_statement_list *commands (void) { return list; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
345
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
346 void accept (tree_walker& tw);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
347
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
348 private:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
349
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
350 // The condition to test.
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
351 tree_expression *expr;
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
352
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
353 // The list of statements to evaluate if expr is true.
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
354 tree_statement_list *list;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
355 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
356
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
357 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
358 tree_if_command_list : public SLList<tree_if_clause *>
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
359 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
360 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
361
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
362 tree_if_command_list (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
363 : SLList<tree_if_clause *> () { }
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
364
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
365 tree_if_command_list (tree_if_clause *t)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
366 : SLList<tree_if_clause *> () { append (t); }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
367
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
368 ~tree_if_command_list (void)
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
369 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
370 while (! empty ())
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
371 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
372 tree_if_clause *t = remove_front ();
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
373 delete t;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
374 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
375 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
376
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
377 void eval (void);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
378
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
379 void accept (tree_walker& tw);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
380 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
381
2764
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
382 class
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
383 tree_switch_case
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
384 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
385 public:
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
386
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
387 tree_switch_case (void) : label (0), list (0) { }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
388
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
389 tree_switch_case (tree_statement_list *l)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
390 : label (0), list (l) { }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
391
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
392 tree_switch_case (tree_expression *e, tree_statement_list *l)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
393 : label (e), list (l) { }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
394
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
395 ~tree_switch_case (void);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
396
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
397 bool is_default_case (void)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
398 { return ! label; }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
399
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
400 bool label_matches (const octave_value& val);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
401
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
402 int eval (const octave_value& val);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
403
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
404 void eval_error (void);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
405
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
406 tree_expression *case_label (void) { return label; }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
407
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
408 tree_statement_list *commands (void) { return list; }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
409
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
410 void accept (tree_walker& tw);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
411
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
412 private:
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
413
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
414 // The case label.
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
415 tree_expression *label;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
416
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
417 // The list of statements to evaluate if the label matches.
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
418 tree_statement_list *list;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
419 };
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
420
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
421 class
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
422 tree_switch_case_list : public SLList<tree_switch_case *>
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
423 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
424 public:
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
425
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
426 tree_switch_case_list (void)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
427 : SLList<tree_switch_case *> () { }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
428
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
429 tree_switch_case_list (tree_switch_case *t)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
430 : SLList<tree_switch_case *> () { append (t); }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
431
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
432 ~tree_switch_case_list (void)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
433 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
434 while (! empty ())
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
435 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
436 tree_switch_case *t = remove_front ();
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
437 delete t;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
438 }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
439 }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
440
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
441 void eval (const octave_value& val);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
442
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
443 void accept (tree_walker& tw);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
444 };
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
445
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
446 #endif
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
447
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
448 /*
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
449 ;;; Local Variables: ***
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
450 ;;; mode: C++ ***
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
451 ;;; End: ***
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
452 */