Fix #3433541 %typemap(in, numinputs=0) with 10+ arguments.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12849 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
5e4c27cdfd
commit
6d922f2ddd
5 changed files with 40 additions and 1 deletions
|
|
@ -420,6 +420,7 @@ CPP_TEST_CASES += \
|
|||
typemap_arrays \
|
||||
typemap_delete \
|
||||
typemap_global_scope \
|
||||
typemap_manyargs \
|
||||
typemap_namespace \
|
||||
typemap_ns_using \
|
||||
typemap_numinputs \
|
||||
|
|
|
|||
20
Examples/test-suite/typemap_manyargs.i
Normal file
20
Examples/test-suite/typemap_manyargs.i
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
%module typemap_manyargs
|
||||
|
||||
%typemap(in,numinputs=0) (int* a1, int* a2, int* a3, int* a4, int* a5, int* a6, int *a7, int *a8, int *a9, int *a10) (int temp1,int temp2,int temp3,int temp4,int temp5,int temp6,int temp7,int temp8, int temp9, int temp10)
|
||||
{
|
||||
$1 = &temp1; // the code generate for this is arg2 = &temp1;
|
||||
$2 = &temp2; // the code generate for this is arg3 = &temp2;
|
||||
$3 = &temp3; // and so on...
|
||||
$4 = &temp4;
|
||||
$5 = &temp5;
|
||||
$6 = &temp6;
|
||||
$7 = &temp7;
|
||||
$8 = &temp8;
|
||||
$9 = &temp9;
|
||||
$10 = &temp10; // the code generated for this is arg20 = &temp1, and arg20 does not exist.
|
||||
int $10_ptr = 0; // Was arg20_ptr
|
||||
}
|
||||
|
||||
%inline %{
|
||||
void my_c_function(char * filename,int* a1, int* a2, int* a3, int* a4, int* a5, int* a6, int *a7, int *a8, int *a9, int *a10) {}
|
||||
%}
|
||||
|
|
@ -294,6 +294,7 @@ extern char *DohStrchr(const DOHString_or_char *s1, int ch);
|
|||
#define DOH_REPLACE_FIRST 0x08
|
||||
#define DOH_REPLACE_ID_BEGIN 0x10
|
||||
#define DOH_REPLACE_ID_END 0x20
|
||||
#define DOH_REPLACE_NUMBER_END 0x40
|
||||
|
||||
#define Replaceall(s,t,r) DohReplace(s,t,r,DOH_REPLACE_ANY)
|
||||
#define Replaceid(s,t,r) DohReplace(s,t,r,DOH_REPLACE_ID)
|
||||
|
|
|
|||
|
|
@ -651,6 +651,21 @@ static char *match_identifier_end(char *base, char *s, char *token, int tokenlen
|
|||
return 0;
|
||||
}
|
||||
|
||||
static char *match_number_end(char *base, char *s, char *token, int tokenlen) {
|
||||
(void) base;
|
||||
while (s) {
|
||||
s = strstr(s, token);
|
||||
if (!s)
|
||||
return 0;
|
||||
if (isdigit((int) *(s + tokenlen))) {
|
||||
s += tokenlen;
|
||||
continue;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* replace_simple()
|
||||
*
|
||||
|
|
@ -899,6 +914,8 @@ static int String_replace(DOH *stro, const DOHString_or_char *token, const DOHSt
|
|||
return replace_simple(str, Char(token), Char(rep), flags, count, match_identifier_begin);
|
||||
} else if (flags & DOH_REPLACE_ID) {
|
||||
return replace_simple(str, Char(token), Char(rep), flags, count, match_identifier);
|
||||
} else if (flags & DOH_REPLACE_NUMBER_END) {
|
||||
return replace_simple(str, Char(token), Char(rep), flags, count, match_number_end);
|
||||
} else {
|
||||
return replace_simple(str, Char(token), Char(rep), flags, count, match_simple);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1178,7 +1178,7 @@ static int typemap_replace_vars(String *s, ParmList *locals, SwigType *type, Swi
|
|||
|
||||
/* Replace the bare $n variable */
|
||||
sprintf(var, "$%d", index);
|
||||
bare_substitution_count = Replace(s, var, lname, DOH_REPLACE_ANY);
|
||||
bare_substitution_count = Replace(s, var, lname, DOH_REPLACE_NUMBER_END);
|
||||
Delete(ftype);
|
||||
return bare_substitution_count;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue