Mercurial > octave
diff src/pt-idx.cc @ 4234:90e44267e8cf
[project @ 2002-12-21 17:15:25 by jwe]
author | jwe |
---|---|
date | Sat, 21 Dec 2002 17:15:25 +0000 |
parents | ccfdb55c8156 |
children | ff7187bd3075 |
line wrap: on
line diff
--- a/src/pt-idx.cc Fri Dec 20 22:43:55 2002 +0000 +++ b/src/pt-idx.cc Sat Dec 21 17:15:25 2002 +0000 @@ -148,12 +148,13 @@ } static inline octave_value_list -make_value_list (tree_argument_list *args, const string_vector& arg_nm) +make_value_list (tree_argument_list *args, const string_vector& arg_nm, + const octave_value *object) { octave_value_list retval; if (args) - retval = args->convert_to_const_vector (); + retval = args->convert_to_const_vector (object); if (! error_state) { @@ -274,11 +275,11 @@ switch (type[i]) { case '(': - idx.push_back (make_value_list (*p_args, *p_arg_nm)); + idx.push_back (make_value_list (*p_args, *p_arg_nm, &tmp)); break; case '{': - idx.push_back (make_value_list (*p_args, *p_arg_nm)); + idx.push_back (make_value_list (*p_args, *p_arg_nm, &tmp)); break; case '.': @@ -335,42 +336,44 @@ std::list<string_vector>::iterator p_arg_nm = arg_nm.begin (); std::list<tree_expression *>::iterator p_dyn_field = dyn_field.begin (); - for (int i = 0; i < n; i++) - { - switch (type[i]) - { - case '(': - idx.push_back (make_value_list (*p_args, *p_arg_nm)); - break; - - case '{': - idx.push_back (make_value_list (*p_args, *p_arg_nm)); - break; - - case '.': - { - idx.push_back (octave_value (get_struct_index (p_arg_nm, p_dyn_field))); - - if (error_state) - eval_error (); - } - break; - - default: - panic_impossible (); - } - - if (error_state) - break; - - p_args++; - p_arg_nm++; - p_dyn_field++; - } + retval = expr->lvalue (); if (! error_state) { - retval = expr->lvalue (); + const octave_value *tmp = retval.object (); + + for (int i = 0; i < n; i++) + { + switch (type[i]) + { + case '(': + idx.push_back (make_value_list (*p_args, *p_arg_nm, tmp)); + break; + + case '{': + idx.push_back (make_value_list (*p_args, *p_arg_nm, tmp)); + break; + + case '.': + { + idx.push_back (octave_value (get_struct_index (p_arg_nm, p_dyn_field))); + + if (error_state) + eval_error (); + } + break; + + default: + panic_impossible (); + } + + if (error_state) + break; + + p_args++; + p_arg_nm++; + p_dyn_field++; + } if (! error_state) retval.set_index (type, idx);