diff options
author | Xavier Delacour <xavier.delacour@gmail.com> | 2008-03-24 22:33:55 +0000 |
---|---|---|
committer | Xavier Delacour <xavier.delacour@gmail.com> | 2008-03-24 22:33:55 +0000 |
commit | 7b1cab1554c632df79280f08fd673bccb880fffb (patch) | |
tree | e4b38a97b31514d5e89ab4ca7df4d8e80d95c585 | |
parent | 316a2decd7cf3f428af3cde0e5d923d073ea36d0 (diff) | |
download | swig-7b1cab1554c632df79280f08fd673bccb880fffb.tar.gz |
varargs fixes.
Added passthrough out typemaps for internal Octave types.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10320 626c5289-ae23-0410-ae9c-e8d60b6d4f22
-rw-r--r-- | Doc/Manual/Octave.html | 6 | ||||
-rw-r--r-- | Lib/octave/octrun.swg | 6 | ||||
-rw-r--r-- | Lib/octave/octtypemaps.swg | 22 | ||||
-rw-r--r-- | Source/Modules/octave.cxx | 5 |
4 files changed, 31 insertions, 8 deletions
diff --git a/Doc/Manual/Octave.html b/Doc/Manual/Octave.html index 69ed3a6c9..97e1be17c 100644 --- a/Doc/Manual/Octave.html +++ b/Doc/Manual/Octave.html @@ -626,11 +626,11 @@ and then used from Octave </p> <div class="targetlang"><pre> -octave:3> mul(4,3) +octave:1> mul(4,3) ans = 12 -octave:4> mul(4.2,3.6) +octave:2> mul(4.2,3.6) ans = 15.120 -octave:2> mul(3+4i,10+2i) +octave:3> mul(3+4i,10+2i) ans = 22 + 46i </pre></div> diff --git a/Lib/octave/octrun.swg b/Lib/octave/octrun.swg index 7876ae2c0..da8ae03f8 100644 --- a/Lib/octave/octrun.swg +++ b/Lib/octave/octrun.swg @@ -1,7 +1,7 @@ -SWIGRUNTIME bool SWIG_check_num_args(const char *func_name, int num_args, int max_args, int min_args) { - if (num_args > max_args) +SWIGRUNTIME bool SWIG_check_num_args(const char *func_name, int num_args, int max_args, int min_args, int varargs) { + if (num_args > max_args && !varargs) error("function %s takes at most %i arguments", func_name, max_args); else if (num_args < min_args) error("function %s requires at least %i arguments", func_name, max_args); @@ -549,7 +549,7 @@ namespace { octave_value_list args; if (!m->first || (!m->first->is_static() && !m->first->is_global())) args.append(as_value()); - if (skip < (int) ops.size() &&ops[skip] == '(' && ((m->first && m->first->method) || m->second.is_function() || m->second.is_function_handle())) { + if (skip < (int) ops.size() && ops[skip] == '(' && ((m->first && m->first->method) || m->second.is_function() || m->second.is_function_handle())) { args.append(*idx_it++); ++skip; sub_ovl = member_invoke(m, args, nargout); diff --git a/Lib/octave/octtypemaps.swg b/Lib/octave/octtypemaps.swg index f95005593..7934f90bd 100644 --- a/Lib/octave/octtypemaps.swg +++ b/Lib/octave/octtypemaps.swg @@ -50,9 +50,31 @@ for (int j=$argnum-1;j<args.length();++j) $1.append(args(j)); } +%typecheck(2000) (octave_value_list varargs,...) { + $1=1; +} + +%typemap(in) (const octave_value_list& varargs,...) (octave_value_list tmp) { + for (int j=$argnum-1;j<args.length();++j) + tmp.append(args(j)); + $1=&tmp; +} +%typecheck(2000) (const octave_value_list& varargs,...) { + $1=1; +} + %typemap(out) octave_value_list { _outp->append($1); } +%typemap(out,noblock=1) Octave_map { + $result=$1; +} +%typemap(out,noblock=1) NDArray { + $result=$1; +} +%typemap(out,noblock=1) Cell { + $result=$1; +} /* // Smart Pointers diff --git a/Source/Modules/octave.cxx b/Source/Modules/octave.cxx index f2fbf9c08..e049a6bba 100644 --- a/Source/Modules/octave.cxx +++ b/Source/Modules/octave.cxx @@ -365,7 +365,8 @@ public: int varargs = emit_isvarargs(l); char source[64]; - Printf(f->code, "if (!SWIG_check_num_args(\"%s\",args.length(),%i,%i)) " "{\n SWIG_fail;\n }\n", iname, num_arguments, num_required); + Printf(f->code, "if (!SWIG_check_num_args(\"%s\",args.length(),%i,%i,%i)) " + "{\n SWIG_fail;\n }\n", iname, num_arguments, num_required, varargs); if (constructor && num_arguments == 1 && num_required == 1) { if (Cmp(storage, "explicit") == 0) { @@ -602,7 +603,7 @@ public: String *setname = Swig_name_set(iname); Printf(setf->def, "static octave_value_list _wrap_%s(const octave_value_list& args,int nargout) {", setname); - Printf(setf->def, "if (!SWIG_check_num_args(\"%s_set\",args.length(),1,1)) return octave_value_list();", iname); + Printf(setf->def, "if (!SWIG_check_num_args(\"%s_set\",args.length(),1,1,0)) return octave_value_list();", iname); if (is_assignable(n)) { Setattr(n, "wrap:name", setname); if ((tm = Swig_typemap_lookup_new("varin", n, name, 0))) { |