Fix enum names for renamed typedefs
Also use sym:name even for typedefs for enums themselves, as they can %renamed as well. Note that this means that "tdname" itself should probably be never used at all at this level, but it's still used for structs in C mode, which is almost certainly wrong.
This commit is contained in:
parent
1c06a43e35
commit
06c651431c
1 changed files with 9 additions and 7 deletions
|
|
@ -2440,9 +2440,11 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String* const symname = Getattr(n, "sym:name");
|
||||||
|
|
||||||
// Preserve the typedef if we have it in the input.
|
// Preserve the typedef if we have it in the input.
|
||||||
String* const tdname = Getattr(n, "tdname");
|
bool const is_typedef = Checkattr(n, "allows_typedef", "1");
|
||||||
if (tdname) {
|
if (is_typedef) {
|
||||||
Printv(enum_decl, "typedef ", NIL);
|
Printv(enum_decl, "typedef ", NIL);
|
||||||
if (cxx_enum_decl)
|
if (cxx_enum_decl)
|
||||||
Printv(cxx_enum_decl, "typedef ", NIL);
|
Printv(cxx_enum_decl, "typedef ", NIL);
|
||||||
|
|
@ -2465,10 +2467,10 @@ public:
|
||||||
scoped_dohptr cxx_enumname;
|
scoped_dohptr cxx_enumname;
|
||||||
|
|
||||||
// Unnamed enums may just have no name at all or have a synthesized invalid name of the form "$unnamedN$ which is indicated by "unnamed" attribute.
|
// Unnamed enums may just have no name at all or have a synthesized invalid name of the form "$unnamedN$ which is indicated by "unnamed" attribute.
|
||||||
if (String* const name = Getattr(n, "unnamed") ? NULL : Getattr(n, "sym:name")) {
|
if (String* const name = Getattr(n, "unnamed") ? NULL : symname) {
|
||||||
// If it's a typedef, its sym:name is the typedef name, but we don't want to use it here (we already use it for the typedef we generate), so use the
|
// If it's a typedef, its sym:name is the typedef name, but we don't want to use it here (we already use it for the typedef we generate), so use the
|
||||||
// actual C++ name instead.
|
// actual C++ name instead.
|
||||||
if (tdname) {
|
if (is_typedef) {
|
||||||
// But the name may include the containing class, so get rid of it.
|
// But the name may include the containing class, so get rid of it.
|
||||||
enumname = Swig_scopename_last(Getattr(n, "name"));
|
enumname = Swig_scopename_last(Getattr(n, "name"));
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -2512,10 +2514,10 @@ public:
|
||||||
if (cxx_enum_decl)
|
if (cxx_enum_decl)
|
||||||
Printv(cxx_enum_decl, "\n", cxx_enum_indent, "}", NIL);
|
Printv(cxx_enum_decl, "\n", cxx_enum_indent, "}", NIL);
|
||||||
|
|
||||||
if (tdname) {
|
if (is_typedef) {
|
||||||
Printv(enum_decl, " ", enum_prefix_.get(), tdname, NIL);
|
Printv(enum_decl, " ", enum_prefix_.get(), symname, NIL);
|
||||||
if (cxx_enum_decl)
|
if (cxx_enum_decl)
|
||||||
Printv(cxx_enum_decl, " ", tdname, NIL);
|
Printv(cxx_enum_decl, " ", symname, NIL);
|
||||||
}
|
}
|
||||||
Printv(enum_decl, ";\n\n", NIL);
|
Printv(enum_decl, ";\n\n", NIL);
|
||||||
if (cxx_enum_decl)
|
if (cxx_enum_decl)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue