Mercurial > octave
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) {