Mercurial > octave
diff libinterp/corefcn/defun-int.h @ 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 | 0af6dbede266 |
children | be7b884ac589 |
line wrap: on
line diff
--- a/libinterp/corefcn/defun-int.h Fri May 19 15:53:32 2017 -0400 +++ b/libinterp/corefcn/defun-int.h Fri May 19 16:01:18 2017 -0400 @@ -32,6 +32,11 @@ #include "symtab.h" #include "version.h" +namespace octave +{ + class interpreter; +} + class octave_value; extern OCTINTERP_API void print_usage (void); @@ -46,11 +51,21 @@ bool can_hide_function = true); extern OCTINTERP_API void +install_builtin_function (octave_builtin::meth m, const std::string& name, + const std::string& file, const std::string& doc, + bool can_hide_function = true); + +extern OCTINTERP_API void install_dld_function (octave_dld_function::fcn f, const std::string& name, const octave::dynamic_library& shl, const std::string& doc, bool relative = false); extern OCTINTERP_API void +install_dld_function (octave_dld_function::meth m, const std::string& name, + const octave::dynamic_library& shl, const std::string& doc, + bool relative = false); + +extern OCTINTERP_API void install_mex_function (void *fptr, bool fmex, const std::string& name, const octave::dynamic_library& shl, bool relative = false); @@ -101,22 +116,45 @@ extern OCTAVE_EXPORT octave_value_list \ name (const octave_value_list&, int) +#define FORWARD_DECLARE_METHODX(name) \ + extern OCTAVE_EXPORT octave_value_list \ + name (octave::interpreter&, const octave_value_list&, int) + #define FORWARD_DECLARE_FUN(name) \ FORWARD_DECLARE_FUNX (F ## name) +#define FORWARD_DECLARE_METHOD(name) \ + FORWARD_DECLARE_METHODX (F ## name) + #define DECLARE_FUNX(name, args_name, nargout_name) \ OCTAVE_EXPORT octave_value_list \ name (const octave_value_list& args_name, int nargout_name) +#define DECLARE_METHODX(name, interp_name, args_name, nargout_name) \ + OCTAVE_EXPORT octave_value_list \ + name (octave::interpreter& interp_name, \ + const octave_value_list& args_name, int nargout_name) + #define DECLARE_FUN(name, args_name, nargout_name) \ DECLARE_FUNX (F ## name, args_name, nargout_name) +#define DECLARE_METHOD(name, interp_name, args_name, nargout_name) \ + DECLARE_METHODX (F ## name, interp_name, args_name, nargout_name) + #define DECLARE_STATIC_FUNX(name, args_name, nargout_name) \ static octave_value_list \ name (const octave_value_list& args_name, int nargout_name) +#define DECLARE_STATIC_METHODX(name, interp_name, args_name, nargout_name) \ + static octave_value_list \ + name (octave::interpreter& interp_name, \ + const octave_value_list& args_name, int nargout_name) + #define DECLARE_STATIC_FUN(name, args_name, nargout_name) \ - DECLARE_FUNX (F ## name, args_name, nargout_name) + DECLARE_STATIC_FUNX (F ## name, args_name, nargout_name) + +#define DECLARE_STATIC_METHOD(name, interp_name, args_name, nargout_name) \ + DECLARE_STATIC_METHODX (F ## name, interp_name, args_name, nargout_name) // Define the code that will be used to insert the new function into // the symbol table. We look for this name instead of the actual