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

[project @ 1997-05-15 22:35:37 by jwe]
author jwe
date Thu, 15 May 1997 22:36:40 +0000
parents f2be17e6f1ea
children cd5ad3fd8049
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
1 /*
bbfca89cb1cd [project @ 1996-01-12 11:03:26 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
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
4
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
6
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
10 later version.
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
11
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
15 for more details.
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
16
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
20
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
21 */
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
22
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
23 #if !defined (octave_tree_expr2_h)
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
24 #define octave_tree_expr2_h 1
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
25
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
26 #if defined (__GNUG__)
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
27 #pragma interface
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
28 #endif
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
29
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
30 class ostream;
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
31
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
32 class tree_identifier;
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
33 class tree_index_expression;
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
34 class tree_indirect_ref;
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
35 class tree_argument_list;
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
36 class tree_assignment_lhs;
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
37
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
38 class tree_walker;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
39
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
40 class octave_value;
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
41 class octave_value_list;
2979
a3556d2adec9 [project @ 1997-05-15 22:35:37 by jwe]
jwe
parents: 2971
diff changeset
42 class octave_lvalue;
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
43
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
44 #include "oct-obj.h"
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
45 #include "pt-exp-base.h"
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
46
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
47 // Unary expressions.
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
48
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
49 class
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
50 tree_unary_expression : public tree_expression
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
51 {
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
52 public:
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
53
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
54 tree_unary_expression (int l = -1, int c = -1)
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
55 : tree_expression (l, c), op (0) { }
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
56
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
57 tree_unary_expression (tree_expression *e, int l = -1, int c = -1)
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
58 : tree_expression (l, c), op (e) { }
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
59
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
60 ~tree_unary_expression (void) { delete op; }
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
61
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
62 tree_expression *operand (void) { return op; }
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
63
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
64 protected:
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
65
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
66 // The operand for the expression.
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
67 tree_expression *op;
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
68 };
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
69
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
70 // Prefix expressions.
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
71
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
72 class
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
73 tree_prefix_expression : public tree_unary_expression
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
74 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
75 public:
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
76
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
77 enum type
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
78 {
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
79 unknown,
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
80 unot,
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
81 uminus,
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
82 increment,
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
83 decrement
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
84 };
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
85
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
86 tree_prefix_expression (int l = -1, int c = -1)
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
87 : tree_unary_expression (l, c), etype (unknown) { }
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
88
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
89 tree_prefix_expression (type t = unknown, tree_expression *e,
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
90 int l = -1, int c = -1)
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
91 : tree_unary_expression (e, l, c), etype (t) { }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
92
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
93 ~tree_prefix_expression (void) { }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
94
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
95 bool rvalue_ok (void) const
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
96 { return true; }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
97
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
98 octave_value rvalue (void);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
99
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
100 octave_value_list rvalue (int nargou);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
101
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
102 void eval_error (void);
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
103
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2879
diff changeset
104 string oper (void) const;
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
105
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
106 void accept (tree_walker& tw);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
107
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
108 private:
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
109
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
110 // The type of the expression.
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
111 type etype;
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
112 };
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
113
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
114 // Postfix expressions.
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
115
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
116 class
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
117 tree_postfix_expression : public tree_unary_expression
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
118 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
119 public:
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
120
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
121 enum type
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
122 {
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
123 unknown,
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
124 hermitian,
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
125 transpose,
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
126 increment,
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
127 decrement
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
128 };
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
129
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
130 tree_postfix_expression (int l = -1, int c = -1)
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
131 : tree_unary_expression (l, c), etype (unknown) { }
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
132
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
133 tree_postfix_expression (type t = unknown, tree_expression *e,
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
134 int l = -1, int c = -1)
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
135 : tree_unary_expression (e, l, c), etype (t) { }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
136
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
137 ~tree_postfix_expression (void) { }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
138
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
139 bool rvalue_ok (void) const
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
140 { return true; }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
141
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
142 octave_value rvalue (void);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
143
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
144 octave_value_list rvalue (int nargout);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
145
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
146 void eval_error (void);
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
147
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2879
diff changeset
148 string oper (void) const;
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
149
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
150 void accept (tree_walker& tw);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
151
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
152 private:
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
153
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
154 // The type of the expression.
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
155 type etype;
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
156 };
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
157
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
158 // Binary expressions.
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
159
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
160 class
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
161 tree_binary_expression : public tree_expression
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
162 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
163 public:
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
164
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
165 tree_binary_expression (int l = -1, int c = -1,
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
166 octave_value::binary_op t
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
167 = octave_value::unknown_binary_op)
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
168 : tree_expression (l, c), op_lhs (0), op_rhs (0), etype (t) { }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
169
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
170 tree_binary_expression (tree_expression *a, tree_expression *b,
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
171 int l = -1, int c = -1,
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
172 octave_value::binary_op t
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
173 = octave_value::unknown_binary_op)
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
174 : tree_expression (l, c), op_lhs (a), op_rhs (b), etype (t) { }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
175
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
176 ~tree_binary_expression (void)
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
177 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
178 delete op_lhs;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
179 delete op_rhs;
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
180 }
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
181
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
182 bool rvalue_ok (void) const
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
183 { return true; }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
184
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
185 octave_value rvalue (void);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
186
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
187 octave_value_list rvalue (int nargou);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
188
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
189 void eval_error (void);
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
190
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2879
diff changeset
191 string oper (void) const;
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
192
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
193 tree_expression *lhs (void) { return op_lhs; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
194 tree_expression *rhs (void) { return op_rhs; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
195
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
196 void accept (tree_walker& tw);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
197
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
198 protected:
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
199
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
200 // The operands for the expression.
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
201 tree_expression *op_lhs;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
202 tree_expression *op_rhs;
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
203
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
204 private:
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
205
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
206 // The type of the expression.
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
207 octave_value::binary_op etype;
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
208 };
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
209
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
210 // Boolean expressions.
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
211
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
212 class
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
213 tree_boolean_expression : public tree_binary_expression
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
214 {
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
215 public:
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
216
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
217 enum type
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
218 {
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
219 unknown,
2805
68e6d0c93fc8 [project @ 1997-03-11 04:52:44 by jwe]
jwe
parents: 2532
diff changeset
220 bool_and,
68e6d0c93fc8 [project @ 1997-03-11 04:52:44 by jwe]
jwe
parents: 2532
diff changeset
221 bool_or
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
222 };
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
223
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
224 tree_boolean_expression (int l = -1, int c = -1, type t = unknown)
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
225 : tree_binary_expression (l, c), etype (t) { }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
226
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
227 tree_boolean_expression (tree_expression *a, tree_expression *b,
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
228 int l = -1, int c = -1, type t = unknown)
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
229 : tree_binary_expression (a, b, l, c), etype (t) { }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
230
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
231 ~tree_boolean_expression (void) { }
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
232
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
233 bool rvalue_ok (void) const
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
234 { return true; }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
235
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
236 octave_value rvalue (void);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
237
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
238 octave_value_list rvalue (int nargout);
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
239
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2879
diff changeset
240 string oper (void) const;
2388
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
241
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
242 private:
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
243
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
244 // The type of the expression.
4be11abb8d8c [project @ 1996-10-12 18:53:51 by jwe]
jwe
parents: 2124
diff changeset
245 type etype;
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
246 };
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
247
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
248 // Simple assignment expressions.
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
249
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
250 class
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
251 tree_simple_assignment : public tree_expression
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
252 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
253 public:
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
254
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
255 tree_simple_assignment (bool plhs = false, int l = -1, int c = -1,
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
256 octave_value::assign_op t = octave_value::asn_eq)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
257 : tree_expression (l, c), lhs (0), rhs (0), preserve (plhs), etype (t) { }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
258
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
259 tree_simple_assignment (tree_expression *le, tree_expression *re,
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
260 bool plhs = false, int l = -1, int c = -1,
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
261 octave_value::assign_op t = octave_value::asn_eq)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
262 : tree_expression (l, c), lhs (le), rhs (re), preserve (plhs),
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
263 etype (t) { }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
264
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
265 ~tree_simple_assignment (void);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
266
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
267 bool rvalue_ok (void) const
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
268 { return true; }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
269
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
270 octave_value rvalue (void);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
271
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
272 octave_value_list rvalue (int nargout);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
273
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
274 bool is_assignment_expression (void) const
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
275 { return true; }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
276
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
277 void eval_error (void);
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
278
2900
5ed088015839 [project @ 1997-04-30 03:26:56 by jwe]
jwe
parents: 2879
diff changeset
279 string oper (void) const;
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
280
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
281 tree_expression *left_hand_side (void) { return lhs; }
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
282
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
283 tree_expression *right_hand_side (void) { return rhs; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
284
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
285 void accept (tree_walker& tw);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
286
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
287 private:
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
288
2979
a3556d2adec9 [project @ 1997-05-15 22:35:37 by jwe]
jwe
parents: 2971
diff changeset
289 void do_assign (octave_lvalue& ult, const octave_value_list& args,
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
290 const octave_value& rhs_val);
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
291
2979
a3556d2adec9 [project @ 1997-05-15 22:35:37 by jwe]
jwe
parents: 2971
diff changeset
292 void do_assign (octave_lvalue& ult, const octave_value& rhs_val);
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
293
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
294 // The left hand side of the assignment.
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
295 tree_expression *lhs;
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
296
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
297 // The right hand side of the assignment.
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
298 tree_expression *rhs;
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
299
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
300 // True if we should not delete the lhs.
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
301 bool preserve;
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
302
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
303 // True if this is an assignment to the built-in variable ans.
1827
effa9400766f [project @ 1996-02-02 14:07:51 by jwe]
jwe
parents: 1742
diff changeset
304 bool ans_ass;
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
305
2879
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
306 // The type of the expression.
4309724baab6 [project @ 1997-04-24 09:30:23 by jwe]
jwe
parents: 2859
diff changeset
307 octave_value::assign_op etype;
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
308 };
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
309
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
310 // Colon expressions.
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
311
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
312 class
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
313 tree_colon_expression : public tree_expression
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
314 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
315 public:
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
316
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
317 tree_colon_expression (int l = -1, int c = -1)
2960
194b50e4725b [project @ 1997-05-12 00:43:54 by jwe]
jwe
parents: 2900
diff changeset
318 : tree_expression (l, c), op_base (0), op_limit (0), op_increment (0) { }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
319
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
320 tree_colon_expression (tree_expression *e, int l = -1, int c = -1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
321 : tree_expression (l, c), op_base (e), op_limit (0), op_increment (0) { }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
322
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
323 ~tree_colon_expression (void)
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
324 {
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
325 delete op_base;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
326 delete op_limit;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
327 delete op_increment;
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
328 }
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
329
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
330 tree_colon_expression *append (tree_expression *t);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
331
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
332 bool rvalue_ok (void) const
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
333 { return true; }
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
334
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
335 octave_value rvalue (void);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
336
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
337 octave_value_list rvalue (int nargout);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
338
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
339 void eval_error (const string& s = string ());
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
340
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
341 tree_expression *base (void) { return op_base; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
342 tree_expression *limit (void) { return op_limit; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
343 tree_expression *increment (void) { return op_increment; }
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
344
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
345 void accept (tree_walker& tw);
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
346
2124
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
347 private:
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
348
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
349 // The components of the expression.
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
350 tree_expression *op_base;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
351 tree_expression *op_limit;
97a566037a75 [project @ 1996-05-12 07:16:36 by jwe]
jwe
parents: 2086
diff changeset
352 tree_expression *op_increment;
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
353 };
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
354
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
355 // Index expressions.
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
356
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
357 class
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
358 tree_index_expression : public tree_expression
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
359 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
360 public:
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
361
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
362 tree_index_expression (tree_expression *e = 0, tree_argument_list *lst = 0,
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
363 int l = -1, int c = -1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
364 : tree_expression (l, c), expr (e), list (lst), arg_nm () { }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
365
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
366 ~tree_index_expression (void);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
367
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
368 bool is_index_expression (void) const
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
369 { return true; }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
370
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
371 tree_expression *expression (void)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
372 { return expr; }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
373
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
374 tree_argument_list *arg_list (void)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
375 { return list; }
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 bool rvalue_ok (void) const
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
378 { return true; }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
379
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
380 octave_value rvalue (void);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
381
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
382 octave_value_list rvalue (int nargout);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
383
2979
a3556d2adec9 [project @ 1997-05-15 22:35:37 by jwe]
jwe
parents: 2971
diff changeset
384 octave_lvalue lvalue (void);
2971
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
385
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
386 void eval_error (void);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
387
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
388 void accept (tree_walker& tw);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
389
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
390 private:
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
391
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
392 tree_expression *expr;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
393
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
394 tree_argument_list *list;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
395
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
396 string_vector arg_nm;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
397 };
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
398
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
399 // Multi-valued assignment expressions.
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
400
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
401 class
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
402 tree_multi_assignment : public tree_expression
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
403 {
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
404 public:
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
405
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
406 tree_multi_assignment (bool plhs = false, int l = -1, int c = -1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
407 : tree_expression (l, c), preserve (plhs), lhs (0), rhs (0) { }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
408
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
409 tree_multi_assignment (tree_argument_list *lst, tree_expression *r,
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
410 bool plhs = false, int l = -1, int c = -1)
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
411 : tree_expression (l, c), preserve (plhs), lhs (lst), rhs (r) { }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
412
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
413 ~tree_multi_assignment (void);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
414
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
415 bool is_assignment_expression (void) const
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
416 { return true; }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
417
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
418 bool rvalue_ok (void) const
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
419 { return true; }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
420
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
421 octave_value rvalue (void);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
422
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
423 octave_value_list rvalue (int nargout);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
424
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
425 void eval_error (void);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
426
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
427 tree_argument_list *left_hand_side (void) { return lhs; }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
428
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
429 tree_expression *right_hand_side (void) { return rhs; }
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
430
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
431 void accept (tree_walker& tw);
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
432
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
433 private:
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
434
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
435 bool preserve;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
436 tree_argument_list *lhs;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
437 tree_expression *rhs;
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
438 };
f2be17e6f1ea [project @ 1997-05-15 18:55:44 by jwe]
jwe
parents: 2960
diff changeset
439
1739
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
440 #endif
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
441
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
442 /*
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
443 ;;; Local Variables: ***
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
444 ;;; mode: C++ ***
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
445 ;;; End: ***
bbfca89cb1cd [project @ 1996-01-12 11:03:26 by jwe]
jwe
parents:
diff changeset
446 */