inner declared types are treated as forward declarations - consistency now between innner/nested unions/structs and classes - only relevant to C++
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11730 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
99565a7c35
commit
9b318c45bc
4 changed files with 27 additions and 21 deletions
|
|
@ -1,6 +1,17 @@
|
||||||
Version 1.3.41 (in progress)
|
Version 1.3.41 (in progress)
|
||||||
============================
|
============================
|
||||||
|
|
||||||
|
2009-11-08: wsfulton
|
||||||
|
Fix inconsistency for inner structs/unions/classes. Uncompileable code was being
|
||||||
|
generated when inner struct and union declarations were used as types within
|
||||||
|
the inner struct. The inner struct/union is now treated as a forward declaration making the
|
||||||
|
behaviour the same as an inner class. (C++ code), eg:
|
||||||
|
|
||||||
|
struct Outer {
|
||||||
|
struct InnerStruct { int x; };
|
||||||
|
InnerStruct* getInnerStruct();
|
||||||
|
};
|
||||||
|
|
||||||
2009-11-08: wsfulton
|
2009-11-08: wsfulton
|
||||||
Ignored nested class/struct warnings now display the name of the ignored class/struct.
|
Ignored nested class/struct warnings now display the name of the ignored class/struct.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,11 @@ struct Outer {
|
||||||
int x;
|
int x;
|
||||||
double y;
|
double y;
|
||||||
} InnerUnion2Name;
|
} InnerUnion2Name;
|
||||||
|
|
||||||
|
// bug #909387 - inner declared types are treated as forward declarations
|
||||||
|
InnerStruct1* getInnerStruct1() { return 0; }
|
||||||
|
InnerClass1* getInnerClass1() { return 0; }
|
||||||
|
InnerUnion1* getInnerUnion1() { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,3 @@ int a;
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
// bug #909387
|
|
||||||
%inline %{
|
|
||||||
struct foo {
|
|
||||||
struct happy; // no warning
|
|
||||||
struct sad { int x; }; // warning
|
|
||||||
happy *good(); // produces good code
|
|
||||||
sad *bad(); // produces bad code
|
|
||||||
};
|
|
||||||
%}
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4396,17 +4396,16 @@ cpp_nested : storage_class cpptype ID LBRACE { cparse_start_line = cparse_line
|
||||||
add_nested(n);
|
add_nested(n);
|
||||||
} else {
|
} else {
|
||||||
Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line, "Nested %s not currently supported (%s ignored).\n", $2, $3);
|
Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line, "Nested %s not currently supported (%s ignored).\n", $2, $3);
|
||||||
if (strcmp($2, "class") == 0) {
|
|
||||||
/* For now, just treat the nested class as a forward
|
/* For now, just treat the nested class/struct/union as a forward
|
||||||
* declaration (SF bug #909387). */
|
* declaration (SF bug #909387). */
|
||||||
$$ = new_node("classforward");
|
$$ = new_node("classforward");
|
||||||
Setfile($$,cparse_file);
|
Setfile($$,cparse_file);
|
||||||
Setline($$,cparse_line);
|
Setline($$,cparse_line);
|
||||||
Setattr($$,"kind",$2);
|
Setattr($$,"kind",$2);
|
||||||
Setattr($$,"name",$3);
|
Setattr($$,"name",$3);
|
||||||
Setattr($$,"sym:weak", "1");
|
Setattr($$,"sym:weak", "1");
|
||||||
add_symbols($$);
|
add_symbols($$);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4446,6 +4445,7 @@ cpp_nested : storage_class cpptype ID LBRACE { cparse_start_line = cparse_line
|
||||||
*****/
|
*****/
|
||||||
| storage_class cpptype idcolon COLON base_list LBRACE { cparse_start_line = cparse_line; skip_balanced('{','}');
|
| storage_class cpptype idcolon COLON base_list LBRACE { cparse_start_line = cparse_line; skip_balanced('{','}');
|
||||||
} SEMI {
|
} SEMI {
|
||||||
|
Printf(stdout, "cpp_nested (c)\n");
|
||||||
$$ = 0;
|
$$ = 0;
|
||||||
if (cplus_mode == CPLUS_PUBLIC) {
|
if (cplus_mode == CPLUS_PUBLIC) {
|
||||||
Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line,"Nested %s not currently supported (%s ignored)\n", $2, $3);
|
Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line,"Nested %s not currently supported (%s ignored)\n", $2, $3);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue