annotate src/pt-exp.cc @ 2979:a3556d2adec9

[project @ 1997-05-15 22:35:37 by jwe]
author jwe
date Thu, 15 May 1997 22:36:40 +0000
parents 49de01238638
children cd5ad3fd8049
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
1 /*
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
2
2847
8b262e771614 [project @ 1997-03-27 16:18:26 by jwe]
jwe
parents: 2805
diff changeset
3 Copyright (C) 1996, 1997 John W. Eaton
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
4
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
6
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
10 later version.
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
11
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
15 for more details.
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
16
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
20
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
21 */
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
22
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
23 #if defined (__GNUG__)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
24 #pragma implementation
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
25 #endif
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
26
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
27 #ifdef HAVE_CONFIG_H
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
28 #include <config.h>
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
29 #endif
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
30
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
31 #include <iostream.h>
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
32 #include <strstream.h>
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
33
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
34 #include "defun.h"
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
35 #include "error.h"
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
36 #include "gripes.h"
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
37 #include "help.h"
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
38 #include "input.h"
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
39 #include "oct-obj.h"
2979
a3556d2adec9 [project @ 1997-05-15 22:35:37 by jwe]
jwe
parents: 2978
diff changeset
40 #include "oct-lvalue.h"
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
41 #include "pager.h"
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
42 #include "ov.h"
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
43 #include "pt-exp.h"
2891
1a30f46e1870 [project @ 1997-04-28 01:49:00 by jwe]
jwe
parents: 2879
diff changeset
44 #include "pt-id.h"
1a30f46e1870 [project @ 1997-04-28 01:49:00 by jwe]
jwe
parents: 2879
diff changeset
45 #include "pt-indir.h"
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
46 #include "pt-misc.h"
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
47 #include "pt-pr-code.h"
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
48 #include "pt-walk.h"
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
49 #include "utils.h"
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
50 #include "variables.h"
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
51
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
52 // Nonzero means we're returning from a function.
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
53 extern int returning;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
54
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
55 // Nonzero means we're breaking out of a loop or function body.
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
56 extern int breaking;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
57
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
58 // TRUE means print the right hand side of an assignment instead of
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
59 // the left.
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
60 static bool Vprint_rhs_assign_val;
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
61
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
62 // Prefix expressions.
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
63
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
64 octave_value_list
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
65 tree_prefix_expression::rvalue (int nargout)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
66 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
67 octave_value_list retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
68
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
69 if (nargout > 1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
70 error ("prefix operator `%s': invalid number of output arguments",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
71 oper () . c_str ());
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
72 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
73 retval = rvalue ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
74
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
75 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
76 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
77
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
78 octave_value
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
79 tree_prefix_expression::rvalue (void)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
80 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
81 octave_value retval;
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
82
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
83 if (error_state)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
84 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
85
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
86 if (op)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
87 {
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
88 if (etype == unot || etype == uminus)
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
89 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
90 octave_value val = op->rvalue ();
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
91
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
92 if (! error_state)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
93 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
94 if (val.is_defined ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
95 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
96 if (etype == unot)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
97 retval = val.not ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
98 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
99 retval = val.uminus ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
100 }
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
101 else
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
102 error ("argument to prefix operator `%s' undefined",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
103 oper () . c_str ());
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
104 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
105 }
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
106 else if (etype == increment || etype == decrement)
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
107 {
2979
a3556d2adec9 [project @ 1997-05-15 22:35:37 by jwe]
jwe
parents: 2978
diff changeset
108 octave_lvalue ref = op->lvalue ();
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
109
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
110 if (! error_state)
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
111 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
112 if (ref.is_defined ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
113 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
114 if (etype == increment)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
115 ref.increment ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
116 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
117 ref.decrement ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
118
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
119 retval = ref.value ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
120 }
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
121 else
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
122 error ("argument to prefix operator `%s' undefined",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
123 oper () . c_str ());
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
124 }
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
125 }
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
126 else
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
127 error ("prefix operator %d not implemented", etype);
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
128 }
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
129
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
130 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
131 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
132
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
133 void
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
134 tree_prefix_expression::eval_error (void)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
135 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
136 if (error_state > 0)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
137 ::error ("evaluating prefix operator `%s' near line %d, column %d",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
138 oper () . c_str (), line (), column ());
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
139 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
140
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
141 string
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
142 tree_prefix_expression::oper (void) const
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
143 {
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
144 string retval = "<unknown>";
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
145
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
146 switch (etype)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
147 {
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
148 case unot:
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
149 retval = "!";
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
150 break;
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
151
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
152 case uminus:
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
153 retval = "-";
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
154 break;
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
155
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
156 case increment:
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
157 retval = "++";
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
158 break;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
159
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
160 case decrement:
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
161 retval = "--";
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
162 break;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
163
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
164 default:
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
165 break;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
166 }
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
167
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
168 return retval;
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
169 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
170
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
171 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
172 tree_prefix_expression::accept (tree_walker& tw)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
173 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
174 tw.visit_prefix_expression (*this);
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
175 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
176
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
177 // Postfix expressions.
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
178
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
179 octave_value_list
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
180 tree_postfix_expression::rvalue (int nargout)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
181 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
182 octave_value_list retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
183
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
184 if (nargout > 1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
185 error ("postfix operator `%s': invalid number of output arguments",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
186 oper () . c_str ());
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
187 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
188 retval = rvalue ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
189
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
190 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
191 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
192
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
193 octave_value
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
194 tree_postfix_expression::rvalue (void)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
195 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
196 octave_value retval;
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
197
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
198 if (error_state)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
199 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
200
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
201 if (op)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
202 {
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
203 if (etype == transpose || etype == hermitian)
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
204 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
205 octave_value val = op->rvalue ();
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
206
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
207 if (! error_state)
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
208 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
209 if (val.is_defined ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
210 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
211 if (etype == transpose)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
212 retval = val.transpose ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
213 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
214 retval = val.hermitian ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
215 }
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
216 else
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
217 error ("argument to postfix operator `%s' undefined",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
218 oper () . c_str ());
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
219 }
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
220 }
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
221 else if (etype == increment || etype == decrement)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
222 {
2979
a3556d2adec9 [project @ 1997-05-15 22:35:37 by jwe]
jwe
parents: 2978
diff changeset
223 octave_lvalue ref = op->lvalue ();
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
224
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
225 if (! error_state)
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
226 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
227 if (ref.is_defined ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
228 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
229 retval = ref.value ();
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
230
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
231 if (etype == increment)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
232 ref.increment ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
233 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
234 ref.decrement ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
235 }
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
236 else
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
237 error ("argument to postfix operator `%s' undefined",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
238 oper () . c_str ());
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
239 }
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
240 }
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
241 else
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
242 error ("postfix operator %d not implemented", etype);
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
243 }
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
244
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
245 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
246 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
247
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
248 void
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
249 tree_postfix_expression::eval_error (void)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
250 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
251 if (error_state > 0)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
252 ::error ("evaluating postfix operator `%s' near line %d, column %d",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
253 oper () . c_str (), line (), column ());
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
254 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
255
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
256 string
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
257 tree_postfix_expression::oper (void) const
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
258 {
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
259 string retval = "<unknown>";
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
260
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
261 switch (etype)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
262 {
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
263 case transpose:
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
264 retval = ".'";
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
265 break;
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
266
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
267 case hermitian:
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
268 retval = "'";
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
269 break;
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2958
diff changeset
270
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
271 case increment:
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
272 retval = "++";
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
273 break;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
274
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
275 case decrement:
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
276 retval = "--";
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
277 break;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
278
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
279 default:
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
280 break;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
281 }
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
282
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
283 return retval;
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
284 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
285
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
286 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
287 tree_postfix_expression::accept (tree_walker& tw)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
288 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
289 tw.visit_postfix_expression (*this);
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
290 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
291
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
292 // Binary expressions.
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
293
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
294 octave_value_list
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
295 tree_binary_expression::rvalue (int nargout)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
296 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
297 octave_value_list retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
298
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
299 if (nargout > 1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
300 error ("binary operator `%s': invalid number of output arguments",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
301 oper () . c_str ());
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
302 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
303 retval = rvalue ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
304
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
305 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
306 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
307
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
308 octave_value
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
309 tree_binary_expression::rvalue (void)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
310 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
311 octave_value retval;
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
312
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
313 if (error_state)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
314 return retval;
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
315
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
316 if (op_lhs)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
317 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
318 octave_value a = op_lhs->rvalue ();
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
319
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
320 if (error_state)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
321 eval_error ();
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
322 else if (a.is_defined () && op_rhs)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
323 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
324 octave_value b = op_rhs->rvalue ();
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
325
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
326 if (error_state)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
327 eval_error ();
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
328 else if (b.is_defined ())
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
329 {
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
330 retval = ::do_binary_op (etype, a, b);
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
331
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
332 if (error_state)
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
333 {
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
334 retval = octave_value ();
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
335 eval_error ();
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
336 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
337 }
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
338 else
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
339 eval_error ();
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
340 }
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
341 else
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
342 eval_error ();
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
343 }
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
344 else
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
345 eval_error ();
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
346
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
347 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
348 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
349
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
350 void
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
351 tree_binary_expression::eval_error (void)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
352 {
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
353 if (error_state > 0)
2805
68e6d0c93fc8 [project @ 1997-03-11 04:52:44 by jwe]
jwe
parents: 2800
diff changeset
354 ::error ("evaluating binary operator `%s' near line %d, column %d",
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
355 oper () . c_str (), line (), column ());
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
356 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
357
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
358 string
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
359 tree_binary_expression::oper (void) const
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
360 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
361 return octave_value::binary_op_as_string (etype);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
362 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
363
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
364 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
365 tree_binary_expression::accept (tree_walker& tw)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
366 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
367 tw.visit_binary_expression (*this);
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
368 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
369
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
370 // Boolean expressions.
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
371
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
372 octave_value_list
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
373 tree_boolean_expression::rvalue (int nargout)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
374 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
375 octave_value_list retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
376
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
377 if (nargout > 1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
378 error ("binary operator `%s': invalid number of output arguments",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
379 oper () . c_str ());
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
380 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
381 retval = rvalue ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
382
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
383 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
384 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
385
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
386 octave_value
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
387 tree_boolean_expression::rvalue (void)
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
388 {
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
389 octave_value retval;
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
390
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
391 if (error_state)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
392 return retval;
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
393
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
394 bool result = false;
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
395
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
396 if (op_lhs)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
397 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
398 octave_value a = op_lhs->rvalue ();
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
399
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
400 if (error_state)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
401 eval_error ();
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
402 else
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
403 {
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
404 bool a_true = a.is_true ();
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
405
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
406 if (error_state)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
407 eval_error ();
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
408 else
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
409 {
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
410 if (a_true)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
411 {
2805
68e6d0c93fc8 [project @ 1997-03-11 04:52:44 by jwe]
jwe
parents: 2800
diff changeset
412 if (etype == bool_or)
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
413 {
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
414 result = true;
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
415 goto done;
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
416 }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
417 }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
418 else
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
419 {
2805
68e6d0c93fc8 [project @ 1997-03-11 04:52:44 by jwe]
jwe
parents: 2800
diff changeset
420 if (etype == bool_and)
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
421 goto done;
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
422 }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
423
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
424 if (op_rhs)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
425 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
426 octave_value b = op_rhs->rvalue ();
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
427
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
428 if (error_state)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
429 eval_error ();
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
430 else
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
431 {
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
432 result = b.is_true ();
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
433
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
434 if (error_state)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
435 eval_error ();
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
436 }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
437 }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
438 else
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
439 eval_error ();
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
440
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
441 done:
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
442
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
443 if (! error_state)
2800
9aeba8e006a4 [project @ 1997-03-09 09:50:20 by jwe]
jwe
parents: 2665
diff changeset
444 retval = octave_value (static_cast<double> (result));
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
445 }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
446 }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
447 }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
448 else
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
449 eval_error ();
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
450
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
451 return retval;
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
452 }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
453
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
454 string
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
455 tree_boolean_expression::oper (void) const
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
456 {
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
457 string retval = "<unknown>";
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
458
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
459 switch (etype)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
460 {
2805
68e6d0c93fc8 [project @ 1997-03-11 04:52:44 by jwe]
jwe
parents: 2800
diff changeset
461 case bool_and:
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
462 retval = "&&";
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
463 break;
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
464
2805
68e6d0c93fc8 [project @ 1997-03-11 04:52:44 by jwe]
jwe
parents: 2800
diff changeset
465 case bool_or:
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
466 retval = "||";
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
467 break;
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
468
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
469 default:
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
470 break;
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
471 }
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
472
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
473 return retval;
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
474 }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
475
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
476 // Simple assignment expressions.
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
477
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
478 tree_simple_assignment::~tree_simple_assignment (void)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
479 {
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
480 if (! preserve)
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
481 delete lhs;
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
482
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
483 delete rhs;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
484 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
485
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
486 octave_value_list
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
487 tree_simple_assignment::rvalue (int nargout)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
488 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
489 octave_value_list retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
490
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
491 if (nargout > 1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
492 error ("invalid number of output arguments for expression X = RHS");
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
493 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
494 retval = rvalue ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
495
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
496 return retval;
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
497 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
498
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
499 octave_value
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
500 tree_simple_assignment::rvalue (void)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
501 {
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
502 octave_value rhs_val;
2665
02f298ddf9f6 [project @ 1997-02-08 23:47:34 by jwe]
jwe
parents: 2531
diff changeset
503
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
504 if (error_state)
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
505 return rhs_val;
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
506
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
507 if (rhs)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
508 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
509 octave_value_list tmp = rhs->rvalue ();
2665
02f298ddf9f6 [project @ 1997-02-08 23:47:34 by jwe]
jwe
parents: 2531
diff changeset
510
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
511 if (! (error_state || tmp.empty ()))
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
512 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
513 rhs_val = tmp(0);
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
514
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
515 if (rhs_val.is_undefined ())
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
516 {
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
517 error ("value on right hand side of assignment is undefined");
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
518 eval_error ();
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
519 }
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
520 else
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
521 {
2979
a3556d2adec9 [project @ 1997-05-15 22:35:37 by jwe]
jwe
parents: 2978
diff changeset
522 octave_lvalue ult = lhs->lvalue ();
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
523
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
524 if (error_state)
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
525 eval_error ();
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
526 else
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
527 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
528 ult.assign (etype, rhs_val);
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
529
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
530 if (error_state)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
531 eval_error ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
532 else if (! Vprint_rhs_assign_val)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
533 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
534 octave_value lhs_val = ult.value ();
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
535
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
536 if (! error_state && print_result ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
537 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
538 if (Vprint_rhs_assign_val)
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
539 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
540 ostrstream buf;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
541
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
542 tree_print_code tpc (buf);
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
543
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
544 lhs->accept (tpc);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
545
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
546 buf << ends;
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
547
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
548 const char *tag = buf.str ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
549
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
550 rhs_val.print_with_name (octave_stdout, tag);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
551
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
552 delete [] tag;
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
553 }
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
554 else
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
555 lhs_val.print_with_name (octave_stdout,
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
556 lhs->name ());
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
557 }
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
558 }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2200
diff changeset
559 }
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
560 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
561 }
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
562 else
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
563 eval_error ();
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
564 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
565
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
566 return rhs_val;
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
567 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
568
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
569 void
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
570 tree_simple_assignment::eval_error (void)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
571 {
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
572 if (error_state > 0)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
573 {
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
574 int l = line ();
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
575 int c = column ();
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1755
diff changeset
576
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
577 if (l != -1 && c != -1)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
578 ::error ("evaluating assignment expression near line %d, column %d",
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
579 l, c);
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
580 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
581 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
582
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
583 string
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
584 tree_simple_assignment::oper (void) const
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
585 {
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2891
diff changeset
586 return octave_value::assign_op_as_string (etype);
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
587 }
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
588
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
589 void
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
590 tree_simple_assignment::accept (tree_walker& tw)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
591 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
592 tw.visit_simple_assignment (*this);
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
593 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
594
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
595 // Colon expressions.
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
596
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
597 tree_colon_expression *
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
598 tree_colon_expression::append (tree_expression *t)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
599 {
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
600 tree_colon_expression *retval = 0;
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
601
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
602 if (op_base)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
603 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
604 if (op_limit)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
605 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
606 if (op_increment)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
607 ::error ("invalid colon expression");
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
608 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
609 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
610 // Stupid syntax:
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
611 //
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
612 // base : limit
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
613 // base : increment : limit
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
614
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
615 op_increment = op_limit;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
616 op_limit = t;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
617 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
618 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
619 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
620 op_limit = t;
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
621
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
622 retval = this;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
623 }
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
624 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
625 ::error ("invalid colon expression");
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
626
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
627 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
628 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
629
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
630 octave_value_list
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
631 tree_colon_expression::rvalue (int nargout)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
632 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
633 octave_value_list retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
634
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
635 if (nargout > 1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
636 error ("invalid number of output arguments for colon expression");
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
637 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
638 retval = rvalue ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
639
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
640 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
641 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
642
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
643 octave_value
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
644 tree_colon_expression::rvalue (void)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
645 {
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
646 octave_value retval;
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
647
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
648 if (error_state || ! op_base || ! op_limit)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
649 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
650
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
651 octave_value tmp = op_base->rvalue ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
652
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
653 if (tmp.is_undefined ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
654 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
655 eval_error ("invalid null value in colon expression");
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
656 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
657 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
658
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
659 double xbase = tmp.double_value ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
660
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
661 if (error_state)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
662 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
663 eval_error ("colon expression elements must be scalars");
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
664 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
665 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
666
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
667 tmp = op_limit->rvalue ();
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
668
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
669 if (tmp.is_undefined ())
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
670 {
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
671 eval_error ("invalid null value in colon expression");
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
672 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
673 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
674
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
675 double xlimit = tmp.double_value ();
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
676
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
677 if (error_state)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
678 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
679 eval_error ("colon expression elements must be scalars");
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
680 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
681 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
682
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
683 double xinc = 1.0;
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
684
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
685 if (op_increment)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
686 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
687 tmp = op_increment->rvalue ();
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
688
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
689 if (tmp.is_undefined ())
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
690 {
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
691 eval_error ("invalid null value in colon expression");
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
692 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
693 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
694
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
695 xinc = tmp.double_value ();
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
696
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
697 if (error_state)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
698 {
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
699 eval_error ("colon expression elements must be scalars");
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
700 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
701 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
702 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
703
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
704 retval = octave_value (xbase, xlimit, xinc);
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
705
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
706 if (error_state)
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
707 {
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
708 if (error_state)
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
709 eval_error ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
710
2086
bfb775fb6fe8 [project @ 1996-04-25 05:55:19 by jwe]
jwe
parents: 1996
diff changeset
711 return octave_value ();
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
712 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
713
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
714 return retval;
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
715 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
716
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
717 void
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
718 tree_colon_expression::eval_error (const string& s)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
719 {
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
720 if (error_state > 0)
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
721 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
722 if (! s.empty ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
723 ::error ("%s", s.c_str ());
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
724
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
725 ::error ("evaluating colon expression near line %d column %d",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
726 line (), column ());
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
727 }
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
728 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
729
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
730 void
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
731 tree_colon_expression::accept (tree_walker& tw)
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
732 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
733 tw.visit_colon_expression (*this);
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
734 }
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
735
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
736 tree_index_expression::~tree_index_expression (void)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
737 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
738 delete expr;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
739 delete list;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
740 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
741
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
742 octave_value_list
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
743 tree_index_expression::rvalue (int nargout)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
744 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
745 octave_value_list retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
746
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
747 if (error_state)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
748 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
749
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
750 octave_value tmp = expr->rvalue ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
751
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
752 if (! error_state)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
753 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
754 octave_value_list args;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
755
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
756 if (list)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
757 args = list->convert_to_const_vector ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
758
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
759 if (! error_state)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
760 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
761 if (! args.empty ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
762 args.stash_name_tags (arg_nm);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
763
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
764 // XXX FIXME XXX -- is this the right thing to do?
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
765 if (tmp.is_constant ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
766 retval = tmp.do_index_op (args);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
767 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
768 retval = tmp.do_index_op (nargout, args);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
769 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
770 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
771 eval_error ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
772 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
773 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
774 eval_error ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
775
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
776 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
777 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
778
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
779 octave_value
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
780 tree_index_expression::rvalue (void)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
781 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
782 octave_value retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
783
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
784 octave_value_list tmp = rvalue (1);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
785
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
786 if (! tmp.empty ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
787 retval = tmp(0);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
788
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
789 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
790 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
791
2979
a3556d2adec9 [project @ 1997-05-15 22:35:37 by jwe]
jwe
parents: 2978
diff changeset
792 octave_lvalue
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
793 tree_index_expression::lvalue (void)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
794 {
2979
a3556d2adec9 [project @ 1997-05-15 22:35:37 by jwe]
jwe
parents: 2978
diff changeset
795 octave_lvalue retval;
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
796
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
797 if (! error_state)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
798 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
799 retval = expr->lvalue ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
800
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
801 if (! error_state)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
802 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
803 octave_value_list args;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
804
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
805 if (list)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
806 args = list->convert_to_const_vector ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
807
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
808 retval.index (args);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
809 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
810 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
811
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
812 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
813 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
814
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
815 void
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
816 tree_index_expression::eval_error (void)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
817 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
818 if (error_state > 0)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
819 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
820 int l = line ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
821 int c = column ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
822
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
823 if (l != -1 && c != -1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
824 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
825 if (list)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
826 ::error ("evaluating index expression near line %d, column %d",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
827 l, c);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
828 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
829 ::error ("evaluating expression near line %d, column %d", l, c);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
830 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
831 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
832 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
833 if (list)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
834 ::error ("evaluating index expression");
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
835 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
836 ::error ("evaluating expression");
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
837 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
838 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
839 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
840
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
841 void
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
842 tree_index_expression::accept (tree_walker& tw)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
843 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
844 tw.visit_index_expression (*this);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
845 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
846
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
847 tree_multi_assignment::~tree_multi_assignment (void)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
848 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
849 if (! preserve)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
850 delete lhs;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
851
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
852 delete rhs;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
853 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
854
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
855 octave_value
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
856 tree_multi_assignment::rvalue (void)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
857 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
858 octave_value retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
859
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
860 octave_value_list tmp = rvalue (1);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
861
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
862 if (! tmp.empty ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
863 retval = tmp(0);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
864
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
865 return retval;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
866 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
867
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
868 octave_value_list
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
869 tree_multi_assignment::rvalue (int nargout)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
870 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
871 octave_value_list rhs_val;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
872
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
873 if (error_state)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
874 return rhs_val;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
875
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
876 if (rhs)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
877 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
878 int n_out = lhs->length ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
879
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
880 rhs_val = rhs->rvalue (n_out);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
881
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
882 if (! (error_state || rhs_val.empty ()))
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
883 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
884 if (rhs_val.empty ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
885 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
886 error ("value on right hand side of assignment is undefined");
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
887 eval_error ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
888 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
889 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
890 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
891 int k = 0;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
892
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
893 int n = rhs_val.length ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
894
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
895 for (Pix p = lhs->first (); p != 0; lhs->next (p))
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
896 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
897 tree_expression *lhs_elt = lhs->operator () (p);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
898
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
899 if (lhs_elt)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
900 {
2979
a3556d2adec9 [project @ 1997-05-15 22:35:37 by jwe]
jwe
parents: 2978
diff changeset
901 octave_lvalue ult = lhs_elt->lvalue ();
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
902
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
903 if (error_state)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
904 eval_error ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
905 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
906 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
907 octave_value tmp = k < n
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
908 ? rhs_val(k++) : octave_value ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
909
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
910 if (tmp.is_defined ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
911 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
912 // XXX FIXME XXX -- handle other assignment ops.
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
913 ult.assign (octave_value::asn_eq, tmp);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
914 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
915 else
2978
49de01238638 [project @ 1997-05-15 21:13:42 by jwe]
jwe
parents: 2971
diff changeset
916 error ("element number %d undefined in return list", k);
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
917
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
918 if (error_state)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
919 eval_error ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
920 else if (! Vprint_rhs_assign_val)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
921 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
922 octave_value lhs_val = ult.value ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
923
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
924 if (! error_state && print_result ())
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
925 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
926 if (Vprint_rhs_assign_val)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
927 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
928 ostrstream buf;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
929
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
930 tree_print_code tpc (buf);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
931
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
932 lhs_elt->accept (tpc);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
933
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
934 buf << ends;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
935
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
936 const char *tag = buf.str ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
937
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
938 tmp.print_with_name
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
939 (octave_stdout, tag);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
940
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
941 delete [] tag;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
942 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
943 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
944 lhs_val.print_with_name (octave_stdout,
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
945 lhs_elt->name ());
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
946 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
947 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
948 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
949 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
950
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
951 if (error_state)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
952 break;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
953 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
954 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
955 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
956 else
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
957 eval_error ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
958 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
959
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
960 return rhs_val;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
961 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
962
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
963 void
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
964 tree_multi_assignment::eval_error (void)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
965 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
966 if (error_state > 0)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
967 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
968 int l = line ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
969 int c = column ();
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
970
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
971 if (l != -1 && c != -1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
972 ::error ("evaluating assignment expression near line %d, column %d",
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
973 l, c);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
974 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
975 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
976
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
977 void
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
978 tree_multi_assignment::accept (tree_walker& tw)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
979 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
980 tw.visit_multi_assignment (*this);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
981 }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
982
2958
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
983 static int
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
984 print_rhs_assign_val (void)
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
985 {
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
986 Vprint_rhs_assign_val = check_preference ("print_rhs_assign_val");
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
987
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
988 return 0;
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
989 }
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
990
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
991 void
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
992 symbols_of_pt_exp (void)
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
993 {
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
994 DEFVAR (print_rhs_assign_val, 0.0, 0, print_rhs_assign_val,
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
995 "if TRUE, print the right hand side of assignments instead of the left");
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
996 }
da62d3b91fa3 [project @ 1997-05-09 18:51:56 by jwe]
jwe
parents: 2955
diff changeset
997
1741
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
998 /*
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
999 ;;; Local Variables: ***
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
1000 ;;; mode: C++ ***
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
1001 ;;; End: ***
6ec1465f60f0 [project @ 1996-01-12 11:09:39 by jwe]
jwe
parents:
diff changeset
1002 */