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;
|
MemberPublicVar GlobalMemberPublic;
|
||||||
MemberProtectedVar GlobalMemberProtected;
|
MemberProtectedVar GlobalMemberProtected;
|
||||||
MemberPrivateVar GlobalMemberPrivate;
|
MemberPrivateVar GlobalMemberPrivate;
|
||||||
|
|
||||||
|
// Setters and getters available
|
||||||
|
struct StaticMembersMemberVarsHolder {
|
||||||
|
StaticMembersMemberVars Member;
|
||||||
|
};
|
||||||
|
StaticMembersMemberVars GlobalStaticMembersMemberVars;
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -113,4 +113,10 @@ MemberPrivateVar StaticMembersMemberVars::StaticMemberPrivate;
|
||||||
MemberPublicVar GlobalMemberPublic;
|
MemberPublicVar GlobalMemberPublic;
|
||||||
MemberProtectedVar GlobalMemberProtected;
|
MemberProtectedVar GlobalMemberProtected;
|
||||||
MemberPrivateVar GlobalMemberPrivate;
|
MemberPrivateVar GlobalMemberPrivate;
|
||||||
|
|
||||||
|
// Setters and getters available
|
||||||
|
struct StaticMembersMemberVarsHolder {
|
||||||
|
StaticMembersMemberVars Member;
|
||||||
|
};
|
||||||
|
StaticMembersMemberVars GlobalStaticMembersMemberVars;
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -121,4 +121,10 @@ MemberPrivateVar StaticMembersMemberVars::StaticMemberPrivate;
|
||||||
MemberPublicVar GlobalMemberPublic;
|
MemberPublicVar GlobalMemberPublic;
|
||||||
MemberProtectedVar GlobalMemberProtected;
|
MemberProtectedVar GlobalMemberProtected;
|
||||||
MemberPrivateVar GlobalMemberPrivate;
|
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();
|
MemberPublicVar gmpv1 = assign_reference.getGlobalMemberPublic();
|
||||||
MemberProtectedVar gmpv2 = assign_reference.getGlobalMemberProtected();
|
MemberProtectedVar gmpv2 = assign_reference.getGlobalMemberProtected();
|
||||||
MemberPrivateVar gmpv3 = assign_reference.getGlobalMemberPrivate();
|
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();
|
MemberPublicVar gmpv1 = cpp11_assign_delete.getGlobalMemberPublic();
|
||||||
MemberProtectedVar gmpv2 = cpp11_assign_delete.getGlobalMemberProtected();
|
MemberProtectedVar gmpv2 = cpp11_assign_delete.getGlobalMemberProtected();
|
||||||
MemberPrivateVar gmpv3 = cpp11_assign_delete.getGlobalMemberPrivate();
|
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();
|
MemberPublicVar gmpv1 = cpp11_assign_rvalue_reference.getGlobalMemberPublic();
|
||||||
MemberProtectedVar gmpv2 = cpp11_assign_rvalue_reference.getGlobalMemberProtected();
|
MemberProtectedVar gmpv2 = cpp11_assign_rvalue_reference.getGlobalMemberProtected();
|
||||||
MemberPrivateVar gmpv3 = cpp11_assign_rvalue_reference.getGlobalMemberPrivate();
|
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;
|
bool assignable = true;
|
||||||
SwigType *ty = Copy(Getattr(n, "type"));
|
SwigType *ty = Copy(Getattr(n, "type"));
|
||||||
SwigType_push(ty, Getattr(n, "decl"));
|
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
|
/* Check to see if this is a static member or not. If so, we add an attribute
|
||||||
cplus:staticbase that saves the current class */
|
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);
|
Setattr(n, "cplus:staticbase", inclass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1161,8 +1162,10 @@ Allocate():
|
||||||
if (!assignable) {
|
if (!assignable) {
|
||||||
SetFlag(n, "feature:immutable");
|
SetFlag(n, "feature:immutable");
|
||||||
}
|
}
|
||||||
if (!assignable || is_reference)
|
if (!is_static) {
|
||||||
SetFlag(inclass, "allocate:has_nonassignable"); // The class has a variable that cannot be assigned to
|
if (!assignable || is_reference)
|
||||||
|
SetFlag(inclass, "allocate:has_nonassignable"); // The class has a variable that cannot be assigned to
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String *name = Getattr(n, "name");
|
String *name = Getattr(n, "name");
|
||||||
|
|
Loading…
Reference in New Issue