Fixes for C enums used in an API and the definition of the enum has not been parsed.
For D, this fixes a segfault in SWIG. Java, C#, D, Go now produce code that compiles, although the definition of the enum is needed in order to use the enum properly from the target language.
This commit is contained in:
parent
15f4b3b19d
commit
cd2085aae7
7 changed files with 149 additions and 49 deletions
|
|
@ -3083,10 +3083,19 @@ public:
|
|||
|
||||
if (SwigType_isenum(classnametype)) {
|
||||
String *enumname = getEnumName(classnametype, jnidescriptor);
|
||||
if (enumname)
|
||||
if (enumname) {
|
||||
replacementname = Copy(enumname);
|
||||
else
|
||||
replacementname = NewString("int");
|
||||
} else {
|
||||
bool anonymous_enum = (Cmp(classnametype, "enum ") == 0);
|
||||
if (anonymous_enum) {
|
||||
replacementname = NewString("int");
|
||||
} else {
|
||||
// An unknown enum - one that has not been parsed (neither a C enum forward reference nor a definition)
|
||||
replacementname = SwigType_base(classnametype);
|
||||
Replace(replacementname, "enum ", "", DOH_REPLACE_ANY);
|
||||
Setattr(swig_types_hash, replacementname, classnametype);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
String *classname = getProxyName(classnametype, jnidescriptor); // getProxyName() works for pointers to classes too
|
||||
if (classname) {
|
||||
|
|
@ -3186,6 +3195,11 @@ public:
|
|||
Replaceall(swigtype, "$javaclassname", classname);
|
||||
Replaceall(swigtype, "$module", module_class_name);
|
||||
Replaceall(swigtype, "$imclassname", imclass_name);
|
||||
|
||||
// For unknown enums
|
||||
Replaceall(swigtype, "$static ", "");
|
||||
Replaceall(swigtype, "$enumvalues", "");
|
||||
|
||||
Printv(f_swigtype, swigtype, NIL);
|
||||
|
||||
Delete(f_swigtype);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue