Add allprotected mode for wrapping protected members when using directors
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10381 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
b0921513e0
commit
9976dc9d75
17 changed files with 468 additions and 181 deletions
|
|
@ -26,17 +26,19 @@ int is_protected(Node *n) {
|
|||
return access && !Cmp(access, "protected");
|
||||
}
|
||||
|
||||
int is_member_director(Node *parentnode, Node *member) {
|
||||
int director_mode = Swig_director_mode();
|
||||
static int is_member_director_helper(Node *parentnode, Node *member) {
|
||||
int parent_nodirector = GetFlag(parentnode, "feature:nodirector");
|
||||
if (parent_nodirector)
|
||||
return 0;
|
||||
int parent_director = Swig_director_mode() && GetFlag(parentnode, "feature:director");
|
||||
int cdecl_director = parent_director || GetFlag(member, "feature:director");
|
||||
int cdecl_nodirector = GetFlag(member, "feature:nodirector");
|
||||
return cdecl_director && !cdecl_nodirector && !GetFlag(member, "feature:extend");
|
||||
}
|
||||
|
||||
int is_member_director(Node *parentnode, Node *member) {
|
||||
if (parentnode && checkAttribute(member, "storage", "virtual")) {
|
||||
int parent_nodirector = GetFlag(parentnode, "feature:nodirector");
|
||||
if (parent_nodirector)
|
||||
return 0;
|
||||
int parent_director = director_mode && GetFlag(parentnode, "feature:director");
|
||||
int cdecl_director = parent_director || GetFlag(member, "feature:director");
|
||||
int cdecl_nodirector = GetFlag(member, "feature:nodirector");
|
||||
return cdecl_director && !cdecl_nodirector && !GetFlag(member, "feature:extend");
|
||||
return is_member_director_helper(parentnode, member);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -46,6 +48,17 @@ int is_member_director(Node *member) {
|
|||
return is_member_director(Getattr(member, "parentNode"), member);
|
||||
}
|
||||
|
||||
// Identifies the additional protected members that are generated when the allprotected option is used.
|
||||
// This does not include protected virtual methods as they are turned on with the dirprot option.
|
||||
int is_non_virtual_protected_access(Node *n) {
|
||||
int result = 0;
|
||||
if (Swig_director_mode() && Swig_director_protected_mode() && Swig_all_protected_mode() && is_protected(n) && !checkAttribute(n, "storage", "virtual")) {
|
||||
if (is_member_director_helper(Getattr(n, "parentNode"), n))
|
||||
result = 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Clean overloaded list. Removes templates, ignored, and errors */
|
||||
|
||||
void clean_overloaded(Node *n) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue