add %typemap(varin) SWIGTYPE[], fix some typemaps to be safe for %apply

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6423 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2004-10-18 00:38:44 +00:00
commit 9d9580639a
5 changed files with 27 additions and 12 deletions

View file

@ -207,14 +207,14 @@
%typemap(out) const long long & {
char temp[256];
sprintf(temp,"%lld", *($1));
sprintf(temp,"%lld", (long long)*($1));
ST(argvi) = sv_newmortal();
sv_setpv((SV*)ST(argvi++), temp);
}
%typemap(out) const unsigned long long & {
char temp[256];
sprintf(temp,"%llu", *($1));
sprintf(temp,"%llu", (unsigned long long)*($1));
ST(argvi) = sv_newmortal();
sv_setpv((SV*)ST(argvi++), temp);
}
@ -242,9 +242,11 @@
%typemap(varin) unsigned long long "$1 = ($1_ltype) strtoull(SvPV($input, PL_na), 0, 0);";
%typemap(varin) SWIGTYPE * {
void *temp;
if (SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor,0) < 0) {
croak("Type error in argument $argnum of $symname. Expected $1_mangle");
}
$1 = *($1_ltype) temp;
}
%typemap(varin) SWIGTYPE [ANY] {
@ -257,6 +259,11 @@
for (i = 0; i < $1_size; i++) b[i] = temp[i];
}
%typemap(varin,warning="462:Unable to set dimensionless array variable") SWIGTYPE []
{
croak("C/C++ variable '$name' is read-only");
}
%typemap(varin) SWIGTYPE & {
void *temp;
if (SWIG_ConvertPtr($input, (void **) &temp, $1_descriptor,0) < 0) {
@ -385,13 +392,13 @@
%typemap(varout) long long {
char temp[256];
sprintf(temp,"%lld",$1);
sprintf(temp,"%lld",(long long)$1);
sv_setpv((SV *) $result, temp);
}
%typemap(varout) unsigned long long {
char temp[256];
sprintf(temp,"%llu",$1);
sprintf(temp,"%llu",(unsigned long long)$1);
sv_setpv((SV *) $result, temp);
}

View file

@ -206,7 +206,7 @@ output values.
if (argvi >= items) {
EXTEND(sp,1);
}
sprintf(temp,"%lld", *($1));
sprintf(temp,"%lld", (long long)*($1));
$result = sv_newmortal();
sv_setpv($result,temp);
argvi++;
@ -217,7 +217,7 @@ output values.
if (argvi >= items) {
EXTEND(sp,1);
}
sprintf(temp,"%llu", *($1));
sprintf(temp,"%llu", (unsigned long long)*($1));
$result = sv_newmortal();
sv_setpv($result,temp);
argvi++;

View file

@ -64,6 +64,10 @@
for (ii = 0; ii < $1_size; ii++) b[ii] = *(($1_basetype *) temp + ii);
}
%typemap(varin,warning="462: Unable to set dimensionless array variable") SWIGTYPE [] {
rb_raise(rb_eTypeError, "C/C++ variable '$name' is readonly");
}
/* Typemaps for pointers. Note: the SWIG run-time type checker works
even if a pointer happens to be mapped to a Ruby class */

View file

@ -236,14 +236,14 @@
%typemap(out) const long long & {
char temp[256];
sprintf(temp,"%lld", *($1));
sprintf(temp,"%lld", (long long)*($1));
Tcl_SetObjResult(interp,Tcl_NewStringObj(temp,-1));
}
%typemap(out) const unsigned long long &
{
char temp[256];
sprintf(temp,"%llu", *($1));
sprintf(temp,"%llu", (unsigned long long)*($1));
Tcl_SetObjResult(interp,Tcl_NewStringObj(temp,-1));
}
@ -258,13 +258,13 @@
%typemap(varout) long long {
char temp[256];
sprintf(temp,"%lld", $1);
sprintf(temp,"%lld", (long long)$1);
$result = Tcl_NewStringObj(temp,-1);
}
%typemap(varout) unsigned long long {
char temp[256];
sprintf(temp,"%llu", $1);
sprintf(temp,"%llu", (unsigned long long)$1);
$result = Tcl_NewStringObj(temp,-1);
}
@ -381,6 +381,10 @@
}
}
%typemap(varin,warning="462: Unable to set dimensionless array variable") SWIGTYPE [] {
return (char*)"Variable $symname is read-only.";
}
%typemap(varin) void * {
void *temp;
if (SWIG_ConvertPtr($input,&temp,0, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN) != TCL_OK) {

View file

@ -274,7 +274,7 @@ output values.
{
char temp[256];
Tcl_Obj *o;
sprintf(temp,"%lld",*($1));
sprintf(temp,"%lld",(long long)*($1));
o = Tcl_NewStringObj(temp,-1);
Tcl_ListObjAppendElement(interp,Tcl_GetObjResult(interp),o);
}
@ -283,7 +283,7 @@ output values.
{
char temp[256];
Tcl_Obj *o;
sprintf(temp,"%llu",*($1));
sprintf(temp,"%llu",(unsigned long long)*($1));
o = Tcl_NewStringObj(temp,-1);
Tcl_ListObjAppendElement(interp,Tcl_GetObjResult(interp),o);
}