Fix C code where a typedef name was used for constructor and destructor names in %extend. Deprecate use of typedef names for constructor and destructor names going forwards.
This commit is contained in:
parent
2435b98a24
commit
d1b40b468b
6 changed files with 65 additions and 2 deletions
|
|
@ -527,6 +527,8 @@ example.i(4) : Syntax error in input.
|
||||||
<li>519. %template() contains no name. Template method ignored: <em>declaration</em>
|
<li>519. %template() contains no name. Template method ignored: <em>declaration</em>
|
||||||
<li>520. <em>Base/Derived</em> class '<em>classname1</em>' of '<em>classname2</em>' is not similarly marked as a smart pointer.
|
<li>520. <em>Base/Derived</em> class '<em>classname1</em>' of '<em>classname2</em>' is not similarly marked as a smart pointer.
|
||||||
<li>521. Illegal destructor name <em>name</em>. Ignored.
|
<li>521. Illegal destructor name <em>name</em>. Ignored.
|
||||||
|
<li>522. Use of an illegal constructor name '<em>name</em>' in %extend is deprecated, the constructor name should be '<em>name</em>'.
|
||||||
|
<li>523. Use of an illegal destructor name '<em>name</em>' in %extend is deprecated, the destructor name should be '<em>name</em>'.
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<H3><a name="Warnings_nn15"></a>14.9.6 Language module specific (700-899) </H3>
|
<H3><a name="Warnings_nn15"></a>14.9.6 Language module specific (700-899) </H3>
|
||||||
|
|
|
||||||
|
|
@ -190,7 +190,13 @@ swig_apply_nargs.i:6: Error: Can't apply (char *str,int len) to (int x). Number
|
||||||
|
|
||||||
:::::::::::::::::::::::::::::::: swig_extend.i :::::::::::::::::::::::::::::::::::
|
:::::::::::::::::::::::::::::::: swig_extend.i :::::::::::::::::::::::::::::::::::
|
||||||
swig_extend.i:19: Warning 326: Deprecated %extend name used - the struct name 'StructBName' should be used instead of the typedef name 'StructB'.
|
swig_extend.i:19: Warning 326: Deprecated %extend name used - the struct name 'StructBName' should be used instead of the typedef name 'StructB'.
|
||||||
|
swig_extend.i:45: Warning 326: Deprecated %extend name used - the struct name 'stru_struct' should be used instead of the typedef name 'stru'.
|
||||||
|
swig_extend.i:56: Warning 326: Deprecated %extend name used - the union name 'uni_union' should be used instead of the typedef name 'uni'.
|
||||||
swig_extend.i:34: Warning 303: %extend defined for an undeclared class StructDName.
|
swig_extend.i:34: Warning 303: %extend defined for an undeclared class StructDName.
|
||||||
|
swig_extend.i:50: Warning 522: Use of an illegal constructor name 'stru' in %extend is deprecated, the constructor name should be 'stru_struct'.
|
||||||
|
swig_extend.i:53: Warning 523: Use of an illegal destructor name 'stru' in %extend is deprecated, the destructor name should be 'stru_struct'.
|
||||||
|
swig_extend.i:57: Warning 522: Use of an illegal constructor name 'uni' in %extend is deprecated, the constructor name should be 'uni_union'.
|
||||||
|
swig_extend.i:58: Warning 523: Use of an illegal destructor name 'uni' in %extend is deprecated, the destructor name should be 'uni_union'.
|
||||||
|
|
||||||
:::::::::::::::::::::::::::::::: swig_identifier.i :::::::::::::::::::::::::::::::::::
|
:::::::::::::::::::::::::::::::: swig_identifier.i :::::::::::::::::::::::::::::::::::
|
||||||
swig_identifier.i:5: Warning 503: Can't wrap 'foo bar' unless renamed to a valid identifier.
|
swig_identifier.i:5: Warning 503: Can't wrap 'foo bar' unless renamed to a valid identifier.
|
||||||
|
|
|
||||||
|
|
@ -33,3 +33,28 @@ typedef struct StructD StructDName;
|
||||||
void method() {}
|
void method() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct stru_struct {
|
||||||
|
int bar;
|
||||||
|
} stru;
|
||||||
|
typedef union uni_union {
|
||||||
|
int un1;
|
||||||
|
double un2;
|
||||||
|
} uni;
|
||||||
|
|
||||||
|
%extend stru {
|
||||||
|
stru() {
|
||||||
|
stru* s = (stru*)malloc(sizeof(stru));
|
||||||
|
s->bar = 11;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
~stru() {
|
||||||
|
free($self);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
%extend uni {
|
||||||
|
uni() { return 0; }
|
||||||
|
~uni() { free($self); }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
%warnfilter(SWIGWARN_PARSE_EXTEND_NAME) Space::tagCStruct;
|
%warnfilter(SWIGWARN_PARSE_EXTEND_NAME) Space::tagCStruct;
|
||||||
%warnfilter(SWIGWARN_PARSE_EXTEND_NAME) tagEStruct;
|
%warnfilter(SWIGWARN_PARSE_EXTEND_NAME) tagEStruct;
|
||||||
|
%warnfilter(SWIGWARN_LANG_EXTEND_CONSTRUCTOR) Space::tagCStruct::CStruct;
|
||||||
|
%warnfilter(SWIGWARN_LANG_EXTEND_DESTRUCTOR) Space::tagCStruct::~CStruct;
|
||||||
|
%warnfilter(SWIGWARN_LANG_EXTEND_CONSTRUCTOR) tagEStruct::EStruct;
|
||||||
|
%warnfilter(SWIGWARN_LANG_EXTEND_DESTRUCTOR) tagEStruct::~EStruct;
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
int globalVar = 0;
|
int globalVar = 0;
|
||||||
|
|
|
||||||
|
|
@ -197,6 +197,8 @@
|
||||||
#define WARN_LANG_TEMPLATE_METHOD_IGNORE 519
|
#define WARN_LANG_TEMPLATE_METHOD_IGNORE 519
|
||||||
#define WARN_LANG_SMARTPTR_MISSING 520
|
#define WARN_LANG_SMARTPTR_MISSING 520
|
||||||
#define WARN_LANG_ILLEGAL_DESTRUCTOR 521
|
#define WARN_LANG_ILLEGAL_DESTRUCTOR 521
|
||||||
|
#define WARN_LANG_EXTEND_CONSTRUCTOR 522
|
||||||
|
#define WARN_LANG_EXTEND_DESTRUCTOR 523
|
||||||
|
|
||||||
/* -- Reserved (600-799) -- */
|
/* -- Reserved (600-799) -- */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2631,10 +2631,22 @@ int Language::constructorDeclaration(Node *n) {
|
||||||
if (!Equal(actual_name, expected_name) && !(Getattr(n, "template"))) {
|
if (!Equal(actual_name, expected_name) && !(Getattr(n, "template"))) {
|
||||||
bool illegal_name = true;
|
bool illegal_name = true;
|
||||||
if (Extend) {
|
if (Extend) {
|
||||||
// SWIG extension - allow typedef names as destructor name in %extend - an unnamed struct declared with a typedef can thus be given a 'destructor'.
|
// Check for typedef names used as a constructor name in %extend. This is deprecated except for anonymous
|
||||||
|
// typedef structs which have had their symbol names adjusted to the typedef name in the parser.
|
||||||
SwigType *name_resolved = SwigType_typedef_resolve_all(actual_name);
|
SwigType *name_resolved = SwigType_typedef_resolve_all(actual_name);
|
||||||
SwigType *expected_name_resolved = SwigType_typedef_resolve_all(expected_name);
|
SwigType *expected_name_resolved = SwigType_typedef_resolve_all(expected_name);
|
||||||
|
|
||||||
|
if (!CPlusPlus) {
|
||||||
|
if (Strncmp(name_resolved, "struct ", 7) == 0)
|
||||||
|
Replace(name_resolved, "struct ", "", DOH_REPLACE_FIRST);
|
||||||
|
else if (Strncmp(name_resolved, "union ", 6) == 0)
|
||||||
|
Replace(name_resolved, "union ", "", DOH_REPLACE_FIRST);
|
||||||
|
}
|
||||||
|
|
||||||
illegal_name = !Equal(name_resolved, expected_name_resolved);
|
illegal_name = !Equal(name_resolved, expected_name_resolved);
|
||||||
|
if (!illegal_name)
|
||||||
|
Swig_warning(WARN_LANG_EXTEND_CONSTRUCTOR, input_file, line_number, "Use of an illegal constructor name '%s' in %%extend is deprecated, the constructor name should be '%s'.\n",
|
||||||
|
SwigType_str(Swig_scopename_last(actual_name), 0), SwigType_str(Swig_scopename_last(expected_name), 0));
|
||||||
Delete(name_resolved);
|
Delete(name_resolved);
|
||||||
Delete(expected_name_resolved);
|
Delete(expected_name_resolved);
|
||||||
}
|
}
|
||||||
|
|
@ -2770,10 +2782,22 @@ int Language::destructorDeclaration(Node *n) {
|
||||||
if (!Equal(actual_name, expected_name) && !(Getattr(n, "template"))) {
|
if (!Equal(actual_name, expected_name) && !(Getattr(n, "template"))) {
|
||||||
bool illegal_name = true;
|
bool illegal_name = true;
|
||||||
if (Extend) {
|
if (Extend) {
|
||||||
// SWIG extension - allow typedef names as destructor name in %extend - an unnamed struct declared with a typedef can thus be given a 'destructor'.
|
// Check for typedef names used as a destructor name in %extend. This is deprecated except for anonymous
|
||||||
|
// typedef structs which have had their symbol names adjusted to the typedef name in the parser.
|
||||||
SwigType *name_resolved = SwigType_typedef_resolve_all(actual_name);
|
SwigType *name_resolved = SwigType_typedef_resolve_all(actual_name);
|
||||||
SwigType *expected_name_resolved = SwigType_typedef_resolve_all(expected_name);
|
SwigType *expected_name_resolved = SwigType_typedef_resolve_all(expected_name);
|
||||||
|
|
||||||
|
if (!CPlusPlus) {
|
||||||
|
if (Strncmp(name_resolved, "struct ", 7) == 0)
|
||||||
|
Replace(name_resolved, "struct ", "", DOH_REPLACE_FIRST);
|
||||||
|
else if (Strncmp(name_resolved, "union ", 6) == 0)
|
||||||
|
Replace(name_resolved, "union ", "", DOH_REPLACE_FIRST);
|
||||||
|
}
|
||||||
|
|
||||||
illegal_name = !Equal(name_resolved, expected_name_resolved);
|
illegal_name = !Equal(name_resolved, expected_name_resolved);
|
||||||
|
if (!illegal_name)
|
||||||
|
Swig_warning(WARN_LANG_EXTEND_DESTRUCTOR, input_file, line_number, "Use of an illegal destructor name '%s' in %%extend is deprecated, the destructor name should be '%s'.\n",
|
||||||
|
SwigType_str(Swig_scopename_last(actual_name), 0), SwigType_str(Swig_scopename_last(expected_name), 0));
|
||||||
Delete(name_resolved);
|
Delete(name_resolved);
|
||||||
Delete(expected_name_resolved);
|
Delete(expected_name_resolved);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue