cosmetics + docs

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8176 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2006-01-02 09:48:20 +00:00
commit d8df17c6f5

View file

@ -495,13 +495,8 @@ Swig_name_object_get(Hash *namehash, String *prefix, String *name, SwigType *dec
} }
Delete(t_prefix); Delete(t_prefix);
} }
/* A wildcard-based class lookup */ }
if (!rn) { /* A wildcard-based class lookup */
if (!Equal(name,k_start)) {
rn = Swig_name_object_get(namehash, prefix, k_start, decl);
}
}
}
if (!rn) { if (!rn) {
Clear(tname); Clear(tname);
Printf(tname,"*::%s",name); Printf(tname,"*::%s",name);
@ -517,9 +512,6 @@ Swig_name_object_get(Hash *namehash, String *prefix, String *name, SwigType *dec
if (!rn) { if (!rn) {
rn = name_object_get(namehash, name, decl, ncdecl); rn = name_object_get(namehash, name, decl, ncdecl);
} }
if (!rn) {
rn = name_object_get(namehash, k_start, decl, ncdecl);
}
Delete(tname); Delete(tname);
return rn; return rn;
} }
@ -776,10 +768,11 @@ Swig_feature_set(Hash *features, const String_or_char *name, SwigType *decl, con
} }
} }
/* -----------------------------------------------------------------------------
/* * The rename/namewarn engine
The rename/namewarn engine *
*/ * Code below was in parser.y for a while
* ----------------------------------------------------------------------------- */
static Hash *namewarn_hash = 0; static Hash *namewarn_hash = 0;
Hash *Swig_name_namewarn_hash() { Hash *Swig_name_namewarn_hash() {
@ -805,7 +798,6 @@ List *Swig_name_rename_list() {
return rename_list; return rename_list;
} }
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* int Swig_need_name_warning(Node *n) * int Swig_need_name_warning(Node *n)
* *
@ -837,8 +829,10 @@ int Swig_need_name_warning(Node *n)
} }
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* Swig_nodes_are_equivalent(Node* a, Node* b, int a_inclass) * int Swig_need_redefined_warn()
* Restores attributes saved by a previous call to Swig_require() or Swig_save(). *
* Detects when a redefined object needs a warning
*
* ----------------------------------------------------------------------------- */ * ----------------------------------------------------------------------------- */
static int nodes_are_equivalent(Node* a, Node* b, int a_inclass) static int nodes_are_equivalent(Node* a, Node* b, int a_inclass)
@ -960,6 +954,34 @@ int Swig_need_protected(Node* n)
return 0; return 0;
} }
/* -----------------------------------------------------------------------------
* void Swig_name_nameobj_add()
*
* Add nameobj (rename/namewarn)
*
* ----------------------------------------------------------------------------- */
static List *Swig_make_attrlist(const char *ckey) {
List *list = NewList();
const char *cattr = strstr(ckey,"$");
if (cattr) {
String *nattr;
const char *rattr = strstr(++cattr,"$");
while (rattr) {
nattr = NewStringWithSize(cattr, rattr-cattr);
Append(list,nattr);
Delete(nattr);
cattr = rattr + 1;
rattr = strstr(cattr,"$");
}
nattr = NewString(cattr);
Append(list,nattr);
Delete(nattr);
} else {
Append(list,k_nodetype);
}
return list;
}
static void Swig_name_object_attach_keys(const char *keys[], Hash *nameobj) static void Swig_name_object_attach_keys(const char *keys[], Hash *nameobj)
{ {
@ -972,8 +994,12 @@ static void Swig_name_object_attach_keys(const char *keys[], Hash *nameobj)
if (ckey) { if (ckey) {
const char **rkey; const char **rkey;
if (strncmp(ckey,"match",5) == 0) { if (strncmp(ckey,"match",5) == 0) {
Hash *mi = NewHash();
if (!matchlist) matchlist = NewList(); if (!matchlist) matchlist = NewList();
Append(matchlist,kw); Setattr(mi,k_value,Getattr(kw,k_value));
Setattr(mi,k_attrlist,Swig_make_attrlist(ckey));
Append(matchlist,mi);
Delete(mi);
deleteNode(kw); deleteNode(kw);
} else { } else {
for (rkey = keys; *rkey != 0; ++rkey) { for (rkey = keys; *rkey != 0; ++rkey) {
@ -990,16 +1016,11 @@ static void Swig_name_object_attach_keys(const char *keys[], Hash *nameobj)
Setattr(nameobj,k_matchlist,matchlist); Setattr(nameobj,k_matchlist,matchlist);
Delete(matchlist); Delete(matchlist);
} }
} }
void Swig_name_nameobj_add(Hash *name_hash, List *name_list,
String *prefix, const char *name, SwigType *decl, Hash *nameobj) {
void
Swig_name_nameobj_add(Hash *name_hash, List *name_list,
String *prefix, const char *name, SwigType *decl, Hash *nameobj) {
String *nname = 0; String *nname = 0;
if (name && Len(name)) { if (name && Len(name)) {
String *target_fmt = Getattr(nameobj,k_targetfmt); String *target_fmt = Getattr(nameobj,k_targetfmt);
nname = prefix ? NewStringf("%s::%s",prefix, name) : NewString(name); nname = prefix ? NewStringf("%s::%s",prefix, name) : NewString(name);
@ -1008,8 +1029,7 @@ Swig_name_nameobj_add(Hash *name_hash, List *name_list,
Delete(nname); Delete(nname);
nname = tmp; nname = tmp;
} }
} }
if (!nname || !Len(nname) || Getattr(nameobj,k_sourcefmt) || Getattr(nameobj,k_matchlist)) { if (!nname || !Len(nname) || Getattr(nameobj,k_sourcefmt) || Getattr(nameobj,k_matchlist)) {
if (decl) Setattr(nameobj,k_decl, decl); if (decl) Setattr(nameobj,k_decl, decl);
if (nname && Len(nname)) Setattr(nameobj,k_targetname, nname); if (nname && Len(nname)) Setattr(nameobj,k_targetname, nname);
@ -1020,52 +1040,53 @@ Swig_name_nameobj_add(Hash *name_hash, List *name_list,
Delete(nname); Delete(nname);
} }
/* -----------------------------------------------------------------------------
* int Swig_name_match_nameobj()
*
* Apply and check the nameobj's math list to the node
*
* ----------------------------------------------------------------------------- */
DOH *Swig_node_getattr(Node *n, const char *cattr) static DOH *Swig_get_lattr(Node *n, List *lattr)
{ {
const char *rattr = strstr(cattr,"$"); DOH *res = 0;
if (rattr) { int ilen = Len(lattr);
String *nattr = NewStringWithSize(cattr, rattr-cattr); int i;
Node *rn = Getattr(n,nattr); for (i = 0; n && (i < ilen); ++i) {
if (rn) { String *nattr = Getitem(lattr,i);
DOH *res = Swig_node_getattr(rn, rattr + 1); res = Getattr(n,nattr);
Delete(nattr); n = res;
return res;
} else {
return 0;
}
} else {
DOH *res = Getattr(n,cattr);
return res;
} }
return res;
} }
int Swig_name_match_nameobj(Hash *rn, Node *n) { int Swig_name_match_nameobj(Hash *rn, Node *n) {
int match = 1; int match = 1;
List *matchlist = HashGetAttr(rn,k_matchlist); List *matchlist = HashGetAttr(rn,k_matchlist);
if (matchlist) { if (matchlist) {
int i;
int ilen = Len(matchlist); int ilen = Len(matchlist);
int i;
for (i = 0; match && (i < ilen); ++i) { for (i = 0; match && (i < ilen); ++i) {
Node *kw = Getitem(matchlist,i); Node *kw = Getitem(matchlist,i);
String *key = Getattr(kw,k_name); List *lattr = Getattr(kw,k_attrlist);
char *ckey = key ? Char(key) : 0; String *nval = Swig_get_lattr(n,lattr);
if (ckey && (strncmp(ckey,"match",5) == 0)) { match = 0;
match = 0; if (nval) {
if (n) { String *kwval = Getattr(kw,k_value);
const char *csep = strstr(ckey,"$"); match = Equal(nval, kwval);
String *nval = csep ? Swig_node_getattr(n,csep + 1) : Getattr(n,k_nodetype);
String *kwval = Getattr(kw,k_value);
if (nval && Equal(nval, kwval)) {
match = 1;
}
}
} }
} }
} }
return match; return match;
} }
/* -----------------------------------------------------------------------------
* Hash *Swig_name_nameobj_lget()
*
* Get a nameobj (rename/namewarn) from the list of filters
*
* ----------------------------------------------------------------------------- */
Hash *Swig_name_nameobj_lget(List *namelist, Node *n, String *prefix, String *name, String *decl) { Hash *Swig_name_nameobj_lget(List *namelist, Node *n, String *prefix, String *name, String *decl) {
Hash *res = 0; Hash *res = 0;
if (namelist) { if (namelist) {
@ -1107,6 +1128,12 @@ Hash *Swig_name_nameobj_lget(List *namelist, Node *n, String *prefix, String *na
return res; return res;
} }
/* -----------------------------------------------------------------------------
* Swig_name_namewarn_add
*
* Add a namewarn objects
*
* ----------------------------------------------------------------------------- */
void Swig_name_namewarn_add(String *prefix, String *name, SwigType *decl, Hash *namewrn) { void Swig_name_namewarn_add(String *prefix, String *name, SwigType *decl, Hash *namewrn) {
const char *namewrn_keys[] = {"rename", "error", "fullname", "sourcefmt", "targetfmt", 0}; const char *namewrn_keys[] = {"rename", "error", "fullname", "sourcefmt", "targetfmt", 0};
@ -1115,7 +1142,13 @@ void Swig_name_namewarn_add(String *prefix, String *name, SwigType *decl, Hash *
prefix, name, decl, namewrn); prefix, name, decl, namewrn);
} }
/* Return the node name when it requires to emit a name warning */ /* -----------------------------------------------------------------------------
* Hash *Swig_name_namewarn_get()
*
* Return the namewarn object, if there is one.
*
* ----------------------------------------------------------------------------- */
Hash *Swig_name_namewarn_get(Node *n, String *prefix, String *name,SwigType *decl) { Hash *Swig_name_namewarn_get(Node *n, String *prefix, String *name,SwigType *decl) {
if (!namewarn_hash && !namewarn_list) return 0; if (!namewarn_hash && !namewarn_list) return 0;
if (n) { if (n) {
@ -1150,12 +1183,24 @@ Hash *Swig_name_namewarn_get(Node *n, String *prefix, String *name,SwigType *dec
} }
} }
/* -----------------------------------------------------------------------------
* String *Swig_name_warning()
*
* Return the name warning, if there is one.
*
* ----------------------------------------------------------------------------- */
String *Swig_name_warning(Node *n, String *prefix, String *name,SwigType *decl) { String *Swig_name_warning(Node *n, String *prefix, String *name,SwigType *decl) {
Hash *wrn = Swig_name_namewarn_get(n, prefix, name,decl); Hash *wrn = Swig_name_namewarn_get(n, prefix, name,decl);
return (name && wrn) ? HashGetAttr(wrn,k_name) : 0; return (name && wrn) ? HashGetAttr(wrn,k_name) : 0;
} }
/* -----------------------------------------------------------------------------
* Swig_name_rename_add()
*
* Manage the rename objects
*
* ----------------------------------------------------------------------------- */
static void single_rename_add(String *prefix, String *name, SwigType *decl, Hash *newname) { static void single_rename_add(String *prefix, String *name, SwigType *decl, Hash *newname) {
Swig_name_nameobj_add(Swig_name_rename_hash(), Swig_name_rename_list(), Swig_name_nameobj_add(Swig_name_rename_hash(), Swig_name_rename_list(),
@ -1201,6 +1246,12 @@ void Swig_name_rename_add(String *prefix, String *name, SwigType *decl, Hash *ne
} }
} }
/* -----------------------------------------------------------------------------
* String *Swig_name_make()
*
* Make a name after applying all the rename/namewarn objects
*
* ----------------------------------------------------------------------------- */
/* Create a name applying rename/namewarn if needed */ /* Create a name applying rename/namewarn if needed */
static String *apply_rename(String *newname, int fullname, String *prefix, String *name) static String *apply_rename(String *newname, int fullname, String *prefix, String *name)
@ -1250,7 +1301,6 @@ Swig_name_make(Node *n, String *prefix, String *name, SwigType *decl, String *ol
int fullname = GetFlag(rn,k_fullname); int fullname = GetFlag(rn,k_fullname);
result = apply_rename(newname, fullname, prefix, name); result = apply_rename(newname, fullname, prefix, name);
} }
nname = result ? result : name; nname = result ? result : name;
wrn = Swig_name_namewarn_get(n, prefix, nname, decl); wrn = Swig_name_namewarn_get(n, prefix, nname, decl);
if (wrn) { if (wrn) {
@ -1282,9 +1332,12 @@ Swig_name_make(Node *n, String *prefix, String *name, SwigType *decl, String *ol
return result; return result;
} }
/* -----------------------------------------------------------------------------
* void Swig_name_inherit()
*
* Inherit namewarn,rename, and feature objects
*
* ----------------------------------------------------------------------------- */
void Swig_name_inherit(String *base, String *derived) { void Swig_name_inherit(String *base, String *derived) {
/* Printf(stdout,"base = '%s', derived = '%s'\n", base, derived); */ /* Printf(stdout,"base = '%s', derived = '%s'\n", base, derived); */