changeset 29180:eec0fe95576e stable

avoid dispatch error if methdo argument is a function handle (bug #59617) * ov-fcn-handle.h (octave_fcn_handle::builtin_type): Define method accidentally omitted in recent function handle refactoring. * test/bug-59617/@bug59617/bug59617.m, test/bug-59617/@bug59617/max.m, test/bug-59617/bug-59617.tst, test/bug-59617/module.mk: New test files based on test provided by Markus Mützel. * test/module.mk: Update.
author John W. Eaton <jwe@octave.org>
date Mon, 14 Dec 2020 13:55:10 -0500
parents bd5961abe971
children d809f75d2017 e359e0fcd6e7
files libinterp/octave-value/ov-fcn-handle.h test/bug-59617/@bug59617/bug59617.m test/bug-59617/@bug59617/max.m test/bug-59617/bug-59617.tst test/bug-59617/module.mk test/module.mk
diffstat 6 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/octave-value/ov-fcn-handle.h	Mon Dec 07 19:04:55 2020 +0100
+++ b/libinterp/octave-value/ov-fcn-handle.h	Mon Dec 14 13:55:10 2020 -0500
@@ -241,6 +241,8 @@
 
   bool is_defined (void) const { return true; }
 
+  builtin_type_t builtin_type (void) const { return btyp_func_handle; }
+
   bool is_function_handle (void) const { return true; }
 
   bool is_internal (void) const { return m_rep->is_internal (); }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-59617/@bug59617/bug59617.m	Mon Dec 14 13:55:10 2020 -0500
@@ -0,0 +1,5 @@
+function obj = bug59617 ()
+
+  obj = class (struct (), "bug59617");
+
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-59617/@bug59617/max.m	Mon Dec 14 13:55:10 2020 -0500
@@ -0,0 +1,9 @@
+function r = max (a, b)
+  if (nargin != 2)
+    error ("@bug59617/max: invalid number of arguments");
+  endif
+  if (! isa (a, "bug59617") && ! isa (b, "bug59617"))
+    error ("@bug59617/max: expecting one argument to be a bug59617 object");
+  endif
+  r = "@bug59617/max";
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-59617/bug-59617.tst	Mon Dec 14 13:55:10 2020 -0500
@@ -0,0 +1,5 @@
+%!test
+%! obj = bug59617 ();
+%! assert (max (@() 1, obj), "@bug59617/max")
+%! assert (max (obj, @() 2), "@bug59617/max")
+%! assert (max (obj, obj), "@bug59617/max")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-59617/module.mk	Mon Dec 14 13:55:10 2020 -0500
@@ -0,0 +1,6 @@
+bug_59617_TEST_FILES = \
+  %reldir%/@bug59617/bug59617.m \
+  %reldir%/@bug59617/max.m \
+  %reldir%/bug-59617.tst
+
+TEST_FILES += $(bug_59617_TEST_FILES)
--- a/test/module.mk	Mon Dec 07 19:04:55 2020 +0100
+++ b/test/module.mk	Mon Dec 14 13:55:10 2020 -0500
@@ -86,6 +86,7 @@
 include %reldir%/bug-58572/module.mk
 include %reldir%/bug-58593/module.mk
 include %reldir%/bug-59451/module.mk
+include %reldir%/bug-59617/module.mk
 include %reldir%/class-concat/module.mk
 include %reldir%/classdef/module.mk
 include %reldir%/classdef-multiple-inheritance/module.mk