diff libinterp/octave-value/ov.cc @ 16091:1785493171ac

pass lvalue_list to more subsref calls (bug #38374) * pt-id.h, pt-id.cc (tree_identifier::rvalue): Handle lvalue_list. * ov-cell.h, ov-cell.cc (octave_cell::subsref): Likewise. * ov.h, ov.cc (octave_value::next_subsref): Likewise. * ov-usr-fcn.cc (octave_usr_function::do_multi_index_op): Forward lvalue_list to rvalue call for special expression. (Fisargout): New tests.
author John W. Eaton <jwe@octave.org>
date Fri, 22 Feb 2013 19:01:10 -0500
parents e665645fb402
children 0259254a3ccc e769440b39db
line wrap: on
line diff
--- a/libinterp/octave-value/ov.cc	Fri Feb 22 11:22:21 2013 -0500
+++ b/libinterp/octave-value/ov.cc	Fri Feb 22 19:01:10 2013 -0500
@@ -1312,6 +1312,23 @@
     return *this;
 }
 
+octave_value_list
+octave_value::next_subsref (int nargout, const std::string& type,
+                            const std::list<octave_value_list>& idx,
+                            const std::list<octave_lvalue> *lvalue_list,
+                            size_t skip)
+{
+  if (! error_state && idx.size () > skip)
+    {
+      std::list<octave_value_list> new_idx (idx);
+      for (size_t i = 0; i < skip; i++)
+        new_idx.erase (new_idx.begin ());
+      return subsref (type.substr (skip), new_idx, nargout, lvalue_list);
+    }
+  else
+    return *this;
+}
+
 octave_value
 octave_value::next_subsref (bool auto_add, const std::string& type,
                             const std::list<octave_value_list>& idx,