C++11 strongly-typed enums fix for Java only
This commit is contained in:
parent
e6882287af
commit
cf139a90db
1 changed files with 23 additions and 2 deletions
|
|
@ -837,8 +837,13 @@ public:
|
|||
String *nondir_args = NewString("");
|
||||
bool is_destructor = (Cmp(Getattr(n, "nodeType"), "destructor") == 0);
|
||||
|
||||
// If enum is strongly-typed, generate fully-qualified symname
|
||||
Node* parent = parentNode(n);
|
||||
if (GetFlag(parent, "scopedenum"))
|
||||
symname = Swig_name_member(0, Swig_scopename_last(Getattr(parent, "name")), symname);
|
||||
|
||||
if (!Getattr(n, "sym:overloaded")) {
|
||||
if (!addSymbol(Getattr(n, "sym:name"), n, imclass_name))
|
||||
if (!addSymbol(symname, n, imclass_name))
|
||||
return SWIG_ERROR;
|
||||
}
|
||||
|
||||
|
|
@ -1556,6 +1561,11 @@ public:
|
|||
} else if (!const_feature_flag) {
|
||||
// Default enum and constant handling will work with any type of C constant and initialises the Java variable from C through a JNI call.
|
||||
|
||||
// If enum is strongly-typed, generate fully-qualified symname
|
||||
Node* parent = parentNode(n);
|
||||
if (GetFlag(parent, "scopedenum"))
|
||||
symname = Swig_name_member(0, Swig_scopename_last(Getattr(parent, "name")), symname);
|
||||
|
||||
if (classname_substituted_flag) {
|
||||
if (SwigType_isenum(t)) {
|
||||
// This handles wrapping of inline initialised const enum static member variables (not when wrapping enum items - ignored later on)
|
||||
|
|
@ -2709,7 +2719,14 @@ public:
|
|||
* a Java long is used for all classes in the SWIG intermediary class.
|
||||
* The intermediary class methods are thus mangled when overloaded to give
|
||||
* a unique name. */
|
||||
String *overloaded_name = NewStringf("%s", Getattr(n, "sym:name"));
|
||||
|
||||
// If enum is strongly-typed, generate fully-qualified symname
|
||||
String* symname = Getattr(n, "sym:name");
|
||||
Node* parent = parentNode(n);
|
||||
if (GetFlag(parent, "scopedenum"))
|
||||
symname = Swig_name_member(0, Swig_scopename_last(Getattr(parent, "name")), symname);
|
||||
|
||||
String *overloaded_name = NewStringf("%s", symname);
|
||||
|
||||
if (Getattr(n, "sym:overloaded")) {
|
||||
Printv(overloaded_name, Getattr(n, "sym:overname"), NIL);
|
||||
|
|
@ -2961,6 +2978,10 @@ public:
|
|||
} else {
|
||||
// Get the enumvalue from a JNI call
|
||||
if (!getCurrentClass() || !cparse_cplusplus || !proxy_flag) {
|
||||
// If enum is strongly-typed, generate fully-qualified symname
|
||||
Node* parent = parentNode(n);
|
||||
if (GetFlag(parent, "scopedenum"))
|
||||
symname = Swig_name_member(0, Swig_scopename_last(Getattr(parent, "name")), symname);
|
||||
// Strange hack to change the name
|
||||
Setattr(n, "name", Getattr(n, "value")); /* for wrapping of enums in a namespace when emit_action is used */
|
||||
constantWrapper(n);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue