annotate src/pt-cmd.cc @ 1234:9204518e940f

[project @ 1995-04-10 14:31:21 by jwe]
author jwe
date Mon, 10 Apr 1995 14:31:21 +0000
parents 38b876e46ff6
children e1ddfb12566d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
529
7ea224e713cd [project @ 1994-07-20 18:54:27 by jwe]
jwe
parents: 494
diff changeset
1 // tree-cmd.cc -*- C++ -*-
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
2 /*
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
3
1009
dfe01093f657 [project @ 1995-01-04 04:05:12 by jwe]
jwe
parents: 991
diff changeset
4 Copyright (C) 1992, 1993, 1994, 1995 John W. Eaton
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
5
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
7
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
11 later version.
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
12
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
16 for more details.
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
17
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
20 Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
21
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
22 */
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
23
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
1192
b6360f2d4fa6 [project @ 1995-03-30 21:38:35 by jwe]
jwe
parents: 1168
diff changeset
25 #include <config.h>
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
26 #endif
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
27
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
28 #include <iostream.h>
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
29
1059
7f42e76331b0 [project @ 1995-01-23 00:01:39 by jwe]
jwe
parents: 1009
diff changeset
30 // Nonzero means we're breaking out of a loop or function body.
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
31 int breaking = 0;
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
32
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
33 // Nonzero means we're jumping to the end of a loop.
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
34 int continuing = 0;
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
35
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
36 // Nonzero means we're returning from a function. Global because it
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
37 // is also needed in tree-expr.cc.
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
38 int returning = 0;
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
39
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
40 #include "user-prefs.h"
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
41 #include "variables.h"
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
42 #include "oct-map.h"
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
43 #include "symtab.h"
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
44 #include "error.h"
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
45 #include "gripes.h"
584
4057f845c1ee [project @ 1994-08-07 04:40:03 by jwe]
jwe
parents: 581
diff changeset
46 #include "tree-base.h"
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
47 #include "tree-expr.h"
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
48 #include "tree-cmd.h"
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
49 #include "tree-misc.h"
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
50 #include "tree-const.h"
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
51 #include "unwind-prot.h"
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
52
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
53 // Decide if it's time to quit a for or while loop.
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
54 static inline int
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
55 quit_loop_now (void)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
56 {
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
57 // Maybe handle `continue N' someday...
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
58
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
59 if (continuing)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
60 continuing--;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
61
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
62 int quit = (returning || breaking || continuing);
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
63
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
64 if (breaking)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
65 breaking--;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
66
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
67 return quit;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
68 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
69
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
70 // But first, some extra functions used by the tree classes.
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
71
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
72 // We seem to have no use for this now. Maybe it will be needed at
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
73 // some future date, so here it is.
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
74 #if 0
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
75
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
76 // Convert a linked list of trees to a vector of pointers to trees.
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
77
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
78 static tree **
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
79 list_to_vector (tree *list, int& len)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
80 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
81 len = list->length () + 1;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
82
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
83 tree **args = new tree * [len];
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
84
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
85 // args[0] may eventually hold something useful, like the function
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
86 // name.
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
87
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
88 tree *tmp_list = list;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
89 for (int k = 1; k < len; k++)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
90 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
91 args[k] = tmp_list;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
92 tmp_list = tmp_list->next_elem ();
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
93 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
94 return args;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
95 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
96 #endif
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
97
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
98 // Global.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
99
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
100 tree_global_command::~tree_global_command (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
101 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
102 delete init_list;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
103 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
104
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
105 void
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
106 tree_global_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
107 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
108 if (init_list)
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
109 init_list->eval ();
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
110
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
111 if (error_state > 0)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
112 ::error ("evaluating global command near line %d, column %d",
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
113 line (), column ());
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
114 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
115
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
116 void
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
117 tree_global_command::print_code (ostream& os)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
118 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
119 print_code_indent (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
120
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
121 os << "global ";
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
122
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
123 if (init_list)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
124 init_list->print_code (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
125 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
126
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
127 // While.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
128
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
129 tree_while_command::~tree_while_command (void)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
130 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
131 delete expr;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
132 delete list;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
133 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
134
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
135 void
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
136 tree_while_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
137 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
138 if (error_state)
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
139 return;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
140
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
141 for (;;)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
142 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
143 int expr_value = 0;
529
7ea224e713cd [project @ 1994-07-20 18:54:27 by jwe]
jwe
parents: 494
diff changeset
144 if (! expr)
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
145 return;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
146 tree_constant t1 = expr->eval (0);
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
147
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
148 if (error_state)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
149 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
150 eval_error ();
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
151 return;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
152 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
153
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
154 if (t1.rows () == 0 || t1.columns () == 0)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
155 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
156 int flag = user_pref.propagate_empty_matrices;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
157 if (flag < 0)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
158 warning ("while: empty matrix used in conditional");
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
159 else if (flag == 0)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
160 {
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
161 ::error ("empty matrix used in while condition near line\
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
162 %d, column %d", line (), column ());
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
163 return;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
164 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
165 t1 = tree_constant (0.0);
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
166 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
167 else if (! t1.is_scalar_type ())
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
168 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
169 tree_constant t2 = t1.all ();
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
170 t1 = t2.all ();
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
171 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
172
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
173 if (t1.is_real_scalar ())
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
174 expr_value = (int) t1.double_value ();
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
175 else if (t1.is_complex_scalar ())
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
176 expr_value = t1.complex_value () != 0.0;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
177 else
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
178 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
179 ::error ("invalid type used in while condition near line %d,\
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
180 column %d", line (), column ());
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
181 return;
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
182 }
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
183
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
184 if (expr_value)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
185 {
529
7ea224e713cd [project @ 1994-07-20 18:54:27 by jwe]
jwe
parents: 494
diff changeset
186 if (list)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
187 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
188 list->eval (1);
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
189 if (error_state)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
190 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
191 eval_error ();
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
192 return;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
193 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
194 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
195
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
196 if (quit_loop_now ())
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
197 break;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
198 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
199 else
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
200 break;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
201 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
202 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
203
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
204 void
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
205 tree_while_command::eval_error (void)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
206 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
207 if (error_state > 0)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
208 ::error ("evaluating while command near line %d, column %d",
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
209 line (), column ());
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
210 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
211
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
212 void
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
213 tree_while_command::print_code (ostream& os)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
214 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
215 print_code_indent (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
216
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
217 os << "while ";
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
218
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
219 if (expr)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
220 expr->print_code (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
221
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
222 print_code_new_line (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
223
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
224 if (list)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
225 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
226 increment_indent_level ();
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
227 list->print_code (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
228 decrement_indent_level ();
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
229 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
230
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
231 print_code_indent (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
232
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
233 os << "endwhile";
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
234 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
235
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
236 // For.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
237
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
238 tree_for_command::~tree_for_command (void)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
239 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
240 delete id;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
241 delete id_list;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
242 delete expr;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
243 delete list;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
244 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
245
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
246 inline void
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
247 tree_for_command::do_for_loop_once (tree_return_list *lst,
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
248 const Octave_object& rhs, int& quit)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
249 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
250 quit = 0;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
251
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
252 tree_oct_obj *tmp = new tree_oct_obj (rhs);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
253 tree_multi_assignment_expression tmp_ass (lst, tmp, 1);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
254 tmp_ass.eval (0);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
255
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
256 if (error_state)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
257 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
258 eval_error ();
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
259 return;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
260 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
261
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
262 if (list)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
263 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
264 list->eval (1);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
265 if (error_state)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
266 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
267 eval_error ();
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
268 quit = 1;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
269 return;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
270 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
271 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
272
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
273 quit = quit_loop_now ();
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
274 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
275
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
276 inline void
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
277 tree_for_command::do_for_loop_once (tree_index_expression *idx_expr,
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
278 const tree_constant& rhs, int& quit)
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
279 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
280 quit = 0;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
281
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
282 tree_constant *tmp = new tree_constant (rhs);
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
283 tree_simple_assignment_expression tmp_ass (idx_expr, tmp, 1);
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
284 tmp_ass.eval (0);
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
285
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
286 if (error_state)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
287 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
288 eval_error ();
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
289 return;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
290 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
291
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
292 if (list)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
293 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
294 list->eval (1);
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
295 if (error_state)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
296 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
297 eval_error ();
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
298 quit = 1;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
299 return;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
300 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
301 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
302
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
303 quit = quit_loop_now ();
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
304 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
305
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
306 inline void
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
307 tree_for_command::do_for_loop_once (tree_identifier *ident,
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
308 tree_constant& rhs, int& quit)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
309 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
310 quit = 0;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
311
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
312 ident->assign (rhs);
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
313
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
314 if (error_state)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
315 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
316 eval_error ();
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
317 return;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
318 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
319
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
320 if (list)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
321 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
322 list->eval (1);
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
323 if (error_state)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
324 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
325 eval_error ();
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
326 quit = 1;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
327 return;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
328 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
329 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
330
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
331 quit = quit_loop_now ();
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
332 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
333
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
334 #define DO_LOOP(val) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
335 do \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
336 { \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
337 if (ident) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
338 for (int i = 0; i < steps; i++) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
339 { \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
340 tree_constant rhs (val); \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
341 int quit = 0; \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
342 do_for_loop_once (ident, rhs, quit); \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
343 if (quit) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
344 break; \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
345 } \
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
346 else if (id_list) \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
347 for (int i = 0; i < steps; i++) \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
348 { \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
349 Octave_object rhs (val); \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
350 int quit = 0; \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
351 do_for_loop_once (id_list, rhs, quit); \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
352 if (quit) \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
353 break; \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
354 } \
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
355 else \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
356 for (int i = 0; i < steps; i++) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
357 { \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
358 tree_constant rhs (val); \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
359 int quit = 0; \
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
360 do_for_loop_once (tmp_id, rhs, quit); \
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
361 if (quit) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
362 break; \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
363 } \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
364 } \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
365 while (0)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
366
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
367 void
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
368 tree_for_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
369 {
529
7ea224e713cd [project @ 1994-07-20 18:54:27 by jwe]
jwe
parents: 494
diff changeset
370 if (error_state || ! expr)
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
371 return;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
372
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
373 tree_constant tmp_expr = expr->eval (0);
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
374
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
375 if (error_state || tmp_expr.is_undefined ())
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
376 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
377 eval_error ();
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
378 return;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
379 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
380
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
381 tree_index_expression *tmp_id = id;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
382 if (id_list && id_list->length () == 1)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
383 tmp_id = id_list->front ();
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
384
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
385 tree_identifier *ident = 0;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
386 if (tmp_id && ! tmp_id->arg_list ())
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
387 {
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
388 tree_indirect_ref *idr = tmp_id->ident ();
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
389 if (idr->is_identifier_only ())
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
390 ident = idr->ident ();
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
391 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
392
1234
9204518e940f [project @ 1995-04-10 14:31:21 by jwe]
jwe
parents: 1228
diff changeset
393 if (id_list && ! ident && ! tmp_expr.is_map ())
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
394 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
395 error ("in statement `for [X, Y] = VAL', VAL must be a structure");
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
396 return;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
397 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
398
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
399 if (tmp_expr.is_scalar_type ())
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
400 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
401 int quit = 0;
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
402 if (ident)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
403 do_for_loop_once (ident, tmp_expr, quit);
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
404 else if (id_list)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
405 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
406 Octave_object rhs (tmp_expr);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
407 do_for_loop_once (id_list, rhs, quit);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
408 }
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
409 else
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
410 do_for_loop_once (tmp_id, tmp_expr, quit);
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
411 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
412 else if (tmp_expr.is_matrix_type ())
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
413 {
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
414 Matrix m_tmp;
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
415 ComplexMatrix cm_tmp;
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
416 int nr;
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
417 int steps;
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
418 if (tmp_expr.is_real_matrix ())
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
419 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
420 m_tmp = tmp_expr.matrix_value ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
421 nr = m_tmp.rows ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
422 steps = m_tmp.columns ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
423 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
424 else
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
425 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
426 cm_tmp = tmp_expr.complex_matrix_value ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
427 nr = cm_tmp.rows ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
428 steps = cm_tmp.columns ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
429 }
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
430
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
431 if (tmp_expr.is_real_matrix ())
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
432 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
433 if (nr == 1)
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
434 DO_LOOP(m_tmp (0, i));
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
435 else
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
436 DO_LOOP(m_tmp.extract (0, i, nr-1, i));
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
437 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
438 else
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
439 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
440 if (nr == 1)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
441 DO_LOOP(cm_tmp (0, i));
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
442 else
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
443 DO_LOOP(cm_tmp.extract (0, i, nr-1, i));
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
444 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
445 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
446 else if (tmp_expr.is_string ())
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
447 {
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
448 gripe_string_invalid ();
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
449 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
450 else if (tmp_expr.is_range ())
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
451 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
452 Range rng = tmp_expr.range_value ();
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
453
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
454 int steps = rng.nelem ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
455 double b = rng.base ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
456 double increment = rng.inc ();
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
457
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
458 if (ident)
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
459 {
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
460 for (int i = 0; i < steps; i++)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
461 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
462 double tmp_val = b + i * increment;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
463
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
464 tree_constant rhs (tmp_val);
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
465
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
466 int quit = 0;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
467 do_for_loop_once (ident, rhs, quit);
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
468
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
469 if (quit)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
470 break;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
471 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
472 }
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
473 else if (id_list)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
474 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
475 for (int i = 0; i < steps; i++)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
476 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
477 double tmp_val = b + i * increment;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
478
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
479 Octave_object rhs (tmp_val);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
480
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
481 int quit = 0;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
482 do_for_loop_once (id_list, rhs, quit);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
483
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
484 if (quit)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
485 break;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
486 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
487 }
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
488 else
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
489 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
490 for (int i = 0; i < steps; i++)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
491 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
492 double tmp_val = b + i * increment;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
493
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
494 tree_constant rhs (tmp_val);
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
495
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
496 int quit = 0;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
497 do_for_loop_once (tmp_id, rhs, quit);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
498
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
499 if (quit)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
500 break;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
501 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
502 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
503 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
504 else if (tmp_expr.is_map ())
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
505 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
506 if (ident)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
507 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
508 Octave_map tmp_val (tmp_expr.map_value ());
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
509
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
510 for (Pix p = tmp_val.first (); p != 0; tmp_val.next (p))
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
511 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
512 tree_constant rhs (tmp_val.contents (p));
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
513
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
514 int quit;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
515 do_for_loop_once (ident, rhs, quit);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
516
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
517 if (quit)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
518 break;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
519 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
520 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
521 else if (id_list)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
522 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
523 // Cycle through structure elements. First element of
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
524 // id_list is set to value and the second is set to the name
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
525 // of the structure element.
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
526
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
527 Octave_map tmp_val (tmp_expr.map_value ());
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
528
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
529 for (Pix p = tmp_val.first (); p != 0; tmp_val.next (p))
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
530 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
531 Octave_object tmp;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
532 tmp (1) = tmp_val.key (p);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
533 tmp (0) = tmp_val.contents (p);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
534
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
535 int quit;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
536 do_for_loop_once (id_list, tmp, quit);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
537
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
538 if (quit)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
539 break;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
540 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
541 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
542 else
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
543 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
544 Octave_map tmp_val (tmp_expr.map_value ());
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
545
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
546 for (Pix p = tmp_val.first (); p != 0; tmp_val.next (p))
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
547 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
548 tree_constant rhs = tmp_val.contents (p);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
549
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
550 int quit;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
551 do_for_loop_once (tmp_id, rhs, quit);
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
552
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
553 if (quit)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
554 break;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
555 }
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
556 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
557 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
558 else
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
559 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
560 ::error ("invalid type in for loop expression near line %d, column %d",
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
561 line (), column ());
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
562 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
563 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
564
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
565 void
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
566 tree_for_command::eval_error (void)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
567 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
568 if (error_state > 0)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
569 ::error ("evaluating for command near line %d, column %d",
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
570 line (), column ());
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
571 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
572
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
573 void
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
574 tree_for_command::print_code (ostream& os)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
575 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
576 print_code_indent (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
577
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
578 os << "for ";
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
579
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
580 if (id)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
581 id->print_code (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
582
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
583 os << " = ";
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
584
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
585 if (expr)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
586 expr->print_code (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
587
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
588 print_code_new_line (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
589
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
590 if (list)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
591 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
592 increment_indent_level ();
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
593 list->print_code (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
594 decrement_indent_level ();
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
595 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
596
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
597 print_code_indent (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
598
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
599 os << "endfor";
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
600 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
601
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
602 // If.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
603
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
604 tree_if_command::~tree_if_command (void)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
605 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
606 delete list;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
607 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
608
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
609 void
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
610 tree_if_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
611 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
612 if (list)
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
613 list->eval ();
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
614
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
615 if (error_state > 0)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
616 ::error ("evaluating if command near line %d, column %d",
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
617 line (), column ());
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
618 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
619
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
620 void
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
621 tree_if_command::print_code (ostream& os)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
622 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
623 print_code_indent (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
624
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
625 os << "if ";
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
626
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
627 if (list)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
628 list->print_code (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
629
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
630 print_code_indent (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
631
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
632 os << "endif";
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
633 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
634
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
635 // Simple exception handling.
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
636
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
637 tree_unwind_protect_command::~tree_unwind_protect_command (void)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
638 {
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
639 delete unwind_protect_code;
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
640 delete cleanup_code;
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
641 }
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
642
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
643 static void
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
644 do_unwind_protect_cleanup_code (void *ptr)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
645 {
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
646 tree_statement_list *list = (tree_statement_list *) ptr;
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
647
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
648 // We want to run the cleanup code without error_state being set,
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
649 // but we need to restore its value, so that any errors encountered
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
650 // in the first part of the unwind_protect are not completely
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
651 // ignored.
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
652
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
653 unwind_protect_int (error_state);
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
654
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
655 error_state = 0;
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
656
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
657 if (list)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
658 list->eval (1);
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
659
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
660 // We don't want to ignore errors that occur in the cleanup code, so
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
661 // if an error is encountered there, leave error_state alone.
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
662 // Otherwise, set it back to what it was before.
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
663
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
664 if (error_state)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
665 discard_unwind_protect ();
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
666 else
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
667 run_unwind_protect ();
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
668 }
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
669
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
670 void
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
671 tree_unwind_protect_command::eval (void)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
672 {
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
673 add_unwind_protect (do_unwind_protect_cleanup_code, cleanup_code);
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
674
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
675 if (unwind_protect_code)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
676 unwind_protect_code->eval (1);
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
677
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
678 run_unwind_protect ();
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
679 }
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
680
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
681 void
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
682 tree_unwind_protect_command::print_code (ostream& os)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
683 {
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
684 print_code_indent (os);
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
685
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
686 os << "unwind_protect";
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
687
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
688 print_code_new_line (os);
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
689
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
690 if (unwind_protect_code)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
691 {
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
692 increment_indent_level ();
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
693 unwind_protect_code->print_code (os);
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
694 decrement_indent_level ();
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
695 }
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
696
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
697 print_code_indent (os);
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
698
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
699 os << "cleanup_code";
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
700
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
701 print_code_new_line (os);
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
702
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
703 if (cleanup_code)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
704 {
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
705 increment_indent_level ();
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
706 cleanup_code->print_code (os);
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
707 decrement_indent_level ();
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
708 }
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
709
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
710 print_code_indent (os);
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
711
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
712 os << "end_unwind_protect";
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
713 }
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
714
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
715 // Break.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
716
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
717 void
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
718 tree_break_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
719 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
720 if (! error_state)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
721 breaking = 1;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
722 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
723
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
724 void
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
725 tree_break_command::print_code (ostream& os)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
726 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
727 print_code_indent (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
728
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
729 os << "break";
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
730 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
731
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
732 // Continue.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
733
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
734 void
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
735 tree_continue_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
736 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
737 if (! error_state)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
738 continuing = 1;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
739 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
740
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
741 void
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
742 tree_continue_command::print_code (ostream& os)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
743 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
744 print_code_indent (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
745
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
746 os << "continue";
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
747 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
748
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
749 // Return.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
750
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
751 void
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
752 tree_return_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
753 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
754 if (! error_state)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
755 returning = 1;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
756 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
757
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
758 void
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
759 tree_return_command::print_code (ostream& os)
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
760 {
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
761 print_code_indent (os);
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
762
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
763 os << "return";
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
764 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
765
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
766 /*
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
767 ;;; Local Variables: ***
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
768 ;;; mode: C++ ***
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
769 ;;; page-delimiter: "^/\\*" ***
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
770 ;;; End: ***
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
771 */