Mercurial > octave
changeset 24349:4ced2bfd737e
deprecate defun_isargout functions
* pt-eval.h, pt-eval.cc (tree_evaluator::isargout): New functions,
adapted from defun_isargout.
(tree_evaluator::lvalue_list): Now const.
(tree_evaluator::ignored_fcn_outputs: Use lvalue_list.
* defun-int.h (defun_isargout): Mark as deprecated in 4.4.
* defun.cc (defun_isargout): Call tree_evaluator::isargout
to do the work.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 29 Nov 2017 15:08:37 -0500 |
parents | 64691264dd21 |
children | b991accccd4c |
files | libinterp/corefcn/defun-int.h libinterp/corefcn/defun.cc libinterp/parse-tree/pt-eval.cc libinterp/parse-tree/pt-eval.h |
diffstat | 4 files changed, 72 insertions(+), 57 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/defun-int.h Tue Nov 28 12:43:25 2017 -0500 +++ b/libinterp/corefcn/defun-int.h Wed Nov 29 15:08:37 2017 -0500 @@ -103,15 +103,16 @@ OCTAVE_DEPRECATED (4.4, "use 'octave::auto_shlib' instead") typedef octave::auto_shlib octave_auto_shlib; -#endif - - +OCTAVE_DEPRECATED (4.4, "use 'tree_evaluator::isargout' instead") extern OCTINTERP_API bool defun_isargout (int, int); +OCTAVE_DEPRECATED (4.4, "use 'tree_evaluator::isargout' instead") extern OCTINTERP_API void defun_isargout (int, int, bool *); +#endif + #define FORWARD_DECLARE_FUNX(name) \ extern OCTAVE_EXPORT octave_value_list \ name (const octave_value_list&, int)
--- a/libinterp/corefcn/defun.cc Tue Nov 28 12:43:25 2017 -0500 +++ b/libinterp/corefcn/defun.cc Wed Nov 29 15:08:37 2017 -0500 @@ -213,26 +213,7 @@ { octave::tree_evaluator& tw = octave::__get_evaluator__ ("defun_isargout"); - const std::list<octave_lvalue> *lvalue_list = tw.lvalue_list (); - - if (iout >= std::max (nargout, 1)) - return false; - else if (lvalue_list) - { - int k = 0; - for (const auto& lval : *lvalue_list) - { - if (k == iout) - return ! lval.is_black_hole (); - k += lval.numel (); - if (k > iout) - break; - } - - return true; - } - else - return true; + return tw.isargout (nargout, iout); } void @@ -240,28 +221,5 @@ { octave::tree_evaluator& tw = octave::__get_evaluator__ ("defun_isargout"); - const std::list<octave_lvalue> *lvalue_list = tw.lvalue_list (); - - if (lvalue_list) - { - int k = 0; - for (const auto& lval : *lvalue_list) - { - if (lval.is_black_hole ()) - isargout[k++] = false; - else - { - int l = std::min (k + lval.numel (), - static_cast<octave_idx_type> (nout)); - while (k < l) - isargout[k++] = true; - } - } - } - else - for (int i = 0; i < nout; i++) - isargout[i] = true; - - for (int i = std::max (nargout, 1); i < nout; i++) - isargout[i] = false; + return tw.isargout (nargout, nout, isargout); }
--- a/libinterp/parse-tree/pt-eval.cc Tue Nov 28 12:43:25 2017 -0500 +++ b/libinterp/parse-tree/pt-eval.cc Wed Nov 29 15:08:37 2017 -0500 @@ -439,17 +439,14 @@ { Matrix retval; - if (m_lvalue_list_stack.empty ()) - return retval; - - const std::list<octave_lvalue> *lvalue_list = m_lvalue_list_stack.top (); - - if (! lvalue_list) + const std::list<octave_lvalue> *lvalues = lvalue_list (); + + if (! lvalues) return retval; octave_idx_type nbh = 0; - for (const auto& lval : *lvalue_list) + for (const auto& lval : *lvalues) nbh += lval.is_black_hole (); if (nbh > 0) @@ -459,7 +456,7 @@ octave_idx_type k = 0; octave_idx_type l = 0; - for (const auto& lval : *lvalue_list) + for (const auto& lval : *lvalues) { if (lval.is_black_hole ()) retval(l++) = k+1; @@ -471,6 +468,60 @@ return retval; } + bool + tree_evaluator::isargout (int nargout, int iout) const + { + const std::list<octave_lvalue> *lvalues = lvalue_list (); + + if (iout >= std::max (nargout, 1)) + return false; + else if (lvalues) + { + int k = 0; + for (const auto& lval : *lvalues) + { + if (k == iout) + return ! lval.is_black_hole (); + k += lval.numel (); + if (k > iout) + break; + } + + return true; + } + else + return true; + } + + void + tree_evaluator::isargout (int nargout, int nout, bool *isargout) const + { + const std::list<octave_lvalue> *lvalues = lvalue_list (); + + if (lvalues) + { + int k = 0; + for (const auto& lval : *lvalues) + { + if (lval.is_black_hole ()) + isargout[k++] = false; + else + { + int l = std::min (k + lval.numel (), + static_cast<octave_idx_type> (nout)); + while (k < l) + isargout[k++] = true; + } + } + } + else + for (int i = 0; i < nout; i++) + isargout[i] = true; + + for (int i = std::max (nargout, 1); i < nout; i++) + isargout[i] = false; + } + octave_value tree_evaluator::evaluate (tree_decl_elt *elt) {
--- a/libinterp/parse-tree/pt-eval.h Tue Nov 28 12:43:25 2017 -0500 +++ b/libinterp/parse-tree/pt-eval.h Wed Nov 29 15:08:37 2017 -0500 @@ -259,9 +259,14 @@ Matrix ignored_fcn_outputs (void) const; - const std::list<octave_lvalue> * lvalue_list (void) + bool isargout (int nargout, int iout) const; + + void isargout (int nargout, int nout, bool *isargout) const; + + const std::list<octave_lvalue> * lvalue_list (void) const { - return m_lvalue_list_stack.empty () ? nullptr : m_lvalue_list_stack.top (); + return (m_lvalue_list_stack.empty () + ? nullptr : m_lvalue_list_stack.top ()); } octave_value evaluate (tree_expression *expr, int nargout = 1)