Mercurial > hg > octave-jordi
changeset 20724:7164a69472dd
eliminate more uses of error state
* daspk.cc, dasrt.cc, dassl.cc, lsode.cc, quad.cc: Eliminate uses of
error_state. Handle user-supplied functions consistently.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 19 Nov 2015 15:46:40 -0500 |
parents | 0338dc274ec5 |
children | 25d676f9619c |
files | NEWS libinterp/corefcn/daspk.cc libinterp/corefcn/dasrt.cc libinterp/corefcn/dassl.cc libinterp/corefcn/lsode.cc libinterp/corefcn/quad.cc |
diffstat | 6 files changed, 117 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS +++ b/NEWS @@ -96,6 +96,10 @@ makes the error and print_usage functions in C++ work more like the corresponding functions in the scripting language. + ** New configure option, --enable-address-sanitizer-flags, to build + Octave with memory allocator checks (similar to those provided by + valgrind) built in. + Summary of important user-visible changes for version 4.0: ---------------------------------------------------------
--- a/libinterp/corefcn/daspk.cc +++ b/libinterp/corefcn/daspk.cc @@ -73,7 +73,17 @@ if (daspk_fcn) { - octave_value_list tmp = daspk_fcn->do_multi_index_op (1, args); + octave_value_list tmp; + + try + { + tmp = daspk_fcn->do_multi_index_op (1, args); + } + catch (const octave_execution_exception&) + { + gripe_user_supplied_eval ("daspk"); + throw; + } int tlen = tmp.length (); if (tlen > 0 && tmp(0).is_defined ()) @@ -116,7 +126,17 @@ if (daspk_jac) { - octave_value_list tmp = daspk_jac->do_multi_index_op (1, args); + octave_value_list tmp; + + try + { + tmp = daspk_jac->do_multi_index_op (1, args); + } + catch (const octave_execution_exception&) + { + gripe_user_supplied_eval ("daspk"); + throw; + } int tlen = tmp.length (); if (tlen > 0 && tmp(0).is_defined ())
--- a/libinterp/corefcn/dasrt.cc +++ b/libinterp/corefcn/dasrt.cc @@ -73,7 +73,17 @@ if (dasrt_f) { - octave_value_list tmp = dasrt_f->do_multi_index_op (1, args); + octave_value_list tmp; + + try + { + tmp = dasrt_f->do_multi_index_op (1, args); + } + catch (const octave_execution_exception&) + { + gripe_user_supplied_eval ("dasrt"); + throw; + } if (tmp.length () > 0 && tmp(0).is_defined ()) { @@ -107,7 +117,17 @@ if (dasrt_cf) { - octave_value_list tmp = dasrt_cf->do_multi_index_op (1, args); + octave_value_list tmp; + + try + { + tmp = dasrt_cf->do_multi_index_op (1, args); + } + catch (const octave_execution_exception&) + { + gripe_user_supplied_eval ("dasrt"); + throw; + } if (tmp.length () > 0 && tmp(0).is_defined ()) { @@ -146,7 +166,17 @@ if (dasrt_j) { - octave_value_list tmp = dasrt_j->do_multi_index_op (1, args); + octave_value_list tmp; + + try + { + tmp = dasrt_j->do_multi_index_op (1, args); + } + catch (const octave_execution_exception&) + { + gripe_user_supplied_eval ("dasrt"); + throw; + } int tlen = tmp.length (); if (tlen > 0 && tmp(0).is_defined ())
--- a/libinterp/corefcn/dassl.cc +++ b/libinterp/corefcn/dassl.cc @@ -73,7 +73,17 @@ if (dassl_fcn) { - octave_value_list tmp = dassl_fcn->do_multi_index_op (1, args); + octave_value_list tmp; + + try + { + tmp = dassl_fcn->do_multi_index_op (1, args); + } + catch (const octave_execution_exception&) + { + gripe_user_supplied_eval ("dassl"); + throw; + } int tlen = tmp.length (); if (tlen > 0 && tmp(0).is_defined ()) @@ -116,7 +126,17 @@ if (dassl_jac) { - octave_value_list tmp = dassl_jac->do_multi_index_op (1, args); + octave_value_list tmp; + + try + { + tmp = dassl_jac->do_multi_index_op (1, args); + } + catch (const octave_execution_exception&) + { + gripe_user_supplied_eval ("dassl"); + throw; + } int tlen = tmp.length (); if (tlen > 0 && tmp(0).is_defined ())
--- a/libinterp/corefcn/lsode.cc +++ b/libinterp/corefcn/lsode.cc @@ -70,12 +70,16 @@ if (lsode_fcn) { - octave_value_list tmp = lsode_fcn->do_multi_index_op (1, args); + octave_value_list tmp; - if (error_state) + try + { + tmp = lsode_fcn->do_multi_index_op (1, args); + } + catch (const octave_execution_exception&) { gripe_user_supplied_eval ("lsode"); - return retval; + throw; } if (tmp.length () > 0 && tmp(0).is_defined ()) @@ -86,9 +90,9 @@ warned_fcn_imaginary = true; } - retval = ColumnVector (tmp(0).vector_value ()); + retval = tmp(0).xvector_value ("lsode: expecting user supplied function to return numeric vector"); - if (error_state || retval.numel () == 0) + if (retval.numel () == 0) gripe_user_supplied_eval ("lsode"); } else @@ -109,12 +113,16 @@ if (lsode_jac) { - octave_value_list tmp = lsode_jac->do_multi_index_op (1, args); + octave_value_list tmp; - if (error_state) + try + { + tmp = lsode_jac->do_multi_index_op (1, args); + } + catch (const octave_execution_exception&) { gripe_user_supplied_eval ("lsode"); - return retval; + throw; } if (tmp.length () > 0 && tmp(0).is_defined ()) @@ -125,9 +133,9 @@ warned_jac_imaginary = true; } - retval = tmp(0).matrix_value (); + retval = tmp(0).xmatrix_value ("lsode: expecting user supplied jacobian function to return numeric array"); - if (error_state || retval.numel () == 0) + if (retval.numel () == 0) gripe_user_supplied_eval ("lsode"); } else
--- a/libinterp/corefcn/quad.cc +++ b/libinterp/corefcn/quad.cc @@ -67,13 +67,16 @@ if (quad_fcn) { - octave_value_list tmp = quad_fcn->do_multi_index_op (1, args); + octave_value_list tmp; - if (error_state) + try { - quad_integration_error = 1; // FIXME + tmp = quad_fcn->do_multi_index_op (1, args); + } + catch (const octave_execution_exception&) + { gripe_user_supplied_eval ("quad"); - return retval; + throw; } if (tmp.length () && tmp(0).is_defined ()) @@ -84,19 +87,10 @@ warned_imaginary = true; } - retval = tmp(0).double_value (); - - if (error_state) - { - quad_integration_error = 1; // FIXME - gripe_user_supplied_eval ("quad"); - } + retval = tmp(0).xdouble_value ("quad: expecting user supplied function to return numeric value"); } else - { - quad_integration_error = 1; // FIXME - gripe_user_supplied_eval ("quad"); - } + gripe_user_supplied_eval ("quad"); } return retval; @@ -112,13 +106,16 @@ if (quad_fcn) { - octave_value_list tmp = quad_fcn->do_multi_index_op (1, args); + octave_value_list tmp; - if (error_state) + try { - quad_integration_error = 1; // FIXME + tmp = quad_fcn->do_multi_index_op (1, args); + } + catch (const octave_execution_exception&) + { gripe_user_supplied_eval ("quad"); - return retval; + throw; } if (tmp.length () && tmp(0).is_defined ()) @@ -129,19 +126,11 @@ warned_imaginary = true; } - retval = tmp(0).float_value (); + retval = tmp(0).xfloat_value ("quad: expecting user supplied function to return numeric value"); - if (error_state) - { - quad_integration_error = 1; // FIXME - gripe_user_supplied_eval ("quad"); - } } else - { - quad_integration_error = 1; // FIXME - gripe_user_supplied_eval ("quad"); - } + gripe_user_supplied_eval ("quad"); } return retval;