annotate src/pt-cmd.cc @ 2847:8b262e771614

[project @ 1997-03-27 16:18:26 by jwe]
author jwe
date Thu, 27 Mar 1997 16:19:58 +0000
parents 52e7c4509983
children 00c0cd0f2ee7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
1 /*
2c4d694b87e9 [project @ 1994-07-06 14:55:23 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
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
4
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
6
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
7 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
8 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
9 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
10 later version.
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
11
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
12 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
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
14 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
15 for more details.
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
16
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
17 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
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.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
20
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
1297
12ecc2ecf0e3 [project @ 1995-05-01 18:39:43 by jwe]
jwe
parents: 1266
diff changeset
23 #if defined (__GNUG__)
12ecc2ecf0e3 [project @ 1995-05-01 18:39:43 by jwe]
jwe
parents: 1266
diff changeset
24 #pragma implementation
12ecc2ecf0e3 [project @ 1995-05-01 18:39:43 by jwe]
jwe
parents: 1266
diff changeset
25 #endif
12ecc2ecf0e3 [project @ 1995-05-01 18:39:43 by jwe]
jwe
parents: 1266
diff changeset
26
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
27 #ifdef HAVE_CONFIG_H
1192
b6360f2d4fa6 [project @ 1995-03-30 21:38:35 by jwe]
jwe
parents: 1168
diff changeset
28 #include <config.h>
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
29 #endif
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
30
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
31 #include <iostream.h>
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
32
1059
7f42e76331b0 [project @ 1995-01-23 00:01:39 by jwe]
jwe
parents: 1009
diff changeset
33 // 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
34 int breaking = 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 jumping to the end of a loop.
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
37 int continuing = 0;
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
38
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
39 // 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
40 // is also needed in tree-expr.cc.
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
41 int returning = 0;
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
42
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
43 #include "error.h"
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
44 #include "gripes.h"
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1315
diff changeset
45 #include "oct-map.h"
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1315
diff changeset
46 #include "symtab.h"
1742
a02f140ed897 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents: 1491
diff changeset
47 #include "pt-cmd.h"
2373
d423dcc0ac32 [project @ 1996-10-12 00:19:58 by jwe]
jwe
parents: 2200
diff changeset
48 #include "ov.h"
1742
a02f140ed897 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents: 1491
diff changeset
49 #include "pt-exp.h"
a02f140ed897 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents: 1491
diff changeset
50 #include "pt-fvc.h"
a02f140ed897 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents: 1491
diff changeset
51 #include "pt-misc.h"
a02f140ed897 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents: 1491
diff changeset
52 #include "pt-mvr.h"
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
53 #include "pt-walk.h"
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
54 #include "unwind-prot.h"
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1315
diff changeset
55 #include "variables.h"
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
56
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
57 // Decide if it's time to quit a for or while loop.
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
58 static inline bool
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
59 quit_loop_now (void)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
60 {
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
61 // Maybe handle `continue N' someday...
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
62
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
63 if (continuing)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
64 continuing--;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
65
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
66 bool quit = (returning || breaking || continuing);
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
67
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
68 if (breaking)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
69 breaking--;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
70
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
71 return quit;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
72 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
73
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
74 // Base class for declaration commands (global, static).
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
75
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
76 tree_decl_command::~tree_decl_command (void)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
77 {
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
78 delete init_list;
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
79 }
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
80
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
81 void
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
82 tree_decl_command::accept (tree_walker& tw)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
83 {
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
84 tw.visit_decl_command (*this);
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
85 }
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
86
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
87 // Global.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
88
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
89 static void
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
90 do_global_init (tree_decl_elt& elt, bool skip_initializer)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
91 {
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
92 tree_identifier *id = elt.ident ();
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
93
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
94 if (id)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
95 id->link_to_global ();
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
96 else
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
97 {
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
98 tree_simple_assignment_expression *expr = elt.assign_expr ();
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
99
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
100 if (expr)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
101 {
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
102 if (expr->left_hand_side_is_identifier_only ()
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
103 && (id = expr->left_hand_side_id ()))
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
104 {
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
105 id->link_to_global ();
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
106
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
107 if (! (skip_initializer || error_state))
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
108 expr->eval (false);
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
109 }
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
110 else
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
111 error ("global: unable to make structure elements global");
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
112 }
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
113 }
494
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
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
116 void
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
117 tree_global_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
118 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
119 if (init_list)
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
120 {
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
121 init_list->eval (do_global_init, initialized);
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
122
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
123 initialized = true;
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
124 }
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
125
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
126 if (error_state > 0)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
127 ::error ("evaluating global command near line %d, column %d",
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
128 line (), column ());
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
129 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
130
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
131 // Static.
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
132
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
133 static void
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
134 do_static_init (tree_decl_elt& elt, bool)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
135 {
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
136 tree_identifier *id = elt.ident ();
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
137
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
138 if (id)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
139 id->mark_as_static ();
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
140 else
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
141 {
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
142 tree_simple_assignment_expression *expr = elt.assign_expr ();
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
143
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
144 if (expr)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
145 {
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
146 if (expr->left_hand_side_is_identifier_only ()
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
147 && (id = expr->left_hand_side_id ()))
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
148 {
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
149 id->mark_as_static ();
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
150
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
151 if (! error_state)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
152 expr->eval (false);
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
153 }
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
154 else
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
155 error ("global: unable to make structure elements global");
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
156 }
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
157 }
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
158 }
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
159
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
160 void
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
161 tree_static_command::eval (void)
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
162 {
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
163 // Static variables only need to be marked and initialized once.
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
164
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
165 if (init_list && ! initialized)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
166 {
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
167 init_list->eval (do_static_init, initialized);
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
168
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
169 initialized = true;
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
170
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
171 if (error_state > 0)
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
172 ::error ("evaluating static command near line %d, column %d",
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
173 line (), column ());
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2800
diff changeset
174 }
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
175 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
176
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
177 // While.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
178
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
179 tree_while_command::~tree_while_command (void)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
180 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
181 delete expr;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
182 delete list;
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
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
185 void
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
186 tree_while_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
187 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
188 if (error_state)
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
189 return;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
190
1491
893b416bb919 [project @ 1995-09-29 04:03:01 by jwe]
jwe
parents: 1489
diff changeset
191 if (! expr)
893b416bb919 [project @ 1995-09-29 04:03:01 by jwe]
jwe
parents: 1489
diff changeset
192 panic_impossible ();
893b416bb919 [project @ 1995-09-29 04:03:01 by jwe]
jwe
parents: 1489
diff changeset
193
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
194 for (;;)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
195 {
1491
893b416bb919 [project @ 1995-09-29 04:03:01 by jwe]
jwe
parents: 1489
diff changeset
196 if (expr->is_logically_true ("while"))
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
197 {
529
7ea224e713cd [project @ 1994-07-20 18:54:27 by jwe]
jwe
parents: 494
diff changeset
198 if (list)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
199 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
200 list->eval (1);
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
201 if (error_state)
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 eval_error ();
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
204 return;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
205 }
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
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
208 if (quit_loop_now ())
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
209 break;
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 else
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
212 break;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
213 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
214 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
215
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
216 void
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
217 tree_while_command::eval_error (void)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
218 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
219 if (error_state > 0)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
220 ::error ("evaluating while command near line %d, column %d",
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
221 line (), column ());
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
222 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
223
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
224 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
225 tree_while_command::accept (tree_walker& tw)
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
226 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
227 tw.visit_while_command (*this);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
228 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
229
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
230 // For.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
231
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
232 tree_for_command::~tree_for_command (void)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
233 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
234 delete id;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
235 delete id_list;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
236 delete expr;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
237 delete list;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
238 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
239
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
240 inline void
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
241 tree_for_command::do_for_loop_once (tree_return_list *lst,
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
242 const octave_value_list& rhs, bool& quit)
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
243 {
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
244 quit = false;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
245
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
246 tree_oct_obj *tmp = new tree_oct_obj (rhs);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
247 tree_multi_assignment_expression tmp_ass (lst, tmp, 1);
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
248 tmp_ass.eval (false);
1228
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 if (error_state)
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 eval_error ();
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
253 return;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
254 }
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 (list)
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 list->eval (1);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
259 if (error_state)
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 eval_error ();
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
262 quit = true;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
263 return;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
264 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
265 }
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 quit = quit_loop_now ();
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
268 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
269
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
270 inline void
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
271 tree_for_command::do_for_loop_once (tree_index_expression *idx_expr,
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
272 const octave_value& rhs, bool& quit)
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
273 {
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
274 quit = false;
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
275
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
276 octave_value *tmp = new octave_value (rhs);
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
277 tree_simple_assignment_expression tmp_ass (idx_expr, tmp, true);
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
278 tmp_ass.eval (false);
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 if (error_state)
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 eval_error ();
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
283 return;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
284 }
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 (list)
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 list->eval (1);
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
289 if (error_state)
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 eval_error ();
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
292 quit = true;
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
293 return;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
294 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
295 }
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 quit = quit_loop_now ();
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
298 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
299
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
300 inline void
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
301 tree_for_command::do_for_loop_once (tree_identifier *ident,
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
302 octave_value& rhs, bool& quit)
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
303 {
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
304 quit = false;
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
305
2373
d423dcc0ac32 [project @ 1996-10-12 00:19:58 by jwe]
jwe
parents: 2200
diff changeset
306 octave_variable_reference tmp (ident);
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
307
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
308 if (error_state)
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 eval_error ();
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
311 return;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
312 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
313
2373
d423dcc0ac32 [project @ 1996-10-12 00:19:58 by jwe]
jwe
parents: 2200
diff changeset
314 tmp.assign (rhs);
d423dcc0ac32 [project @ 1996-10-12 00:19:58 by jwe]
jwe
parents: 2200
diff changeset
315
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
316 if (list)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
317 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
318 list->eval (1);
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
319 if (error_state)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
320 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
321 eval_error ();
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
322 quit = true;
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
323 return;
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 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
326
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
327 quit = quit_loop_now ();
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 #define DO_LOOP(val) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
331 do \
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 if (ident) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
334 for (int i = 0; i < steps; i++) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
335 { \
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
336 octave_value rhs (val); \
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
337 bool quit = false; \
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
338 do_for_loop_once (ident, rhs, quit); \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
339 if (quit) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
340 break; \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
341 } \
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
342 else if (id_list) \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
343 for (int i = 0; i < steps; i++) \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
344 { \
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
345 octave_value_list rhs (val); \
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
346 bool quit = false; \
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
347 do_for_loop_once (id_list, rhs, quit); \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
348 if (quit) \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
349 break; \
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
350 } \
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
351 else \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
352 for (int i = 0; i < steps; i++) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
353 { \
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
354 octave_value rhs (val); \
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
355 bool quit = false; \
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
356 do_for_loop_once (tmp_id, rhs, quit); \
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
357 if (quit) \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
358 break; \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
359 } \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
360 } \
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
361 while (0)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
362
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
363 void
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
364 tree_for_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
365 {
529
7ea224e713cd [project @ 1994-07-20 18:54:27 by jwe]
jwe
parents: 494
diff changeset
366 if (error_state || ! expr)
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
367 return;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
368
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
369 octave_value tmp_expr = expr->eval (false);
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
370
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
371 if (error_state || tmp_expr.is_undefined ())
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 eval_error ();
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
374 return;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
375 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
376
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
377 tree_index_expression *tmp_id = id;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
378 if (id_list && id_list->length () == 1)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
379 tmp_id = id_list->front ();
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
380
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
381 tree_identifier *ident = 0;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
382 if (tmp_id && ! tmp_id->arg_list ())
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
383 {
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
384 tree_indirect_ref *idr = tmp_id->ident ();
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
385 if (idr->is_identifier_only ())
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
386 ident = idr->ident ();
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
387 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
388
1234
9204518e940f [project @ 1995-04-10 14:31:21 by jwe]
jwe
parents: 1228
diff changeset
389 if (id_list && ! ident && ! tmp_expr.is_map ())
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
390 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
391 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
392 return;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
393 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
394
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
395 if (tmp_expr.is_scalar_type ())
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
396 {
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
397 bool quit = false;
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
398 if (ident)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
399 do_for_loop_once (ident, tmp_expr, quit);
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
400 else if (id_list)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
401 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
402 octave_value_list rhs (tmp_expr);
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
403 do_for_loop_once (id_list, rhs, quit);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
404 }
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
405 else
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
406 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
407 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
408 else if (tmp_expr.is_matrix_type ())
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
409 {
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
410 Matrix m_tmp;
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
411 ComplexMatrix cm_tmp;
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
412 int nr;
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
413 int steps;
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
414 if (tmp_expr.is_real_matrix ())
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
415 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
416 m_tmp = tmp_expr.matrix_value ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
417 nr = m_tmp.rows ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
418 steps = m_tmp.columns ();
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 else
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
421 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
422 cm_tmp = tmp_expr.complex_matrix_value ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
423 nr = cm_tmp.rows ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
424 steps = cm_tmp.columns ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
425 }
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
426
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
427 if (tmp_expr.is_real_matrix ())
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
428 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
429 if (nr == 1)
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
430 DO_LOOP(m_tmp (0, i));
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
431 else
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
432 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
433 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
434 else
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
435 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
436 if (nr == 1)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
437 DO_LOOP(cm_tmp (0, i));
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 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
440 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
441 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
442 else if (tmp_expr.is_string ())
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
443 {
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
444 gripe_string_invalid ();
620
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_range ())
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
447 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
448 Range rng = tmp_expr.range_value ();
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
449
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
450 int steps = rng.nelem ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
451 double b = rng.base ();
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
452 double increment = rng.inc ();
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
453
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
454 if (ident)
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
455 {
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
456 for (int i = 0; i < steps; i++)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
457 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
458 double tmp_val = b + i * increment;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
459
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
460 octave_value rhs (tmp_val);
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
461
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
462 bool quit = false;
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
463 do_for_loop_once (ident, rhs, quit);
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
464
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
465 if (quit)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
466 break;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
467 }
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
468 }
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
469 else if (id_list)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
470 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
471 for (int i = 0; i < steps; i++)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
472 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
473 double tmp_val = b + i * increment;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
474
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
475 octave_value_list rhs (tmp_val);
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
476
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
477 bool quit = false;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
478 do_for_loop_once (id_list, rhs, quit);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
479
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
480 if (quit)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
481 break;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
482 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
483 }
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
484 else
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
485 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
486 for (int i = 0; i < steps; i++)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
487 {
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
488 double tmp_val = b + i * increment;
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
489
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
490 octave_value rhs (tmp_val);
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
491
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
492 bool quit = false;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
493 do_for_loop_once (tmp_id, rhs, quit);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
494
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
495 if (quit)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
496 break;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
497 }
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 }
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
500 else if (tmp_expr.is_map ())
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 if (ident)
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 Octave_map tmp_val (tmp_expr.map_value ());
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 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
507 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
508 octave_value rhs (tmp_val.contents (p));
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
509
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
510 bool quit = false;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
511 do_for_loop_once (ident, rhs, quit);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
512
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
513 if (quit)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
514 break;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
515 }
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 else if (id_list)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
518 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
519 // Cycle through structure elements. First element of
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
520 // 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
521 // of the structure element.
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 Octave_map tmp_val (tmp_expr.map_value ());
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
524
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
525 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
526 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
527 octave_value_list tmp;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
528 tmp (1) = tmp_val.key (p);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
529 tmp (0) = tmp_val.contents (p);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
530
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
531 bool quit = false;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
532 do_for_loop_once (id_list, tmp, quit);
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
533
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
534 if (quit)
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
535 break;
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
536 }
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 else
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
539 {
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
540 Octave_map tmp_val (tmp_expr.map_value ());
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 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
543 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
544 octave_value rhs = tmp_val.contents (p);
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
545
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
546 bool quit = false;
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
547 do_for_loop_once (tmp_id, rhs, quit);
1168
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
548
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
549 if (quit)
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
550 break;
e2036dce97ea [project @ 1995-03-10 18:49:55 by jwe]
jwe
parents: 1059
diff changeset
551 }
620
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
552 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
553 }
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
554 else
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
555 {
8e4e7e5f307e [project @ 1994-08-16 04:36:32 by jwe]
jwe
parents: 584
diff changeset
556 ::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
557 line (), column ());
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
558 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
559 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
560
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
561 void
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
562 tree_for_command::eval_error (void)
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 if (error_state > 0)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
565 ::error ("evaluating for command near line %d, column %d",
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
566 line (), column ());
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
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
569 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
570 tree_for_command::accept (tree_walker& tw)
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
571 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
572 tw.visit_for_command (*this);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
573 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
574
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
575 // If.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
576
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
577 tree_if_command::~tree_if_command (void)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
578 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
579 delete list;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
580 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
581
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
582 void
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
583 tree_if_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
584 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
585 if (list)
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
586 list->eval ();
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
587
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
588 if (error_state > 0)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
589 ::error ("evaluating if command near line %d, column %d",
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
590 line (), column ());
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
591 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
592
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
593 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
594 tree_if_command::accept (tree_walker& tw)
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
595 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
596 tw.visit_if_command (*this);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
597 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
598
2764
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
599 // Switch.
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
600
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
601 tree_switch_command::~tree_switch_command (void)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
602 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
603 delete expr;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
604 delete list;
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
605 }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
606
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
607 void
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
608 tree_switch_command::eval (void)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
609 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
610 if (expr)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
611 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
612 octave_value val = expr->eval (0);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
613
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
614 if (! error_state)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
615 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
616 if (list)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
617 list->eval (val);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
618
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
619 if (error_state)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
620 eval_error ();
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
621 }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
622 else
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
623 eval_error ();
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
624 }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
625 else
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
626 ::error ("missing value in switch command near line %d, column %d",
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
627 line (), column ());
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
628 }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
629
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
630 void
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
631 tree_switch_command::eval_error (void)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
632 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
633 ::error ("evaluating switch command near line %d, column %d",
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
634 line (), column ());
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
635 }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
636
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
637 void
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
638 tree_switch_command::accept (tree_walker& tw)
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
639 {
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
640 tw.visit_switch_command (*this);
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
641 }
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2620
diff changeset
642
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
643 // Simple exception handling.
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
644
1489
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
645 tree_try_catch_command::~tree_try_catch_command (void)
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
646 {
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
647 delete try_code;
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
648 delete catch_code;
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
649 }
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
650
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
651 static void
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
652 do_catch_code (void *ptr)
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
653 {
2800
9aeba8e006a4 [project @ 1997-03-09 09:50:20 by jwe]
jwe
parents: 2764
diff changeset
654 tree_statement_list *list = static_cast<tree_statement_list *> (ptr);
1489
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
655
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
656 // Set up for letting the user print any messages from errors that
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
657 // occurred in the body of the try_catch statement.
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
658
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
659 buffer_error_messages = 0;
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
660 bind_global_error_variable ();
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
661 add_unwind_protect (clear_global_error_variable, 0);
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
662
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
663 // Similarly, if we have seen a return or break statement, allow all
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
664 // the catch code to run before returning or handling the break.
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
665 // We don't have to worry about continue statements because they can
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
666 // only occur in loops.
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
667
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
668 unwind_protect_int (returning);
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
669 returning = 0;
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
670
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
671 unwind_protect_int (breaking);
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
672 breaking = 0;
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
673
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
674 if (list)
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
675 list->eval (true);
1489
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
676
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
677 // This is the one for breaking. (The unwind_protects are popped
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
678 // off the stack in the reverse of the order they are pushed on).
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
679
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
680 // XXX FIXME XXX -- inside a try-catch, should break work like
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
681 // a return, or just jump to the end of the try_catch block?
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
682 // The following code makes it just jump to the end of the block.
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
683
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
684 run_unwind_protect ();
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
685 if (breaking)
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
686 breaking--;
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
687
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
688 // This is the one for returning.
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
689
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
690 if (returning)
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
691 discard_unwind_protect ();
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
692 else
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
693 run_unwind_protect ();
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
694
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
695 run_unwind_protect ();
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
696 }
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
697
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
698 void
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
699 tree_try_catch_command::eval (void)
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
700 {
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
701 begin_unwind_frame ("tree_try_catch::eval");
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
702
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
703 add_unwind_protect (do_catch_code, catch_code);
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
704
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
705 if (catch_code)
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
706 {
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
707 unwind_protect_int (buffer_error_messages);
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
708 buffer_error_messages = 1;
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
709 }
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
710
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
711 if (try_code)
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
712 try_code->eval (true);
1489
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
713
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
714 if (catch_code && error_state)
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
715 {
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
716 error_state = 0;
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
717 run_unwind_frame ("tree_try_catch::eval");
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
718 }
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
719 else
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
720 {
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
721 error_state = 0;
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
722 discard_unwind_frame ("tree_try_catch::eval");
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
723 }
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
724 }
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
725
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
726 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
727 tree_try_catch_command::accept (tree_walker& tw)
1489
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
728 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
729 tw.visit_try_catch_command (*this);
1489
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
730 }
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
731
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
732 // Simple exception handling.
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
733
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
734 tree_unwind_protect_command::~tree_unwind_protect_command (void)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
735 {
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
736 delete unwind_protect_code;
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
737 delete cleanup_code;
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
738 }
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
739
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
740 static void
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
741 do_unwind_protect_cleanup_code (void *ptr)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
742 {
2800
9aeba8e006a4 [project @ 1997-03-09 09:50:20 by jwe]
jwe
parents: 2764
diff changeset
743 tree_statement_list *list = static_cast<tree_statement_list *> (ptr);
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
744
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
745 // 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
746 // 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
747 // 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
748 // ignored.
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
749
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
750 unwind_protect_int (error_state);
1266
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
751 error_state = 0;
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
752
1266
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
753 // Similarly, if we have seen a return or break statement, allow all
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
754 // the cleanup code to run before returning or handling the break.
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
755 // We don't have to worry about continue statements because they can
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
756 // only occur in loops.
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
757
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
758 unwind_protect_int (returning);
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
759 returning = 0;
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
760
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
761 unwind_protect_int (breaking);
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
762 breaking = 0;
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
763
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
764 if (list)
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
765 list->eval (true);
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
766
1266
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
767 // This is the one for breaking. (The unwind_protects are popped
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
768 // off the stack in the reverse of the order they are pushed on).
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
769
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
770 // XXX FIXME XXX -- inside an unwind_protect, should break work like
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
771 // a return, or just jump to the end of the unwind_protect block?
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
772 // The following code makes it just jump to the end of the block.
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
773
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
774 run_unwind_protect ();
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
775 if (breaking)
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
776 breaking--;
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
777
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
778 // This is the one for returning.
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
779
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
780 if (returning)
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
781 discard_unwind_protect ();
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
782 else
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
783 run_unwind_protect ();
e1ddfb12566d [project @ 1995-04-20 18:56:04 by jwe]
jwe
parents: 1234
diff changeset
784
1228
38b876e46ff6 [project @ 1995-04-10 00:56:17 by jwe]
jwe
parents: 1192
diff changeset
785 // 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
786 // 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
787 // 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
788
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
789 if (error_state)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
790 discard_unwind_protect ();
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
791 else
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
792 run_unwind_protect ();
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
793 }
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
794
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
795 void
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
796 tree_unwind_protect_command::eval (void)
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
797 {
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
798 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
799
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
800 if (unwind_protect_code)
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
801 unwind_protect_code->eval (true);
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
802
1489
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1372
diff changeset
803 run_unwind_protect ();
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
804 }
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
805
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
806 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
807 tree_unwind_protect_command::accept (tree_walker& tw)
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
808 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
809 tw.visit_unwind_protect_command (*this);
916
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
810 }
2f35156aa18b [project @ 1994-11-11 00:36:31 by jwe]
jwe
parents: 877
diff changeset
811
2620
5c773d4745d6 [project @ 1997-01-23 16:26:25 by jwe]
jwe
parents: 2447
diff changeset
812 // No-op.
5c773d4745d6 [project @ 1997-01-23 16:26:25 by jwe]
jwe
parents: 2447
diff changeset
813
5c773d4745d6 [project @ 1997-01-23 16:26:25 by jwe]
jwe
parents: 2447
diff changeset
814 void
5c773d4745d6 [project @ 1997-01-23 16:26:25 by jwe]
jwe
parents: 2447
diff changeset
815 tree_no_op_command::accept (tree_walker& tw)
5c773d4745d6 [project @ 1997-01-23 16:26:25 by jwe]
jwe
parents: 2447
diff changeset
816 {
5c773d4745d6 [project @ 1997-01-23 16:26:25 by jwe]
jwe
parents: 2447
diff changeset
817 tw.visit_no_op_command (*this);
5c773d4745d6 [project @ 1997-01-23 16:26:25 by jwe]
jwe
parents: 2447
diff changeset
818 }
5c773d4745d6 [project @ 1997-01-23 16:26:25 by jwe]
jwe
parents: 2447
diff changeset
819
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
820 // Break.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
821
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
822 void
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
823 tree_break_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
824 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
825 if (! error_state)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
826 breaking = 1;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
827 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
828
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
829 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
830 tree_break_command::accept (tree_walker& tw)
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
831 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
832 tw.visit_break_command (*this);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
833 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
834
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
835 // Continue.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
836
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
837 void
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
838 tree_continue_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
839 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
840 if (! error_state)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
841 continuing = 1;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
842 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
843
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
844 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
845 tree_continue_command::accept (tree_walker& tw)
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
846 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
847 tw.visit_continue_command (*this);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
848 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
849
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
850 // Return.
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
851
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
852 void
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 529
diff changeset
853 tree_return_command::eval (void)
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
854 {
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
855 if (! error_state)
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
856 returning = 1;
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
857 }
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
858
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
859 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
860 tree_return_command::accept (tree_walker& tw)
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
861 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
862 tw.visit_return_command (*this);
581
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
863 }
bc813f5eb025 [project @ 1994-08-07 01:02:15 by jwe]
jwe
parents: 578
diff changeset
864
494
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
865 /*
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
866 ;;; Local Variables: ***
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
867 ;;; mode: C++ ***
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
868 ;;; End: ***
2c4d694b87e9 [project @ 1994-07-06 14:55:23 by jwe]
jwe
parents:
diff changeset
869 */