Don't mark as "noassign" when a variable is immutable

I had assumed member variables could only be noassign by being "const",
but I had forgotten about the `%immutable` keyword being applied via
SWIG.
This commit is contained in:
Seth R Johnson 2022-02-04 13:57:08 -05:00
commit 5a2656ab80
2 changed files with 7 additions and 4 deletions

View file

@ -80,6 +80,12 @@ private:
*/ */
}; };
// This class is valid C++ but cannot be assigned to.
struct JustConstMemberData {
explicit JustConstMemberData(int i_inp) : i(i_inp) {}
const int i;
};
%} %}
%{ %{

View file

@ -781,10 +781,7 @@ Allocate():
Setattr(n, "cplus:staticbase", inclass); Setattr(n, "cplus:staticbase", inclass);
} else if (Cmp(Getattr(n, "kind"), "variable") == 0) { } else if (Cmp(Getattr(n, "kind"), "variable") == 0) {
/* Check member variable to determine whether assignment is valid */ /* Check member variable to determine whether assignment is valid */
if (GetFlag(n, "feature:immutable")) { if (SwigType_isreference(Getattr(n, "type"))) {
/* Can't assign a class with an immutable member variable */
Setattr(inclass, "allocate:noassign", "1");
} else if (SwigType_isreference(Getattr(n, "type"))) {
/* Can't assign a class with reference member data */ /* Can't assign a class with reference member data */
Setattr(inclass, "allocate:noassign", "1"); Setattr(inclass, "allocate:noassign", "1");
} }