[Go] Fix handling of C type "long" on 32-bit systems. It was broken

for C++ long& and for big-endian systems in general.
This commit is contained in:
Ian Lance Taylor 2014-01-27 17:49:35 -08:00
commit fa9a6d58ed
2 changed files with 8 additions and 2 deletions

View file

@ -48,14 +48,17 @@
const unsigned short &, const unsigned short &,
const int &, const int &,
const unsigned int &, const unsigned int &,
const long &,
const unsigned long &,
const long long &, const long long &,
const unsigned long long &, const unsigned long long &,
const float &, const float &,
const double & const double &
%{ $1 = ($1_ltype)&$input; %} %{ $1 = ($1_ltype)&$input; %}
%typemap(in) const long & ($*1_ltype temp),
const unsigned long & ($*1_ltype temp)
%{ temp = ($*1_ltype)$input;
$1 = ($1_ltype)&temp; %}
%typemap(out) bool, %typemap(out) bool,
char, char,
signed char, signed char,

View file

@ -4794,6 +4794,9 @@ private:
if (is_int) { if (is_int) {
ret = NewString("intgo "); ret = NewString("intgo ");
Append(ret, name); Append(ret, name);
} else if (is_int64) {
ret = NewString("long long ");
Append(ret, name);
} else { } else {
ret = SwigType_lstr(t, name); ret = SwigType_lstr(t, name);
} }