Moved some of the common checks for methods/procs and arity

to rubyrun.swg, as they are useful even for not stl stuff.

Added a fragment trait for marking STL containers, but this
fragment cannot be attached due to SWIG %template limitations.




git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@9874 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Gonzalo Garramuno 2007-07-24 05:46:55 +00:00
commit bbd80cfa84
3 changed files with 100 additions and 34 deletions

View file

@ -26,40 +26,6 @@
%include rubyclasses.swg
%{
/* This function can be used to check whether a proc or method or similarly
callable function has been passed. Usually used in a %typecheck. */
SWIGINTERN
int SWIG_Ruby_isCallable( VALUE proc )
{
static VALUE call_id = rb_intern("call");
if ( rb_respond_to( proc, call_id ) )
return 1;
return 0;
}
/* This function can be used to check the arity (number of arguments)
a proc or method can take. Usually used in a %typecheck.
Valid arities will be that equal to minimal or those < 0
which indicate a variable number of parameters at the end.
*/
SWIGINTERN
int SWIG_Ruby_arity( VALUE proc, int minimal )
{
static VALUE arity_id = rb_intern("arity");
if ( rb_respond_to( proc, arity_id ) )
{
VALUE num = rb_funcall( proc, arity_id, 0 );
int arity = NUM2INT(num);
if ( arity < 0 && (arity+1) < -minimal ) return 1;
if ( arity == minimal ) return 1;
return 1;
}
return 0;
}
%}
namespace swig {