diff libinterp/octave-value/ov-builtin.cc @ 23518:8744d4ed8fb4

provide DEFMETHOD macros Allow a reference to the interpreter object to be passed to built-in interpreter functions. * find-defun-files.sh: Adjust regexp pattern for finding built-in functions. * mk-builtins.pl: Handle DEFMETHOD variants of built-in function macros. * defun-int.h, defun.cc (install_builtin_function): New overloads for methods. * defun-int.h (FORWARD_DECLARE_METHODX, FORWARD_DECLARE_METHOD, DECLARE_METHODX, DECLARE_METHOD, DECLARE_STATIC_METHODX, DECLARE_STATIC_METHOD): New macros. * defun.h (DEFMETHOD, DEFMETHODX, DEFCONSTMETHOD): New macros. * libinterp/gendoc.pl: Likewise. * ov-builtin.h, ov-builtin.cc (octave_builtin::meth): New typedef. (octave_builtin::m): New data member. (octave_builtin::method): New function. (octave_builtin::octave_builtin, octave_builtin::call): Handle methods. * ov-dld-fcn.h, ov-dld-fcn.cc (octave_dld_function::create, octave_dld_function::octave_dld_function): Handle methods.
author John W. Eaton <jwe@octave.org>
date Fri, 19 May 2017 16:01:18 -0400
parents c6714ae1c06c
children 9f925aed7d1b
line wrap: on
line diff
--- a/libinterp/octave-value/ov-builtin.cc	Fri May 19 15:53:32 2017 -0400
+++ b/libinterp/octave-value/ov-builtin.cc	Fri May 19 16:01:18 2017 -0400
@@ -27,11 +27,12 @@
 #include "call-stack.h"
 #include "error.h"
 #include "errwarn.h"
-#include "ovl.h"
+#include "interpreter-private.h"
+#include "interpreter.h"
 #include "ov-builtin.h"
 #include "ov.h"
+#include "ovl.h"
 #include "profiler.h"
-#include "interpreter.h"
 #include "unwind-prot.h"
 
 
@@ -100,7 +101,15 @@
 
   profile_data_accumulator::enter<octave_builtin> block (profiler, *this);
 
-  retval = (*f) (args, nargout);
+  if (f)
+    retval = (*f) (args, nargout);
+  else
+    {
+      octave::interpreter& interp
+        = octave::__get_interpreter__ ("octave_builtin::call");
+
+      retval = (*m) (interp, args, nargout);
+    }
 
   // Do not allow null values to be returned from functions.
   // FIXME: perhaps true builtins should be allowed?
@@ -142,6 +151,12 @@
   return f;
 }
 
+octave_builtin::meth
+octave_builtin::method (void) const
+{
+  return m;
+}
+
 void
 octave_builtin::push_dispatch_class (const std::string& dispatch_type)
 {