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 & { %typemap(out) const long long & {
char temp[256]; char temp[256];
sprintf(temp,"%lld", *($1)); sprintf(temp,"%lld", (long long)*($1));
ST(argvi) = sv_newmortal(); ST(argvi) = sv_newmortal();
sv_setpv((SV*)ST(argvi++), temp); sv_setpv((SV*)ST(argvi++), temp);
} }
%typemap(out) const unsigned long long & { %typemap(out) const unsigned long long & {
char temp[256]; char temp[256];
sprintf(temp,"%llu", *($1)); sprintf(temp,"%llu", (unsigned long long)*($1));
ST(argvi) = sv_newmortal(); ST(argvi) = sv_newmortal();
sv_setpv((SV*)ST(argvi++), temp); 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) unsigned long long "$1 = ($1_ltype) strtoull(SvPV($input, PL_na), 0, 0);";
%typemap(varin) SWIGTYPE * { %typemap(varin) SWIGTYPE * {
void *temp;
if (SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor,0) < 0) { if (SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor,0) < 0) {
croak("Type error in argument $argnum of $symname. Expected $1_mangle"); croak("Type error in argument $argnum of $symname. Expected $1_mangle");
} }
$1 = *($1_ltype) temp;
} }
%typemap(varin) SWIGTYPE [ANY] { %typemap(varin) SWIGTYPE [ANY] {
@ -257,6 +259,11 @@
for (i = 0; i < $1_size; i++) b[i] = temp[i]; 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 & { %typemap(varin) SWIGTYPE & {
void *temp; void *temp;
if (SWIG_ConvertPtr($input, (void **) &temp, $1_descriptor,0) < 0) { if (SWIG_ConvertPtr($input, (void **) &temp, $1_descriptor,0) < 0) {
@ -385,13 +392,13 @@
%typemap(varout) long long { %typemap(varout) long long {
char temp[256]; char temp[256];
sprintf(temp,"%lld",$1); sprintf(temp,"%lld",(long long)$1);
sv_setpv((SV *) $result, temp); sv_setpv((SV *) $result, temp);
} }
%typemap(varout) unsigned long long { %typemap(varout) unsigned long long {
char temp[256]; char temp[256];
sprintf(temp,"%llu",$1); sprintf(temp,"%llu",(unsigned long long)$1);
sv_setpv((SV *) $result, temp); sv_setpv((SV *) $result, temp);
} }

View file

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

View file

@ -64,6 +64,10 @@
for (ii = 0; ii < $1_size; ii++) b[ii] = *(($1_basetype *) temp + ii); 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 /* Typemaps for pointers. Note: the SWIG run-time type checker works
even if a pointer happens to be mapped to a Ruby class */ even if a pointer happens to be mapped to a Ruby class */

View file

@ -236,14 +236,14 @@
%typemap(out) const long long & { %typemap(out) const long long & {
char temp[256]; char temp[256];
sprintf(temp,"%lld", *($1)); sprintf(temp,"%lld", (long long)*($1));
Tcl_SetObjResult(interp,Tcl_NewStringObj(temp,-1)); Tcl_SetObjResult(interp,Tcl_NewStringObj(temp,-1));
} }
%typemap(out) const unsigned long long & %typemap(out) const unsigned long long &
{ {
char temp[256]; char temp[256];
sprintf(temp,"%llu", *($1)); sprintf(temp,"%llu", (unsigned long long)*($1));
Tcl_SetObjResult(interp,Tcl_NewStringObj(temp,-1)); Tcl_SetObjResult(interp,Tcl_NewStringObj(temp,-1));
} }
@ -258,13 +258,13 @@
%typemap(varout) long long { %typemap(varout) long long {
char temp[256]; char temp[256];
sprintf(temp,"%lld", $1); sprintf(temp,"%lld", (long long)$1);
$result = Tcl_NewStringObj(temp,-1); $result = Tcl_NewStringObj(temp,-1);
} }
%typemap(varout) unsigned long long { %typemap(varout) unsigned long long {
char temp[256]; char temp[256];
sprintf(temp,"%llu", $1); sprintf(temp,"%llu", (unsigned long long)$1);
$result = Tcl_NewStringObj(temp,-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 * { %typemap(varin) void * {
void *temp; void *temp;
if (SWIG_ConvertPtr($input,&temp,0, SWIG_POINTER_EXCEPTION | SWIG_POINTER_DISOWN) != TCL_OK) { 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]; char temp[256];
Tcl_Obj *o; Tcl_Obj *o;
sprintf(temp,"%lld",*($1)); sprintf(temp,"%lld",(long long)*($1));
o = Tcl_NewStringObj(temp,-1); o = Tcl_NewStringObj(temp,-1);
Tcl_ListObjAppendElement(interp,Tcl_GetObjResult(interp),o); Tcl_ListObjAppendElement(interp,Tcl_GetObjResult(interp),o);
} }
@ -283,7 +283,7 @@ output values.
{ {
char temp[256]; char temp[256];
Tcl_Obj *o; Tcl_Obj *o;
sprintf(temp,"%llu",*($1)); sprintf(temp,"%llu",(unsigned long long)*($1));
o = Tcl_NewStringObj(temp,-1); o = Tcl_NewStringObj(temp,-1);
Tcl_ListObjAppendElement(interp,Tcl_GetObjResult(interp),o); Tcl_ListObjAppendElement(interp,Tcl_GetObjResult(interp),o);
} }