annotate src/pt-misc.h @ 2973:ef3379196bcf

[project @ 1997-05-15 19:27:38 by jwe]
author jwe
date Thu, 15 May 1997 19:30:57 +0000
parents 026f342c2019
children 20f5cec4f11c
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
2847
8b262e771614 [project @ 1997-03-27 16:18:26 by jwe]
jwe
parents: 2846
diff changeset
3 Copyright (C) 1996, 1997 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
2942
026f342c2019 [project @ 1997-05-08 02:20:57 by jwe]
jwe
parents: 2907
diff changeset
32 class string_vector;
026f342c2019 [project @ 1997-05-08 02:20:57 by jwe]
jwe
parents: 2907
diff changeset
33
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
34 class octave_value_list;
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
35 class octave_value;
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
36 class tree_command;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
37 class tree_expression;
2973
ef3379196bcf [project @ 1997-05-15 19:27:38 by jwe]
jwe
parents: 2942
diff changeset
38 class tree_simple_assignment;
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
39 class tree_index_expression;
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
40 class tree_identifier;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
41 class symbol_record;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
42 class symbol_table;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
43
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
44 class tree_statement;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
45 class tree_statement_list;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
46 class tree_argument_list;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
47 class tree_parameter_list;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
48 class tree_return_list;
723
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
49 class tree_va_return_list;
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
50 class tree_decl_elt;
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
51 class tree_decl_init_list;
2764
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
52 class tree_if_clause;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
53 class tree_if_command_list;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
54 class tree_switch_case;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
55 class tree_switch_case_list;
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
56
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
57 class tree_walker;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
58
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
59 #include <SLList.h>
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 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
68
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
69 tree_statement (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
70 : cmd (0), expr (0), print_flag (true) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
71
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
72 tree_statement (tree_command *c)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
73 : cmd (c), expr (0), print_flag (true) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
74
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
75 tree_statement (tree_expression *e)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
76 : cmd (0), expr (e), print_flag (true) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
77
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
78 ~tree_statement (void);
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
79
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
80 void set_print_flag (bool print)
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
81 { print_flag = print; }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
82
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
83 bool is_command (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
84 { return cmd != 0; }
1510
fe9c39fd89c7 [project @ 1995-10-03 10:43:11 by jwe]
jwe
parents: 1491
diff changeset
85
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
86 bool is_expression (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
87 { return expr != 0; }
1510
fe9c39fd89c7 [project @ 1995-10-03 10:43:11 by jwe]
jwe
parents: 1491
diff changeset
88
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
89 int line (void);
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
90 int column (void);
1510
fe9c39fd89c7 [project @ 1995-10-03 10:43:11 by jwe]
jwe
parents: 1491
diff changeset
91
2898
8303749672be [project @ 1997-04-28 20:50:36 by jwe]
jwe
parents: 2878
diff changeset
92 void maybe_echo_code (bool in_function_body);
1588
27f5ac98fc4a [project @ 1995-10-31 06:04:47 by jwe]
jwe
parents: 1510
diff changeset
93
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
94 bool print_result (void) { return print_flag; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
95
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
96 tree_command *command (void) { return cmd; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
97
2898
8303749672be [project @ 1997-04-28 20:50:36 by jwe]
jwe
parents: 2878
diff changeset
98 octave_value_list eval (bool silent, int nargout, bool in_function_body);
8303749672be [project @ 1997-04-28 20:50:36 by jwe]
jwe
parents: 2878
diff changeset
99
2124
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
2973
ef3379196bcf [project @ 1997-05-15 19:27:38 by jwe]
jwe
parents: 2942
diff changeset
142 octave_value_list eval (bool silent = false, int nargout = 0);
672
066e1551639c [project @ 1994-09-07 21:10:32 by jwe]
jwe
parents: 632
diff changeset
143
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
144 void accept (tree_walker& tw);
1588
27f5ac98fc4a [project @ 1995-10-31 06:04:47 by jwe]
jwe
parents: 1510
diff changeset
145
27f5ac98fc4a [project @ 1995-10-31 06:04:47 by jwe]
jwe
parents: 1510
diff changeset
146 private:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
147
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
148 // 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
149 bool function_body;
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
150 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
151
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
152 // 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
153 // arguments in a function call or index expression.
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
154
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
155 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
156 tree_argument_list : public SLList<tree_expression *>
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
157 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
158 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
159
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
160 tree_argument_list (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
161 : SLList<tree_expression *> () { }
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
162
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
163 tree_argument_list (tree_expression *t)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
164 : SLList<tree_expression *> () { append (t); }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
165
2878
55cca18e943a [project @ 1997-04-24 09:19:43 by jwe]
jwe
parents: 2859
diff changeset
166 ~tree_argument_list (void);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
167
2973
ef3379196bcf [project @ 1997-05-15 19:27:38 by jwe]
jwe
parents: 2942
diff changeset
168 bool all_elements_are_constant (void) const;
ef3379196bcf [project @ 1997-05-15 19:27:38 by jwe]
jwe
parents: 2942
diff changeset
169
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
170 octave_value_list convert_to_const_vector (void);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
171
2942
026f342c2019 [project @ 1997-05-08 02:20:57 by jwe]
jwe
parents: 2907
diff changeset
172 string_vector get_arg_names (void) const;
026f342c2019 [project @ 1997-05-08 02:20:57 by jwe]
jwe
parents: 2907
diff changeset
173
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
174 void accept (tree_walker& tw);
577
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
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
177 // 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
178 // parameters in a function definition. Elements are identifiers
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
179 // only.
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 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
182 tree_parameter_list : public SLList<tree_identifier *>
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
183 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
184 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
185
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
186 tree_parameter_list (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
187 : SLList<tree_identifier *> (), marked_for_varargs (0) { }
632
ddc21c0f0089 [project @ 1994-08-19 22:20:16 by jwe]
jwe
parents: 581
diff changeset
188
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
189 tree_parameter_list (tree_identifier *t)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
190 : SLList<tree_identifier *> (), marked_for_varargs (0) { append (t); }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
191
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
192 ~tree_parameter_list (void);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
193
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
194 void mark_as_formal_parameters (void);
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
195
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
196 void mark_varargs (void)
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
197 { marked_for_varargs = 1; }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
198
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
199 bool takes_varargs (void) const
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
200 { return marked_for_varargs != 0; }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
201
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
202 void mark_varargs_only (void)
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
203 { marked_for_varargs = -1; }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
204
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
205 bool varargs_only (void)
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
206 { return (marked_for_varargs < 0); }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
207
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
208 void initialize_undefined_elements (octave_value& val);
1093
51fd9e40a7f7 [project @ 1995-02-03 21:57:34 by jwe]
jwe
parents: 1063
diff changeset
209
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
210 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
211
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
212 bool is_defined (void);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
213
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
214 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
215
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
216 void accept (tree_walker& tw);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
217
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
218 private:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
219
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
220 int marked_for_varargs;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
221 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
222
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
223 // 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
224 // assignment expressions.
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
225
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
226 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
227 tree_return_list : public SLList<tree_index_expression *>
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
228 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
229 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
230
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
231 tree_return_list (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
232 : SLList<tree_index_expression *> () { }
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
233
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
234 tree_return_list (tree_index_expression *t)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
235 : SLList<tree_index_expression *> () { append (t); }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
236
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
237 ~tree_return_list (void);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
238
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
239 void accept (tree_walker& tw);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
240 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
241
723
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
242 class
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
243 tree_va_return_list : public SLList<octave_value>
723
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
244 {
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
245 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
246
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
247 tree_va_return_list (void) : SLList<octave_value> () { }
1269
abaf21f34109 [project @ 1995-04-20 19:16:24 by jwe]
jwe
parents: 1227
diff changeset
248
abaf21f34109 [project @ 1995-04-20 19:16:24 by jwe]
jwe
parents: 1227
diff changeset
249 ~tree_va_return_list (void) { }
723
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
250 };
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 672
diff changeset
251
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
252 // List of expressions that make up a declaration statement.
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
253
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
254 class
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
255 tree_decl_elt
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
256 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
257 public:
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
258
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
259 typedef void (*eval_fcn) (tree_decl_elt &, bool);
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
260
2973
ef3379196bcf [project @ 1997-05-15 19:27:38 by jwe]
jwe
parents: 2942
diff changeset
261 tree_decl_elt (tree_identifier *i = 0, tree_expression *e = 0)
ef3379196bcf [project @ 1997-05-15 19:27:38 by jwe]
jwe
parents: 2942
diff changeset
262 : id (i), expr (e) { }
577
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 ~tree_decl_elt (void);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
265
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
266 void eval (void);
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
267
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
268 tree_identifier *ident (void) { return id; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
269
2973
ef3379196bcf [project @ 1997-05-15 19:27:38 by jwe]
jwe
parents: 2942
diff changeset
270 tree_expression *expression (void) { return expr; }
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
271
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
272 void accept (tree_walker& tw);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
273
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
274 private:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
275
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
276 // An identifier to tag with the declared property.
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
277 tree_identifier *id;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
278
2973
ef3379196bcf [project @ 1997-05-15 19:27:38 by jwe]
jwe
parents: 2942
diff changeset
279 // An initializer expression (may be zero);
ef3379196bcf [project @ 1997-05-15 19:27:38 by jwe]
jwe
parents: 2942
diff changeset
280 tree_expression *expr;
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
281 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
282
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
283 class
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
284 tree_decl_init_list : public SLList<tree_decl_elt *>
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
285 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
286 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
287
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
288 tree_decl_init_list (void)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
289 : SLList<tree_decl_elt *> () { }
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
290
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
291 tree_decl_init_list (tree_decl_elt *t)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
292 : SLList<tree_decl_elt *> () { append (t); }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
293
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
294 ~tree_decl_init_list (void)
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 while (! empty ())
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
297 {
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
298 tree_decl_elt *t = remove_front ();
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
299 delete t;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
300 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
301 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
302
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2764
diff changeset
303 void eval (tree_decl_elt::eval_fcn, bool);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
304
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
305 void accept (tree_walker& tw);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
306 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
307
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
308 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
309 tree_if_clause
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
310 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
311 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
312
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
313 tree_if_clause (void) : expr (0), list (0) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
314
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
315 tree_if_clause (tree_statement_list *l)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
316 : expr (0), list (l) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
317
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
318 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
319 : expr (e), list (l) { }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
320
1740
fe9d3b2ded26 [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents: 1588
diff changeset
321 ~tree_if_clause (void);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
322
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
323 bool is_else_clause (void)
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1740
diff changeset
324 { return ! expr; }
1063
1a3121ebf088 [project @ 1995-01-24 03:25:37 by jwe]
jwe
parents: 1009
diff changeset
325
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
326 int eval (void);
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
327
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
328 tree_expression *condition (void) { return expr; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
329
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
330 tree_statement_list *commands (void) { return list; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
331
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
332 void accept (tree_walker& tw);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
333
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
334 private:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
335
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
336 // The condition to test.
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
337 tree_expression *expr;
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
338
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
339 // 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
340 tree_statement_list *list;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
341 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
342
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
343 class
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
344 tree_if_command_list : public SLList<tree_if_clause *>
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
345 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
346 public:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
347
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
348 tree_if_command_list (void)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
349 : SLList<tree_if_clause *> () { }
1227
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
350
766e2a1a4e7b [project @ 1995-04-10 00:48:19 by jwe]
jwe
parents: 1127
diff changeset
351 tree_if_command_list (tree_if_clause *t)
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
352 : SLList<tree_if_clause *> () { append (t); }
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
353
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
354 ~tree_if_command_list (void)
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 while (! empty ())
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
357 {
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
358 tree_if_clause *t = remove_front ();
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
359 delete t;
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
360 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
361 }
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
362
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
363 void eval (void);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 577
diff changeset
364
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
365 void accept (tree_walker& tw);
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
366 };
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
367
2764
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
368 class
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
369 tree_switch_case
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
370 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
371 public:
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
372
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
373 tree_switch_case (void) : label (0), list (0) { }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
374
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
375 tree_switch_case (tree_statement_list *l)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
376 : label (0), list (l) { }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
377
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
378 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
379 : label (e), list (l) { }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
380
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
381 ~tree_switch_case (void);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
382
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
383 bool is_default_case (void)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
384 { return ! label; }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
385
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
386 bool label_matches (const octave_value& val);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
387
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
388 int eval (const octave_value& val);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
389
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
390 void eval_error (void);
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_expression *case_label (void) { return label; }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
393
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
394 tree_statement_list *commands (void) { return list; }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
395
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
396 void accept (tree_walker& tw);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
397
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
398 private:
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 // The case label.
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
401 tree_expression *label;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
402
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
403 // 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
404 tree_statement_list *list;
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
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
407 class
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
408 tree_switch_case_list : public SLList<tree_switch_case *>
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 public:
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 tree_switch_case_list (void)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
413 : SLList<tree_switch_case *> () { }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
414
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
415 tree_switch_case_list (tree_switch_case *t)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
416 : SLList<tree_switch_case *> () { append (t); }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
417
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
418 ~tree_switch_case_list (void)
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 while (! empty ())
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
421 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
422 tree_switch_case *t = remove_front ();
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
423 delete t;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
424 }
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
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
427 void eval (const octave_value& val);
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 void accept (tree_walker& tw);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
430 };
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2124
diff changeset
431
577
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
432 #endif
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
433
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
434 /*
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
435 ;;; Local Variables: ***
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
436 ;;; mode: C++ ***
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
437 ;;; End: ***
91e2164fb1b2 [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents:
diff changeset
438 */