Merge branch 'fix-ignore-param'
Fix for wrongly renaming parameters to "$ignore" in Python. See https://github.com/swig/swig/pull/1462
This commit is contained in:
commit
ddf4bbe112
3 changed files with 35 additions and 5 deletions
|
|
@ -8,12 +8,15 @@
|
||||||
|
|
||||||
%typemap(freearg) char* a ""; // ensure freearg is not generated (needed for Java at least)
|
%typemap(freearg) char* a ""; // ensure freearg is not generated (needed for Java at least)
|
||||||
|
|
||||||
|
%ignore unignorable;
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
// global function tests
|
// global function tests
|
||||||
char* jaguar(char* a, int b, double c) { return a; }
|
char* jaguar(char* a, int b, double c) { return a; }
|
||||||
int lotus(char* aa, int bb, double cc) { return bb; }
|
int lotus(char* aa, int bb, double cc) { return bb; }
|
||||||
double tvr(char* aaa, int bbb, double ccc) { return ccc; }
|
double tvr(char* aaa, int bbb, double ccc) { return ccc; }
|
||||||
int ferrari(int bb) { return bb; }
|
int ferrari(int bb) { return bb; }
|
||||||
|
int fiat(int unignorable) { return unignorable; }
|
||||||
|
|
||||||
// member function tests
|
// member function tests
|
||||||
struct SportsCars {
|
struct SportsCars {
|
||||||
|
|
@ -21,6 +24,7 @@ struct SportsCars {
|
||||||
int astonmartin(char* aa, int bb, double cc) { return bb; }
|
int astonmartin(char* aa, int bb, double cc) { return bb; }
|
||||||
double bugatti(char* aaa, int bbb, double ccc) { return ccc; }
|
double bugatti(char* aaa, int bbb, double ccc) { return ccc; }
|
||||||
int lamborghini(int bb) { return bb; }
|
int lamborghini(int bb) { return bb; }
|
||||||
|
int maseratti(int unignorable) { return unignorable; }
|
||||||
};
|
};
|
||||||
|
|
||||||
// constructor tests
|
// constructor tests
|
||||||
|
|
|
||||||
23
Examples/test-suite/python/ignore_parameter_runme.py
Normal file
23
Examples/test-suite/python/ignore_parameter_runme.py
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
from ignore_parameter import *
|
||||||
|
|
||||||
|
def check(a, b):
|
||||||
|
if a != b:
|
||||||
|
raise RuntimeError('"%s" != "%s"' % (a, b))
|
||||||
|
|
||||||
|
check(jaguar(200, 0), "hello")
|
||||||
|
check(lotus("foo", 1), 101)
|
||||||
|
check(tvr("bar", 2), 8.8)
|
||||||
|
check(ferrari(), 101)
|
||||||
|
check(fiat(17), 17)
|
||||||
|
|
||||||
|
car = SportsCars()
|
||||||
|
check(car.daimler(200, 0), "hello")
|
||||||
|
check(car.astonmartin("foo", 1), 101)
|
||||||
|
check(car.bugatti("bar", 2), 8.8)
|
||||||
|
check(car.lamborghini(), 101)
|
||||||
|
check(car.maseratti(289), 289)
|
||||||
|
|
||||||
|
MiniCooper(200, 0)
|
||||||
|
MorrisMinor("baz", 0)
|
||||||
|
FordAnglia("quux", 200)
|
||||||
|
AustinAllegro()
|
||||||
|
|
@ -1377,12 +1377,15 @@ void Swig_name_rename_add(String *prefix, String *name, SwigType *decl, Hash *ne
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Create a name applying rename/namewarn if needed */
|
/* Create a name for the given node applying rename/namewarn if needed */
|
||||||
static String *apply_rename(String *newname, int fullname, String *prefix, String *name) {
|
static String *apply_rename(Node* n, String *newname, int fullname, String *prefix, String *name) {
|
||||||
String *result = 0;
|
String *result = 0;
|
||||||
if (newname && Len(newname)) {
|
if (newname && Len(newname)) {
|
||||||
if (Strcmp(newname, "$ignore") == 0) {
|
if (Strcmp(newname, "$ignore") == 0) {
|
||||||
result = Copy(newname);
|
/* $ignore doesn't apply to parameters and while it's rare to explicitly write %ignore directives for them they could be caught by a wildcard ignore using
|
||||||
|
regex match, just ignore the attempt to ignore them in this case */
|
||||||
|
if (!Equal(nodeType(n), "parm"))
|
||||||
|
result = Copy(newname);
|
||||||
} else {
|
} else {
|
||||||
char *cnewname = Char(newname);
|
char *cnewname = Char(newname);
|
||||||
if (cnewname) {
|
if (cnewname) {
|
||||||
|
|
@ -1480,7 +1483,7 @@ String *Swig_name_make(Node *n, String *prefix, const_String_or_char_ptr cname,
|
||||||
if (rn) {
|
if (rn) {
|
||||||
String *newname = Getattr(rn, "name");
|
String *newname = Getattr(rn, "name");
|
||||||
int fullname = GetFlag(rn, "fullname");
|
int fullname = GetFlag(rn, "fullname");
|
||||||
result = apply_rename(newname, fullname, prefix, name);
|
result = apply_rename(n, newname, fullname, prefix, name);
|
||||||
}
|
}
|
||||||
if (result && !Equal(result, name)) {
|
if (result && !Equal(result, name)) {
|
||||||
/* operators in C++ allow aliases, we look for them */
|
/* operators in C++ allow aliases, we look for them */
|
||||||
|
|
@ -1504,7 +1507,7 @@ String *Swig_name_make(Node *n, String *prefix, const_String_or_char_ptr cname,
|
||||||
int fullname = GetFlag(wrn, "fullname");
|
int fullname = GetFlag(wrn, "fullname");
|
||||||
if (result)
|
if (result)
|
||||||
Delete(result);
|
Delete(result);
|
||||||
result = apply_rename(rename, fullname, prefix, name);
|
result = apply_rename(n, rename, fullname, prefix, name);
|
||||||
if ((msg) && (Len(msg))) {
|
if ((msg) && (Len(msg))) {
|
||||||
if (!Getmeta(nname, "already_warned")) {
|
if (!Getmeta(nname, "already_warned")) {
|
||||||
if (n) {
|
if (n) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue