Mercurial > octave
comparison src/pt-id.cc @ 2948:56be458e237f
[project @ 1997-05-09 13:37:35 by jwe]
author | jwe |
---|---|
date | Fri, 09 May 1997 13:51:06 +0000 |
parents | 5ed088015839 |
children | dfffbf305468 |
comparison
equal
deleted
inserted
replaced
2947:cf676ff8b702 | 2948:56be458e237f |
---|---|
76 { | 76 { |
77 if (sym) | 77 if (sym) |
78 sym->document (s); | 78 sym->document (s); |
79 } | 79 } |
80 | 80 |
81 octave_value | |
82 tree_identifier::assign (octave_value::assign_op op, const octave_value& rhs) | |
83 { | |
84 octave_value retval; | |
85 | |
86 if (rhs.is_defined ()) | |
87 { | |
88 if (! sym->is_defined ()) | |
89 { | |
90 if (! (sym->is_formal_parameter () | |
91 || sym->is_linked_to_global ())) | |
92 { | |
93 link_to_builtin_variable (sym); | |
94 } | |
95 } | |
96 else if (sym->is_function ()) | |
97 { | |
98 sym->clear (); | |
99 } | |
100 | |
101 // XXX FIXME XXX -- make this work for ops other than `='. | |
102 | |
103 if (sym->define (rhs)) | |
104 retval = rhs; | |
105 } | |
106 | |
107 return retval; | |
108 } | |
109 | |
110 octave_value | |
111 tree_identifier::assign (octave_value::assign_op op, | |
112 const octave_value_list& args, | |
113 const octave_value& rhs) | |
114 { | |
115 octave_value retval; | |
116 | |
117 if (rhs.is_defined ()) | |
118 { | |
119 if (! sym->is_defined ()) | |
120 { | |
121 if (! (sym->is_formal_parameter () | |
122 || sym->is_linked_to_global ())) | |
123 { | |
124 link_to_builtin_variable (sym); | |
125 } | |
126 } | |
127 else if (sym->is_function ()) | |
128 { | |
129 sym->clear (); | |
130 } | |
131 | |
132 if (sym->is_variable () && sym->is_defined ()) | |
133 { | |
134 sym->variable_reference () . assign (op, args, rhs); | |
135 } | |
136 else | |
137 { | |
138 assert (! sym->is_defined ()); | |
139 | |
140 if (! Vresize_on_range_error) | |
141 { | |
142 ::error ("indexed assignment to previously undefined variables"); | |
143 ::error ("is only possible when resize_on_range_error is true"); | |
144 } | |
145 else | |
146 { | |
147 retval.assign (op, args, rhs); | |
148 | |
149 if (retval.is_defined ()) | |
150 sym->define (retval); | |
151 } | |
152 } | |
153 } | |
154 | |
155 return retval; | |
156 } | |
157 | |
158 bool | 81 bool |
159 tree_identifier::is_defined (void) | 82 tree_identifier::is_defined (void) |
160 { | 83 { |
161 return (sym && sym->is_defined ()); | 84 return (sym && sym->is_defined ()); |
162 } | 85 } |
348 tree_identifier::value (void) const | 271 tree_identifier::value (void) const |
349 { | 272 { |
350 return sym->variable_value (); | 273 return sym->variable_value (); |
351 } | 274 } |
352 | 275 |
353 octave_value& | 276 octave_variable_reference |
354 tree_identifier::reference (void) | 277 tree_identifier::reference (void) |
355 { | 278 { |
356 return sym->variable_reference (); | 279 return sym->variable_reference (); |
357 } | 280 } |
358 | 281 |