fix the way a member is added to a class, and the class node is constructed, so it can be properly matched with the match=class predicate in the %rename directive
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8373 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
b2fa89b9f9
commit
72425a439c
3 changed files with 38 additions and 19 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
%module rename_camel
|
%module rename_camel
|
||||||
|
|
||||||
%rename("%(utitle)s",match="cdecl") "";
|
%rename("%(utitle)s",match="cdecl",match$parentNode$nodeType="class") "";
|
||||||
|
|
||||||
%inline {
|
%inline {
|
||||||
struct GeometryFactory
|
struct GeometryFactory
|
||||||
|
|
|
||||||
|
|
@ -245,6 +245,9 @@ static String *make_name(Node *n, String *name,SwigType *decl) {
|
||||||
|
|
||||||
if (!name) return 0;
|
if (!name) return 0;
|
||||||
/* Check to see if the name is in the hash */
|
/* Check to see if the name is in the hash */
|
||||||
|
if (inclass) {
|
||||||
|
Setattr(n,"parentNode",current_class);
|
||||||
|
}
|
||||||
return Swig_name_make(n,Namespaceprefix,name,decl,add_oldname);
|
return Swig_name_make(n,Namespaceprefix,name,decl,add_oldname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -512,6 +515,7 @@ static void add_symbols_copy(Node *n) {
|
||||||
}
|
}
|
||||||
if (strcmp(cnodeType,"class") == 0) {
|
if (strcmp(cnodeType,"class") == 0) {
|
||||||
inclass = 1;
|
inclass = 1;
|
||||||
|
current_class = n;
|
||||||
if (Strcmp(Getattr(n,k_kind),"class") == 0) {
|
if (Strcmp(Getattr(n,k_kind),"class") == 0) {
|
||||||
cplus_mode = CPLUS_PRIVATE;
|
cplus_mode = CPLUS_PRIVATE;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -537,6 +541,7 @@ static void add_symbols_copy(Node *n) {
|
||||||
}
|
}
|
||||||
if (strcmp(cnodeType,"class") == 0) {
|
if (strcmp(cnodeType,"class") == 0) {
|
||||||
inclass = 0;
|
inclass = 0;
|
||||||
|
current_class = 0;
|
||||||
}
|
}
|
||||||
add_oldname = 0;
|
add_oldname = 0;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -3043,6 +3048,14 @@ cpp_class_decl :
|
||||||
List *bases = 0;
|
List *bases = 0;
|
||||||
Node *scope = 0;
|
Node *scope = 0;
|
||||||
$$ = new_node("class");
|
$$ = new_node("class");
|
||||||
|
Setline($$,cparse_start_line);
|
||||||
|
Setattr($$,k_kind,$2);
|
||||||
|
if ($4) {
|
||||||
|
Setattr($$,k_baselist, Getattr($4,"public"));
|
||||||
|
Setattr($$,"protectedbaselist", Getattr($4,"protected"));
|
||||||
|
Setattr($$,"privatebaselist", Getattr($4,"private"));
|
||||||
|
}
|
||||||
|
Setattr($$,"allows_typedef","1");
|
||||||
|
|
||||||
/* preserve the current scope */
|
/* preserve the current scope */
|
||||||
prev_symtab = Swig_symbol_current();
|
prev_symtab = Swig_symbol_current();
|
||||||
|
|
@ -3071,6 +3084,7 @@ cpp_class_decl :
|
||||||
nscope_inner = 0;
|
nscope_inner = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Setattr($$,k_name,$3);
|
||||||
|
|
||||||
Delete(class_rename);
|
Delete(class_rename);
|
||||||
class_rename = make_name($$,$3,0);
|
class_rename = make_name($$,$3,0);
|
||||||
|
|
@ -3130,23 +3144,16 @@ cpp_class_decl :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
inclass = 1;
|
inclass = 1;
|
||||||
|
current_class = $$;
|
||||||
} cpp_members RBRACE cpp_opt_declarators {
|
} cpp_members RBRACE cpp_opt_declarators {
|
||||||
Node *p;
|
Node *p;
|
||||||
SwigType *ty;
|
SwigType *ty;
|
||||||
Symtab *cscope = prev_symtab;
|
Symtab *cscope = prev_symtab;
|
||||||
Node *am = 0;
|
Node *am = 0;
|
||||||
String *scpname = 0;
|
String *scpname = 0;
|
||||||
|
$$ = current_class;
|
||||||
inclass = 0;
|
inclass = 0;
|
||||||
$$ = new_node("class");
|
current_class = 0;
|
||||||
Setline($$,cparse_start_line);
|
|
||||||
Setattr($$,k_name,$3);
|
|
||||||
Setattr($$,k_kind,$2);
|
|
||||||
if ($4) {
|
|
||||||
Setattr($$,k_baselist, Getattr($4,"public"));
|
|
||||||
Setattr($$,"protectedbaselist", Getattr($4,"protected"));
|
|
||||||
Setattr($$,"privatebaselist", Getattr($4,"private"));
|
|
||||||
}
|
|
||||||
Setattr($$,"allows_typedef","1");
|
|
||||||
/* Check for pure-abstract class */
|
/* Check for pure-abstract class */
|
||||||
Setattr($$,k_abstract, pure_abstract($7));
|
Setattr($$,k_abstract, pure_abstract($7));
|
||||||
|
|
||||||
|
|
@ -3257,7 +3264,14 @@ cpp_class_decl :
|
||||||
/* An unnamed struct, possibly with a typedef */
|
/* An unnamed struct, possibly with a typedef */
|
||||||
|
|
||||||
| storage_class cpptype LBRACE {
|
| storage_class cpptype LBRACE {
|
||||||
|
String *unnamed;
|
||||||
|
unnamed = make_unnamed();
|
||||||
$$ = new_node("class");
|
$$ = new_node("class");
|
||||||
|
Setline($$,cparse_start_line);
|
||||||
|
Setattr($$,k_kind,$2);
|
||||||
|
Setattr($$,k_storage,$1);
|
||||||
|
Setattr($$,k_unnamed,unnamed);
|
||||||
|
Setattr($$,"allows_typedef","1");
|
||||||
Delete(class_rename);
|
Delete(class_rename);
|
||||||
class_rename = make_name($$,0,0);
|
class_rename = make_name($$,0,0);
|
||||||
if (strcmp($2,"class") == 0) {
|
if (strcmp($2,"class") == 0) {
|
||||||
|
|
@ -3268,6 +3282,7 @@ cpp_class_decl :
|
||||||
Swig_symbol_newscope();
|
Swig_symbol_newscope();
|
||||||
cparse_start_line = cparse_line;
|
cparse_start_line = cparse_line;
|
||||||
inclass = 1;
|
inclass = 1;
|
||||||
|
current_class = $$;
|
||||||
Classprefix = NewStringEmpty();
|
Classprefix = NewStringEmpty();
|
||||||
Delete(Namespaceprefix);
|
Delete(Namespaceprefix);
|
||||||
Namespaceprefix = Swig_symbol_qualifiedscopename(0);
|
Namespaceprefix = Swig_symbol_qualifiedscopename(0);
|
||||||
|
|
@ -3275,14 +3290,10 @@ cpp_class_decl :
|
||||||
String *unnamed;
|
String *unnamed;
|
||||||
Node *n;
|
Node *n;
|
||||||
Classprefix = 0;
|
Classprefix = 0;
|
||||||
|
$$ = current_class;
|
||||||
inclass = 0;
|
inclass = 0;
|
||||||
$$ = new_node("class");
|
current_class = 0;
|
||||||
unnamed = make_unnamed();
|
unnamed = Getattr($$,k_unnamed);
|
||||||
Setline($$,cparse_start_line);
|
|
||||||
Setattr($$,k_kind,$2);
|
|
||||||
Setattr($$,k_storage,$1);
|
|
||||||
Setattr($$,k_unnamed,unnamed);
|
|
||||||
Setattr($$,"allows_typedef","1");
|
|
||||||
|
|
||||||
/* Check for pure-abstract class */
|
/* Check for pure-abstract class */
|
||||||
Setattr($$,k_abstract, pure_abstract($5));
|
Setattr($$,k_abstract, pure_abstract($5));
|
||||||
|
|
|
||||||
|
|
@ -1073,6 +1073,14 @@ static DOH *Swig_get_lattr(Node *n, List *lattr)
|
||||||
for (i = 0; n && (i < ilen); ++i) {
|
for (i = 0; n && (i < ilen); ++i) {
|
||||||
String *nattr = Getitem(lattr,i);
|
String *nattr = Getitem(lattr,i);
|
||||||
res = Getattr(n,nattr);
|
res = Getattr(n,nattr);
|
||||||
|
#ifdef SWIG_DEBUG
|
||||||
|
if (!res) {
|
||||||
|
Node *pn = Getattr(n,k_parentnode);
|
||||||
|
Printf(stderr,"missing %s %s %s\n",nattr, Getattr(n,"name"), Getattr(n,"member"));
|
||||||
|
} else {
|
||||||
|
Printf(stderr,"lattr %d %s %s\n",i, nattr, DohIsString(res) ? res : Getattr(res,"name"));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
n = res;
|
n = res;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
|
@ -1097,7 +1105,7 @@ int Swig_name_match_nameobj(Hash *rn, Node *n) {
|
||||||
String *kwval = Getattr(kw,k_value);
|
String *kwval = Getattr(kw,k_value);
|
||||||
match = Equal(nval, kwval);
|
match = Equal(nval, kwval);
|
||||||
#ifdef SWIG_DEBUG
|
#ifdef SWIG_DEBUG
|
||||||
Printf(stderr,"val %s %s %d %d \n",nval, kwval,match, notmatch);
|
Printf(stderr,"val %s %s %d %d \n",nval, kwval,match, ilen);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (notmatch) match = !match;
|
if (notmatch) match = !match;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue