mirror of https://github.com/swig/swig
Restore missing variable setters for types containing non-assignable static members
A struct/class that contains a non-assignable member variable is actually assignable itself. Only non-static members, not static members, contribute to the containing class being non-assignable. Recent regression fix from a few commits back.
This commit is contained in:
parent
4f337d6495
commit
ec53b06b8a
|
@ -121,4 +121,10 @@ MemberPrivateVar StaticMembersMemberVars::StaticMemberPrivate;
|
|||
MemberPublicVar GlobalMemberPublic;
|
||||
MemberProtectedVar GlobalMemberProtected;
|
||||
MemberPrivateVar GlobalMemberPrivate;
|
||||
|
||||
// Setters and getters available
|
||||
struct StaticMembersMemberVarsHolder {
|
||||
StaticMembersMemberVars Member;
|
||||
};
|
||||
StaticMembersMemberVars GlobalStaticMembersMemberVars;
|
||||
%}
|
||||
|
|
|
@ -113,4 +113,10 @@ MemberPrivateVar StaticMembersMemberVars::StaticMemberPrivate;
|
|||
MemberPublicVar GlobalMemberPublic;
|
||||
MemberProtectedVar GlobalMemberProtected;
|
||||
MemberPrivateVar GlobalMemberPrivate;
|
||||
|
||||
// Setters and getters available
|
||||
struct StaticMembersMemberVarsHolder {
|
||||
StaticMembersMemberVars Member;
|
||||
};
|
||||
StaticMembersMemberVars GlobalStaticMembersMemberVars;
|
||||
%}
|
||||
|
|
|
@ -121,4 +121,10 @@ MemberPrivateVar StaticMembersMemberVars::StaticMemberPrivate;
|
|||
MemberPublicVar GlobalMemberPublic;
|
||||
MemberProtectedVar GlobalMemberProtected;
|
||||
MemberPrivateVar GlobalMemberPrivate;
|
||||
|
||||
// Setters and getters available
|
||||
struct StaticMembersMemberVarsHolder {
|
||||
StaticMembersMemberVars Member;
|
||||
};
|
||||
StaticMembersMemberVars GlobalStaticMembersMemberVars;
|
||||
%}
|
||||
|
|
|
@ -77,5 +77,13 @@ public class assign_reference_runme {
|
|||
MemberPublicVar gmpv1 = assign_reference.getGlobalMemberPublic();
|
||||
MemberProtectedVar gmpv2 = assign_reference.getGlobalMemberProtected();
|
||||
MemberPrivateVar gmpv3 = assign_reference.getGlobalMemberPrivate();
|
||||
|
||||
// Setters and getters available
|
||||
StaticMembersMemberVarsHolder smmvh = new StaticMembersMemberVarsHolder();
|
||||
StaticMembersMemberVars member = smmvh.getMember();
|
||||
smmvh.setMember(member);
|
||||
|
||||
StaticMembersMemberVars smmv = assign_reference.getGlobalStaticMembersMemberVars();
|
||||
assign_reference.setGlobalStaticMembersMemberVars(smmv);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,5 +73,13 @@ public class cpp11_assign_delete_runme {
|
|||
MemberPublicVar gmpv1 = cpp11_assign_delete.getGlobalMemberPublic();
|
||||
MemberProtectedVar gmpv2 = cpp11_assign_delete.getGlobalMemberProtected();
|
||||
MemberPrivateVar gmpv3 = cpp11_assign_delete.getGlobalMemberPrivate();
|
||||
|
||||
// Setters and getters available
|
||||
StaticMembersMemberVarsHolder smmvh = new StaticMembersMemberVarsHolder();
|
||||
StaticMembersMemberVars member = smmvh.getMember();
|
||||
smmvh.setMember(member);
|
||||
|
||||
StaticMembersMemberVars smmv = cpp11_assign_delete.getGlobalStaticMembersMemberVars();
|
||||
cpp11_assign_delete.setGlobalStaticMembersMemberVars(smmv);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,5 +77,13 @@ public class cpp11_assign_rvalue_reference_runme {
|
|||
MemberPublicVar gmpv1 = cpp11_assign_rvalue_reference.getGlobalMemberPublic();
|
||||
MemberProtectedVar gmpv2 = cpp11_assign_rvalue_reference.getGlobalMemberProtected();
|
||||
MemberPrivateVar gmpv3 = cpp11_assign_rvalue_reference.getGlobalMemberPrivate();
|
||||
|
||||
// Setters and getters available
|
||||
StaticMembersMemberVarsHolder smmvh = new StaticMembersMemberVarsHolder();
|
||||
StaticMembersMemberVars member = smmvh.getMember();
|
||||
smmvh.setMember(member);
|
||||
|
||||
StaticMembersMemberVars smmv = cpp11_assign_rvalue_reference.getGlobalStaticMembersMemberVars();
|
||||
cpp11_assign_rvalue_reference.setGlobalStaticMembersMemberVars(smmv);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -667,7 +667,7 @@ class Allocate:public Dispatcher {
|
|||
}
|
||||
}
|
||||
|
||||
bool is_assignable(Node *n, bool& is_reference) {
|
||||
bool is_assignable(Node *n, bool &is_reference) {
|
||||
bool assignable = true;
|
||||
SwigType *ty = Copy(Getattr(n, "type"));
|
||||
SwigType_push(ty, Getattr(n, "decl"));
|
||||
|
@ -1150,7 +1150,8 @@ Allocate():
|
|||
/* Check to see if this is a static member or not. If so, we add an attribute
|
||||
cplus:staticbase that saves the current class */
|
||||
|
||||
if (Swig_storage_isstatic(n)) {
|
||||
int is_static = Swig_storage_isstatic(n);
|
||||
if (is_static) {
|
||||
Setattr(n, "cplus:staticbase", inclass);
|
||||
}
|
||||
|
||||
|
@ -1161,9 +1162,11 @@ Allocate():
|
|||
if (!assignable) {
|
||||
SetFlag(n, "feature:immutable");
|
||||
}
|
||||
if (!is_static) {
|
||||
if (!assignable || is_reference)
|
||||
SetFlag(inclass, "allocate:has_nonassignable"); // The class has a variable that cannot be assigned to
|
||||
}
|
||||
}
|
||||
|
||||
String *name = Getattr(n, "name");
|
||||
if (cplus_mode != PUBLIC) {
|
||||
|
|
Loading…
Reference in New Issue