add nomatch option

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@8190 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2006-01-02 17:44:31 +00:00
commit a8afed097f
4 changed files with 24 additions and 11 deletions

View file

@ -141,8 +141,8 @@ Version 1.3.28 (unreleased).
Use "swig -dump_tree" to see the attributes names you can use to Use "swig -dump_tree" to see the attributes names you can use to
match an specific case. match an specific case.
- Sometimes you need to process the 'source' name before - 'sourcefmt' and 'targetfmt': sometimes you need to
comparing, for example process the 'source' name before comparing, for example
%namewarn("314: empty is a keyword",sourcefmt="%(lower)s") "empty"; %namewarn("314: empty is a keyword",sourcefmt="%(lower)s") "empty";
@ -152,11 +152,18 @@ Version 1.3.28 (unreleased).
you will get the keyword warning since 'Empty' will be you will get the keyword warning since 'Empty' will be
lower cased, via the sourcefmt="%(lower)s" option, lower cased, via the sourcefmt="%(lower)s" option,
before comparing to the 'target' "empty". before been compared to the 'target' "empty".
There is an additional 'targetfmt' option to process the There is an additional 'targetfmt' option to process the
'target' before comparing. 'target' before comparing.
- complementing 'match': you can use 'notmatch', for example
%namewarn("314: empty is a keyword",sourcefmt="%(lower)s",notmatch="namespace") "empty";
here, the name warning will be applied to all the symbols except namespaces.
12/30/2005: mmatus 12/30/2005: mmatus
- Add initial support for gcj and Java -> <target language> mechanism. - Add initial support for gcj and Java -> <target language> mechanism.

View file

@ -993,12 +993,13 @@ static void Swig_name_object_attach_keys(const char *keys[], Hash *nameobj)
char *ckey = kname ? Char(kname) : 0; char *ckey = kname ? Char(kname) : 0;
if (ckey) { if (ckey) {
const char **rkey; const char **rkey;
if (strncmp(ckey,"match",5) == 0) { if ((strncmp(ckey,"match",5) == 0) || (strncmp(ckey,"notmatch",8) == 0)) {
Hash *mi = NewHash(); Hash *mi = NewHash();
List *attrlist = Swig_make_attrlist(ckey); List *attrlist = Swig_make_attrlist(ckey);
if (!matchlist) matchlist = NewList(); if (!matchlist) matchlist = NewList();
Setattr(mi,k_value,Getattr(kw,k_value)); Setattr(mi,k_value,Getattr(kw,k_value));
Setattr(mi,k_attrlist,attrlist); Setattr(mi,k_attrlist,attrlist);
if (strncmp(ckey,"not",3) == 0) SetFlag(mi,k_notmatch);
Delete(attrlist); Delete(attrlist);
Append(matchlist,mi); Append(matchlist,mi);
Delete(mi); Delete(mi);
@ -1077,11 +1078,13 @@ int Swig_name_match_nameobj(Hash *rn, Node *n) {
Node *kw = Getitem(matchlist,i); Node *kw = Getitem(matchlist,i);
List *lattr = Getattr(kw,k_attrlist); List *lattr = Getattr(kw,k_attrlist);
String *nval = Swig_get_lattr(n,lattr); String *nval = Swig_get_lattr(n,lattr);
int notmatch = GetFlag(kw,k_notmatch);
match = 0; match = 0;
if (nval) { if (nval) {
String *kwval = Getattr(kw,k_value); String *kwval = Getattr(kw,k_value);
match = Equal(nval, kwval); match = Equal(nval, kwval);
} }
if (!notmatch) match = !match;
} }
} }
return match; return match;

View file

@ -44,6 +44,7 @@ String *k_member = 0;
String *k_name = 0; String *k_name = 0;
String *k_namespace = 0; String *k_namespace = 0;
String *k_nodetype = 0; String *k_nodetype = 0;
String *k_notmatch = 0;
String *k_parent = 0; String *k_parent = 0;
String *k_parentnode = 0; String *k_parentnode = 0;
String *k_parm = 0; String *k_parm = 0;
@ -90,9 +91,9 @@ String *k_uname = 0;
String *k_using = 0; String *k_using = 0;
String *k_value = 0; String *k_value = 0;
String *k_virtual = 0; String *k_virtual = 0;
String *k_wrapper = 0;
String *k_wrapaction = 0; String *k_wrapaction = 0;
String *k_wrapdisown = 0; String *k_wrapdisown = 0;
String *k_wrapper = 0;
void Swig_keys_init() { void Swig_keys_init() {
empty_string = NewString(""); empty_string = NewString("");
@ -107,8 +108,8 @@ void Swig_keys_init() {
k_bases = NewString("bases"); k_bases = NewString("bases");
k_cdecl = NewString("cdecl"); k_cdecl = NewString("cdecl");
k_class = NewString("class"); k_class = NewString("class");
k_classname = NewString("classname");
k_classforward = NewString("classforward"); k_classforward = NewString("classforward");
k_classname = NewString("classname");
k_code = NewString("code"); k_code = NewString("code");
k_coloncolon = NewString("::"); k_coloncolon = NewString("::");
k_compactdefargs = NewString("compactdefargs"); k_compactdefargs = NewString("compactdefargs");
@ -138,6 +139,7 @@ void Swig_keys_init() {
k_name = NewString("name"); k_name = NewString("name");
k_namespace = NewString("namespace"); k_namespace = NewString("namespace");
k_nodetype = NewString("nodeType"); k_nodetype = NewString("nodeType");
k_notmatch = NewString("notmatch");
k_parent = NewString("parent"); k_parent = NewString("parent");
k_parentnode = NewString("parentNode"); k_parentnode = NewString("parentNode");
k_parm = NewString("parm"); k_parm = NewString("parm");
@ -150,8 +152,8 @@ void Swig_keys_init() {
k_public = NewString("public"); k_public = NewString("public");
k_qname = NewString("qname"); k_qname = NewString("qname");
k_qualifier = NewString("qualifier"); k_qualifier = NewString("qualifier");
k_result = NewString("result");
k_rename = NewString("rename"); k_rename = NewString("rename");
k_result = NewString("result");
k_scope = NewString("scope"); k_scope = NewString("scope");
k_self = NewString("self"); k_self = NewString("self");
k_set = NewString("set"); k_set = NewString("set");
@ -184,7 +186,7 @@ void Swig_keys_init() {
k_using = NewString("using"); k_using = NewString("using");
k_value = NewString("value"); k_value = NewString("value");
k_virtual = NewString("virtual"); k_virtual = NewString("virtual");
k_wrapper = NewString("wrapper");
k_wrapaction = NewString("wrap:action"); k_wrapaction = NewString("wrap:action");
k_wrapdisown = NewString("wrap:disown"); k_wrapdisown = NewString("wrap:disown");
k_wrapper = NewString("wrapper");
} }

View file

@ -49,6 +49,7 @@ extern String *k_member;
extern String *k_name; extern String *k_name;
extern String *k_namespace; extern String *k_namespace;
extern String *k_nodetype; extern String *k_nodetype;
extern String *k_notmatch;
extern String *k_parent; extern String *k_parent;
extern String *k_parentnode; extern String *k_parentnode;
extern String *k_parm; extern String *k_parm;
@ -60,8 +61,9 @@ extern String *k_privatebaselist;
extern String *k_protectedbaselist; extern String *k_protectedbaselist;
extern String *k_public; extern String *k_public;
extern String *k_qname; extern String *k_qname;
extern String *k_result; extern String *k_qualifier;
extern String *k_rename; extern String *k_rename;
extern String *k_result;
extern String *k_scope; extern String *k_scope;
extern String *k_self; extern String *k_self;
extern String *k_set; extern String *k_set;
@ -94,9 +96,8 @@ extern String *k_uname;
extern String *k_using; extern String *k_using;
extern String *k_value; extern String *k_value;
extern String *k_virtual; extern String *k_virtual;
extern String *k_wrapper;
extern String *k_wrapaction; extern String *k_wrapaction;
extern String *k_wrapdisown; extern String *k_wrapdisown;
extern String *k_qualifier; extern String *k_wrapper;
#endif /* __Swig_swigkeys_h__ */ #endif /* __Swig_swigkeys_h__ */