# HG changeset patch # User John W. Eaton # Date 1347935738 14400 # Node ID 2e5ba861898f386c3aef44a52e83a99a805fcd93 # Parent 231d8d3b82257852f001b00d0a224b4680181b6a default arg values for DEFUN functions * defun-int.h (DECLARE_FUNXX, DECLARE_FUNX_NO_DEFAULTS, DECLARE_FUN_NO_DEFAULTS): New macros. (DECLARE_FUNX): Define using DECLARE_FUNXX. Provide default argument values. * defun-dld.h (DEFUN_DLD, DEFUNX_DLD): Use DECLARE_FUNX_NO_DEFAULTS instead of DECLARE_FUNX. diff --git a/libinterp/interp-core/defun-dld.h b/libinterp/interp-core/defun-dld.h --- a/libinterp/interp-core/defun-dld.h +++ b/libinterp/interp-core/defun-dld.h @@ -57,14 +57,14 @@ #else #define DEFUN_DLD(name, args_name, nargout_name, doc) \ - DECLARE_FUN (name, args_name, nargout_name); \ + DECLARE_FUN_NO_DEFAULTS (name, args_name, nargout_name); \ DEFINE_FUN_INSTALLER_FUN (name, doc) \ - DECLARE_FUN (name, args_name, nargout_name) + DECLARE_FUN_NO_DEFAULTS (name, args_name, nargout_name) #define DEFUNX_DLD(name, fname, gname, args_name, nargout_name, doc) \ - DECLARE_FUNX (fname, args_name, nargout_name); \ + DECLARE_FUNX_NO_DEFAULTS (fname, args_name, nargout_name); \ DEFINE_FUNX_INSTALLER_FUN (name, fname, gname, doc) \ - DECLARE_FUNX (fname, args_name, nargout_name) + DECLARE_FUNX_NO_DEFAULTS (fname, args_name, nargout_name) #endif diff --git a/libinterp/interp-core/defun-int.h b/libinterp/interp-core/defun-int.h --- a/libinterp/interp-core/defun-int.h +++ b/libinterp/interp-core/defun-int.h @@ -77,13 +77,23 @@ extern OCTINTERP_API void defun_isargout (int, int, bool *); +#define DECLARE_FUNXX(name, args_decl, nargout_decl) \ + OCTAVE_EXPORT octave_value_list name (args_decl, nargout_decl) + #define DECLARE_FUNX(name, args_name, nargout_name) \ - OCTAVE_EXPORT octave_value_list \ - name (const octave_value_list& args_name, int nargout_name) + DECLARE_FUNXX (name, \ + const octave_value_list& args_name = octave_value_list (), \ + int nargout_name = 0) + +#define DECLARE_FUNX_NO_DEFAULTS(name, args_name, nargout_name) \ + DECLARE_FUNXX (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_FUN_NO_DEFAULTS(name, args_name, nargout_name) \ + DECLARE_FUNX_NO_DEFAULTS (F ## 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 // function so that we can easily install the doc std::string too.