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