diff --git a/Lib/perl5/perl5.swg b/Lib/perl5/perl5.swg index 71e2ce7ff..3e5da4f9a 100644 --- a/Lib/perl5/perl5.swg +++ b/Lib/perl5/perl5.swg @@ -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); } diff --git a/Lib/perl5/typemaps.i b/Lib/perl5/typemaps.i index 455e30f37..3341480ba 100644 --- a/Lib/perl5/typemaps.i +++ b/Lib/perl5/typemaps.i @@ -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++; diff --git a/Lib/ruby/rubyswigtype.swg b/Lib/ruby/rubyswigtype.swg index 72802ff75..c52846e5e 100644 --- a/Lib/ruby/rubyswigtype.swg +++ b/Lib/ruby/rubyswigtype.swg @@ -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 */ diff --git a/Lib/tcl/tcl8.swg b/Lib/tcl/tcl8.swg index c2a778abe..c6ff20749 100644 --- a/Lib/tcl/tcl8.swg +++ b/Lib/tcl/tcl8.swg @@ -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) { diff --git a/Lib/tcl/typemaps.i b/Lib/tcl/typemaps.i index bbdf1f484..ad8c4d86c 100644 --- a/Lib/tcl/typemaps.i +++ b/Lib/tcl/typemaps.i @@ -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); }