-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[GO] Multi-arguments typemaps error #749
Comments
Same Problem Just modified the -int gcdmain(int argc, char *argv[]) {
+int gcdmain(char *argv[], int argc) {
int x,y;
if (argc != 3) {
printf("usage: gcd x y\n");
return -1;
}
x = atoi(argv[1]);
y = atoi(argv[2]);
printf("gcd(%d,%d) = %d\n", x,y,gcd(x,y));
return 0;
} and modified the example.i %typemap(gotype) (char *argv[], int argc) "[]string"
// typemap(gotype) (int argc, char *argv[]) "[]string"
// %typemap(in) (int argc, char *argv[])
%typemap(in) (char *argv[], int argc)
%{
{
int i;
_gostring_* a;
$2= $input.len;
a = (_gostring_*) $input.array;
$1 = (char **) malloc (($2 + 1) * sizeof (char *));
for (i = 0; i < $2; i++) {
_gostring_ *ps = &a[i];
$1[i] = (char *) ps->p;
}
$1[i] = NULL;
}
%}
%typemap(argout) (char *argv[], int argc) "" /* override char *[] default */
// %typemap(argout) (int argc, char *argv[]) "" /* override char *[] default */
// %typemap(freearg) (int argc, char *argv[])
%typemap(freearg) (char *argv[], int argc)
%{
free($1);
%}
// extern int gcdmain(int argc, char *argv[]);
extern int gcdmain(char *argv[], int argc); after swig compiled, we get intgo _wrap_gcdmain_example_e90192b24008a4a7(_gostring_* _swig_go_0) {
// Something
} before we reverse the params in function intgo _wrap_gcdmain_example_a0193b9710dcf37d(_goslice_ _swig_go_0) {
// Something
} Strangely, if we convert we try to add
|
@ianlancetaylor could you look at this one? I'm not familiar enough with go to spot the problem here. |
The original example still seems to show the problem exists in current git master:
@ianlancetaylor Please can you take a look? |
Fixed. |
test.i
show_a ----> Right
typedef _goslice_ swig_type_1;
show_b----> Error
typedef _gostring_* swig_type_2;
I'm sorry, my English is very limited.
The text was updated successfully, but these errors were encountered: