Mercurial > octave
diff build-aux/mk-builtins.pl @ 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 | 75a4b9a34999 |
children |
line wrap: on
line diff
--- a/build-aux/mk-builtins.pl Fri May 19 15:53:32 2017 -0400 +++ b/build-aux/mk-builtins.pl Fri May 19 16:01:18 2017 -0400 @@ -71,6 +71,11 @@ #include \"ovl.h\" +namespace octave +{ + class interpreter; +} + "; while ($file = shift (@ARGV)) @@ -88,33 +93,47 @@ while (<$fh>) { - if (/^[ \t]*DEF(CONSTFUN|UN)[ \t]*\( *([^ ,]*).*$/) + if (/^[ \t]*DEF(CONSTFUN|CONSTMETHOD|METHOD|UN)[ \t]*\( *([^ ,]*).*$/) { $name = "F$2"; + $is_method = ($1 eq "METHOD" || $1 eq "CONSTMETHOD"); } - elsif (/^[ \t]*DEFUNX[ \t]*\( *"[^"]*" *, *([^ ,]*).*$/) + elsif (/^[ \t]*DEF(METHOD|UN)X[ \t]*\( *"[^"]*" *, *([^ ,]*).*$/) { - $name = $1; + $name = $2; + $is_method = ($1 eq "METHOD"); } elsif ($defun_dld_are_built_in) { - if (/^[ \t]*DEFUN_DLD[ \t]*\( *([^ ,]*).*$/) + if (/^[ \t]*DEF(METHOD|UN)_DLD[ \t]*\( *([^ ,]*).*$/) { - $name = "F$1"; + $name = "F$2"; + $is_method = ($1 eq "METHOD"); } - elsif (/^[ \t]*DEFUNX_DLD[ \t]*\( *"[^"]*" *, *([^ ,]*).*$/) + elsif (/^[ \t]*DEF(METHOD|UN)X_DLD[ \t]*\( *"[^"]*" *, *([^ ,]*).*$/) { - $name = "$1"; + $name = "$2"; + $is_method = ($1 eq "METHOD"); } } if ($name) { - print "extern OCTINTERP_API octave_value_list + if ($is_method) + { + print "extern OCTINTERP_API octave_value_list +$name (octave::interpreter&, const octave_value_list& = octave_value_list (), int = 0); +"; + } + else + { + print "extern OCTINTERP_API octave_value_list $name (const octave_value_list& = octave_value_list (), int = 0); +"; + } -"; $name = ""; + $is_method = 0; } } } @@ -182,23 +201,23 @@ while ($line = <$fh>) { - if ($line =~ /^ *DEFUN *\( *([^ ,]*) *,.*$/) + if ($line =~ /^ *DEF(METHOD|UN) *\( *([^ ,]*) *,.*$/) { $type = "fun"; - $fname = "F$1"; - $name = "$1"; + $fname = "F$2"; + $name = "$2"; } - elsif ($line =~ /^ *DEFUNX *\( *"([^"]*)" *, *([^ ,]*) *,.*$/) + elsif ($line =~ /^ *DEF(METHOD|UN)X *\( *"([^"]*)" *, *([^ ,]*) *,.*$/) { $type = "fun"; - $fname = "$2"; - $name = "$1"; + $fname = "$3"; + $name = "$2"; } - elsif ($line =~ /^ *DEFCONSTFUN *\( *([^ ,]*) *,.*$/) + elsif ($line =~ /^ *DEFCONST(FUN|METHOD) *\( *([^ ,]*) *,.*$/) { $type = "fun"; - $fname = "F$1"; - $name = "$1"; + $fname = "F$2"; + $name = "$2"; $const = 1; } elsif ($line =~ /^ *DEFALIAS *\( *([^ ,]*) *, *([^ )]*) *\).*$/) @@ -209,17 +228,17 @@ } elsif ($defun_dld_are_built_in) { - if ($line =~ /^ *DEFUN_DLD *\( *([^ ,]*) *,.*$/) + if ($line =~ /^ *DEF(METHOD|UN)_DLD *\( *([^ ,]*) *,.*$/) { $type = "fun"; - $fname = "F$1"; - $name = "$1"; + $fname = "F$2"; + $name = "$2"; } - elsif ($line =~ /^ *DEFUNX_DLD *\( *"([^"]*)" *, *([^ ,]*) *,.*$/) + elsif ($line =~ /^ *DEF(METHOD|UN)X_DLD *\( *"([^"]*)" *, *([^ ,]*) *,.*$/) { $type = "fun"; - $fname = "$2"; - $name = "$1"; + $fname = "$3"; + $name = "$2"; } }