mirror of https://github.com/swig/swig
Assignable fixes for reference member variables
Fix incorrect variable setters being generated when wrapping reference member variables. A setter is no longer generated if the type of the reference member variable is non-assignable. Fixes #2866
This commit is contained in:
parent
d3e86c706c
commit
5c5911ee3b
|
@ -7,6 +7,11 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||||
Version 4.3.0 (in progress)
|
Version 4.3.0 (in progress)
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
2024-09-19: wsfulton
|
||||||
|
#2866 Fix incorrect variable setters being generated when wrapping
|
||||||
|
reference member variables. A setter is no longer generated if the
|
||||||
|
type of the reference member variable is non-assignable.
|
||||||
|
|
||||||
2024-09-18: olly
|
2024-09-18: olly
|
||||||
Fix parse error for a misplaced Doxygen comment which is the only
|
Fix parse error for a misplaced Doxygen comment which is the only
|
||||||
thing in a class/struct.
|
thing in a class/struct.
|
||||||
|
|
|
@ -170,3 +170,53 @@ struct StaticMembersMemberArrayVarsHolder {
|
||||||
};
|
};
|
||||||
StaticMembersMemberArrayVars GlobalStaticMembersMemberArrayVars;
|
StaticMembersMemberArrayVars GlobalStaticMembersMemberArrayVars;
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
// (5) Test indirectly non-assignable member variables via classes that themselves have non-assignable reference member variables
|
||||||
|
%inline %{
|
||||||
|
AssignPublic GlobalAssignPublic;
|
||||||
|
AssignProtected GlobalAssignProtected;
|
||||||
|
AssignPrivate GlobalAssignPrivate;
|
||||||
|
|
||||||
|
struct MemberPublicRefVar {
|
||||||
|
AssignPublic& MemberRefVarPublic;
|
||||||
|
MemberPublicRefVar() : MemberRefVarPublic(GlobalAssignPublic) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MemberProtectedRefVar {
|
||||||
|
MemberProtectedRefVar() : MemberRefVarProtected(GlobalAssignProtected) {}
|
||||||
|
protected:
|
||||||
|
AssignProtected& MemberRefVarProtected;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MemberPrivateRefVar {
|
||||||
|
MemberPrivateRefVar() : MemberRefVarPrivate(GlobalAssignPrivate) {}
|
||||||
|
private:
|
||||||
|
AssignPrivate& MemberRefVarPrivate;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MembersMemberRefVars {
|
||||||
|
// These will only have getters
|
||||||
|
MemberPublicRefVar MemberPublic;
|
||||||
|
MemberProtectedRefVar MemberProtected;
|
||||||
|
MemberPrivateRefVar MemberPrivate;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct StaticMembersMemberRefVars {
|
||||||
|
static MemberPublicRefVar StaticMemberPublic;
|
||||||
|
static MemberProtectedRefVar StaticMemberProtected;
|
||||||
|
static MemberPrivateRefVar StaticMemberPrivate;
|
||||||
|
};
|
||||||
|
MemberPublicRefVar StaticMembersMemberRefVars::StaticMemberPublic;
|
||||||
|
MemberProtectedRefVar StaticMembersMemberRefVars::StaticMemberProtected;
|
||||||
|
MemberPrivateRefVar StaticMembersMemberRefVars::StaticMemberPrivate;
|
||||||
|
|
||||||
|
MemberPublicRefVar GlobalRefMemberPublic;
|
||||||
|
MemberProtectedRefVar GlobalRefMemberProtected;
|
||||||
|
MemberPrivateRefVar GlobalRefMemberPrivate;
|
||||||
|
|
||||||
|
// Setters and getters available
|
||||||
|
struct StaticMembersMemberRefVarsHolder {
|
||||||
|
StaticMembersMemberRefVars Member;
|
||||||
|
};
|
||||||
|
StaticMembersMemberRefVars GlobalStaticMembersMemberRefVars;
|
||||||
|
%}
|
||||||
|
|
|
@ -114,5 +114,31 @@ public class cpp11_assign_delete_runme {
|
||||||
StaticMembersMemberArrayVars smmv = cpp11_assign_delete.getGlobalStaticMembersMemberArrayVars();
|
StaticMembersMemberArrayVars smmv = cpp11_assign_delete.getGlobalStaticMembersMemberArrayVars();
|
||||||
cpp11_assign_delete.setGlobalStaticMembersMemberArrayVars(smmv);
|
cpp11_assign_delete.setGlobalStaticMembersMemberArrayVars(smmv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// (5) Test indirectly non-assignable member variables via classes that themselves have non-assignable reference member variables
|
||||||
|
{
|
||||||
|
MembersMemberRefVars m = new MembersMemberRefVars();
|
||||||
|
|
||||||
|
// These will only have getters
|
||||||
|
MemberPublicRefVar mpv1 = m.getMemberPublic();
|
||||||
|
MemberProtectedRefVar mpv2 = m.getMemberProtected();
|
||||||
|
MemberPrivateRefVar mpv3 = m.getMemberPrivate();
|
||||||
|
|
||||||
|
MemberPublicRefVar smpv1 = StaticMembersMemberRefVars.getStaticMemberPublic();
|
||||||
|
MemberProtectedRefVar smpv2 = StaticMembersMemberRefVars.getStaticMemberProtected();
|
||||||
|
MemberPrivateRefVar smpv3 = StaticMembersMemberRefVars.getStaticMemberPrivate();
|
||||||
|
|
||||||
|
MemberPublicRefVar gmpv1 = cpp11_assign_delete.getGlobalRefMemberPublic();
|
||||||
|
MemberProtectedRefVar gmpv2 = cpp11_assign_delete.getGlobalRefMemberProtected();
|
||||||
|
MemberPrivateRefVar gmpv3 = cpp11_assign_delete.getGlobalRefMemberPrivate();
|
||||||
|
|
||||||
|
// Setters and getters available
|
||||||
|
StaticMembersMemberRefVarsHolder smmvh = new StaticMembersMemberRefVarsHolder();
|
||||||
|
StaticMembersMemberRefVars member = smmvh.getMember();
|
||||||
|
smmvh.setMember(member);
|
||||||
|
|
||||||
|
StaticMembersMemberRefVars smmv = cpp11_assign_delete.getGlobalStaticMembersMemberRefVars();
|
||||||
|
cpp11_assign_delete.setGlobalStaticMembersMemberRefVars(smmv);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -692,6 +692,11 @@ class Allocate:public Dispatcher {
|
||||||
} else if (SwigType_isarray(type)) {
|
} else if (SwigType_isarray(type)) {
|
||||||
SwigType *array_type = SwigType_array_type(type);
|
SwigType *array_type = SwigType_array_type(type);
|
||||||
assignable = is_assignable_type(array_type);
|
assignable = is_assignable_type(array_type);
|
||||||
|
} else if (SwigType_isreference(type) || SwigType_isrvalue_reference(type)) {
|
||||||
|
SwigType *base_type = Copy(type);
|
||||||
|
SwigType_del_element(base_type);
|
||||||
|
assignable = is_assignable_type(base_type);
|
||||||
|
Delete(base_type);
|
||||||
}
|
}
|
||||||
return assignable;
|
return assignable;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue