Mercurial > hg > octave-max
diff src/ov-builtin.cc @ 10887:f10d0bc8f9cc
make isargout available to DEFUNs
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Fri, 13 Aug 2010 10:14:52 +0200 |
parents | 57a59eae83cc |
children | fd0a3ac60b0e |
line wrap: on
line diff
--- a/src/ov-builtin.cc +++ b/src/ov-builtin.cc @@ -44,6 +44,14 @@ const std::list<octave_value_list>& idx, int nargout) { + return octave_builtin::subsref (type, idx, nargout, 0); +} + +octave_value_list +octave_builtin::subsref (const std::string& type, + const std::list<octave_value_list>& idx, + int nargout, const std::list<octave_lvalue>* lvalue_list) +{ octave_value_list retval; switch (type[0]) @@ -52,7 +60,8 @@ { int tmp_nargout = (type.length () > 1 && nargout == 0) ? 1 : nargout; - retval = do_multi_index_op (tmp_nargout, idx.front ()); + retval = do_multi_index_op (tmp_nargout, idx.front (), + idx.size () == 1 ? lvalue_list : 0); } break; @@ -87,6 +96,13 @@ octave_value_list octave_builtin::do_multi_index_op (int nargout, const octave_value_list& args) { + return octave_builtin::do_multi_index_op (nargout, args, 0); +} + +octave_value_list +octave_builtin::do_multi_index_op (int nargout, const octave_value_list& args, + const std::list<octave_lvalue> *lvalue_list) +{ octave_value_list retval; if (error_state) @@ -102,6 +118,12 @@ frame.add_fcn (octave_call_stack::pop); + if (lvalue_list || curr_lvalue_list) + { + frame.protect_var (curr_lvalue_list); + curr_lvalue_list = lvalue_list; + } + try { retval = (*f) (args, nargout); @@ -125,3 +147,6 @@ return retval; } + + +const std::list<octave_lvalue> *octave_builtin::curr_lvalue_list = 0;