diff options
Diffstat (limited to 'Source/Modules/typepass.cxx')
-rw-r--r-- | Source/Modules/typepass.cxx | 277 |
1 files changed, 137 insertions, 140 deletions
diff --git a/Source/Modules/typepass.cxx b/Source/Modules/typepass.cxx index e5c6d2c05..6954e0dd2 100644 --- a/Source/Modules/typepass.cxx +++ b/Source/Modules/typepass.cxx @@ -476,11 +476,10 @@ class TypePass:private Dispatcher { if (unnamed && tdname && (Cmp(storage, "typedef") == 0)) { SwigType_typedef(unnamed, tdname); } - // name of the outer class should already be patched to contain it's outer classes names, but not to contain namespaces // namespace name (if present) is added after processing child nodes if (Getattr(n, "nested:outer") && name) { - String* outerName = Getattr(Getattr(n, "nested:outer"), "name"); + String *outerName = Getattr(Getattr(n, "nested:outer"), "name"); name = NewStringf("%s::%s", outerName, name); Setattr(n, "name", name); if (tdname) { @@ -679,7 +678,7 @@ class TypePass:private Dispatcher { if (GetFlag(n, "conversion_operator")) { /* The call to the operator in the generated wrapper must be fully qualified in order to compile */ SwigType *name = Getattr(n, "name"); - SwigType *qualifiedname = Swig_symbol_string_qualify(name,0); + SwigType *qualifiedname = Swig_symbol_string_qualify(name, 0); Clear(name); Append(name, qualifiedname); Delete(qualifiedname); @@ -1116,8 +1115,7 @@ class TypePass:private Dispatcher { * list of overloaded methods we have just added in as child nodes to the "using" node. * The node will still exist, it is just the symbol table linked list of overloaded methods * which is hacked. */ - if (Getattr(n, "sym:overloaded")) - { + if (Getattr(n, "sym:overloaded")) { int cnt = 0; #ifdef DEBUG_OVERLOADED Node *debugnode = n; @@ -1180,7 +1178,7 @@ class TypePass:private Dispatcher { #ifdef DEBUG_OVERLOADED show_overloaded(debugnode); #endif - clean_overloaded(n); // Needed? + clean_overloaded(n); // Needed? } } } @@ -1286,21 +1284,22 @@ void Swig_process_types(Node *n) { } // Nested classes processing section -static Hash* classhash = 0; +static Hash *classhash = 0; -static String *make_name(Node *n, String *name,SwigType *decl) { +static String *make_name(Node *n, String *name, SwigType *decl) { int destructor = name && (*(Char(name)) == '~'); - if (String* yyrename = Getattr(n, "class_rename")) { + if (String *yyrename = Getattr(n, "class_rename")) { String *s = NewString(yyrename); Delattr(n, "class_rename"); - if (destructor && (*(Char(s)) != '~')) { - Insert(s,0,"~"); + if (destructor && (*(Char(s)) != '~')) { + Insert(s, 0, "~"); } return s; } - if (!name) return 0; - return Swig_name_make(n,0,name,decl,0); + if (!name) + return 0; + return Swig_name_make(n, 0, name, decl, 0); } // C version of add_symbols() @@ -1308,73 +1307,74 @@ static void add_symbols_c(Node *n) { String *decl; String *wrn = 0; String *symname = 0; - int iscdecl = Cmp(nodeType(n),"cdecl") == 0; - Setattr(n,"ismember","1"); - Setattr(n,"access", "public"); - if (Getattr(n,"sym:name")) + int iscdecl = Cmp(nodeType(n), "cdecl") == 0; + Setattr(n, "ismember", "1"); + Setattr(n, "access", "public"); + if (Getattr(n, "sym:name")) return; - decl = Getattr(n,"decl"); + decl = Getattr(n, "decl"); if (!SwigType_isfunction(decl)) { - String *name = Getattr(n,"name"); - String *makename = Getattr(n,"parser:makename"); + String *name = Getattr(n, "name"); + String *makename = Getattr(n, "parser:makename"); if (iscdecl) { String *storage = Getattr(n, "storage"); - if (Cmp(storage,"typedef") == 0) { - Setattr(n,"kind","typedef"); + if (Cmp(storage, "typedef") == 0) { + Setattr(n, "kind", "typedef"); } else { - SwigType *type = Getattr(n,"type"); - String *value = Getattr(n,"value"); - Setattr(n,"kind","variable"); + SwigType *type = Getattr(n, "type"); + String *value = Getattr(n, "value"); + Setattr(n, "kind", "variable"); if (value && Len(value)) { - Setattr(n,"hasvalue","1"); + Setattr(n, "hasvalue", "1"); } if (type) { SwigType *ty; SwigType *tmp = 0; if (decl) { ty = tmp = Copy(type); - SwigType_push(ty,decl); + SwigType_push(ty, decl); } else { ty = type; } if (!SwigType_ismutable(ty)) { - SetFlag(n,"hasconsttype"); - SetFlag(n,"feature:immutable"); + SetFlag(n, "hasconsttype"); + SetFlag(n, "feature:immutable"); } - if (tmp) Delete(tmp); + if (tmp) + Delete(tmp); } if (!type) { - Printf(stderr,"notype name %s\n", name); + Printf(stderr, "notype name %s\n", name); } } } Swig_features_get(Swig_cparse_features(), 0, name, 0, n); if (makename) { symname = make_name(n, makename, 0); - Delattr(n,"parser:makename"); /* temporary information, don't leave it hanging around */ + Delattr(n, "parser:makename"); /* temporary information, don't leave it hanging around */ } else { makename = name; symname = make_name(n, makename, 0); } if (!symname) { - symname = Copy(Getattr(n,"unnamed")); + symname = Copy(Getattr(n, "unnamed")); } if (symname) { - wrn = Swig_name_warning(n, 0, symname,0); + wrn = Swig_name_warning(n, 0, symname, 0); } } else { - String *name = Getattr(n,"name"); + String *name = Getattr(n, "name"); SwigType *fdecl = Copy(decl); SwigType *fun = SwigType_pop_function(fdecl); if (iscdecl) { - Setattr(n,"kind","function"); + Setattr(n, "kind", "function"); } - Swig_features_get(Swig_cparse_features(),0,name,fun,n); + Swig_features_get(Swig_cparse_features(), 0, name, fun, n); symname = make_name(n, name, fun); - wrn = Swig_name_warning(n, 0, symname,fun); + wrn = Swig_name_warning(n, 0, symname, fun); Delete(fdecl); Delete(fun); @@ -1382,15 +1382,15 @@ static void add_symbols_c(Node *n) { } if (!symname) return; - if (GetFlag(n,"feature:ignore")) { + if (GetFlag(n, "feature:ignore")) { /* Only add to C symbol table and continue */ Swig_symbol_add(0, n); - } else if (strncmp(Char(symname),"$ignore",7) == 0) { - char *c = Char(symname)+7; - SetFlag(n,"feature:ignore"); + } else if (strncmp(Char(symname), "$ignore", 7) == 0) { + char *c = Char(symname) + 7; + SetFlag(n, "feature:ignore"); if (strlen(c)) { SWIG_WARN_NODE_BEGIN(n); - Swig_warning(0,Getfile(n), Getline(n), "%s\n",c+1); + Swig_warning(0, Getfile(n), Getline(n), "%s\n", c + 1); SWIG_WARN_NODE_END(n); } Swig_symbol_add(0, n); @@ -1398,51 +1398,50 @@ static void add_symbols_c(Node *n) { Node *c; if ((wrn) && (Len(wrn))) { String *metaname = symname; - if (!Getmeta(metaname,"already_warned")) { + if (!Getmeta(metaname, "already_warned")) { SWIG_WARN_NODE_BEGIN(n); - Swig_warning(0,Getfile(n),Getline(n), "%s\n", wrn); + Swig_warning(0, Getfile(n), Getline(n), "%s\n", wrn); SWIG_WARN_NODE_END(n); - Setmeta(metaname,"already_warned","1"); + Setmeta(metaname, "already_warned", "1"); } } - c = Swig_symbol_add(symname,n); + c = Swig_symbol_add(symname, n); if (c != n) { /* symbol conflict attempting to add in the new symbol */ - if (Getattr(n,"sym:weak")) { - Setattr(n,"sym:name",symname); + if (Getattr(n, "sym:weak")) { + Setattr(n, "sym:name", symname); } else { String *e = NewStringEmpty(); String *en = NewStringEmpty(); String *ec = NewStringEmpty(); - int redefined = Swig_need_redefined_warn(n,c,true); + int redefined = Swig_need_redefined_warn(n, c, true); if (redefined) { - Printf(en,"Identifier '%s' redefined (ignored)",symname); - Printf(ec,"previous definition of '%s'",symname); + Printf(en, "Identifier '%s' redefined (ignored)", symname); + Printf(ec, "previous definition of '%s'", symname); } else { - Printf(en,"Redundant redeclaration of '%s'",symname); - Printf(ec,"previous declaration of '%s'",symname); + Printf(en, "Redundant redeclaration of '%s'", symname); + Printf(ec, "previous declaration of '%s'", symname); } - if (Cmp(symname,Getattr(n,"name"))) { - Printf(en," (Renamed from '%s')", SwigType_namestr(Getattr(n,"name"))); + if (Cmp(symname, Getattr(n, "name"))) { + Printf(en, " (Renamed from '%s')", SwigType_namestr(Getattr(n, "name"))); } - Printf(en,","); - if (Cmp(symname,Getattr(c,"name"))) { - Printf(ec," (Renamed from '%s')", SwigType_namestr(Getattr(c,"name"))); + Printf(en, ","); + if (Cmp(symname, Getattr(c, "name"))) { + Printf(ec, " (Renamed from '%s')", SwigType_namestr(Getattr(c, "name"))); } - Printf(ec,"."); + Printf(ec, "."); SWIG_WARN_NODE_BEGIN(n); if (redefined) { - Swig_warning(WARN_PARSE_REDEFINED,Getfile(n),Getline(n),"%s\n",en); - Swig_warning(WARN_PARSE_REDEFINED,Getfile(c),Getline(c),"%s\n",ec); + Swig_warning(WARN_PARSE_REDEFINED, Getfile(n), Getline(n), "%s\n", en); + Swig_warning(WARN_PARSE_REDEFINED, Getfile(c), Getline(c), "%s\n", ec); } else { - Swig_warning(WARN_PARSE_REDUNDANT,Getfile(n),Getline(n),"%s\n",en); - Swig_warning(WARN_PARSE_REDUNDANT,Getfile(c),Getline(c),"%s\n",ec); + Swig_warning(WARN_PARSE_REDUNDANT, Getfile(n), Getline(n), "%s\n", en); + Swig_warning(WARN_PARSE_REDUNDANT, Getfile(c), Getline(c), "%s\n", ec); } SWIG_WARN_NODE_END(n); - Printf(e,"%s:%d:%s\n%s:%d:%s\n",Getfile(n),Getline(n),en, - Getfile(c),Getline(c),ec); - Setattr(n,"error",e); + Printf(e, "%s:%d:%s\n%s:%d:%s\n", Getfile(n), Getline(n), en, Getfile(c), Getline(c), ec); + Setattr(n, "error", e); Delete(e); Delete(en); Delete(ec); @@ -1454,58 +1453,59 @@ static void add_symbols_c(Node *n) { /* Strips C-style and C++-style comments from string in-place. */ static void strip_comments(char *string) { - int state = 0; /* - * 0 - not in comment - * 1 - in c-style comment - * 2 - in c++-style comment - * 3 - in string - * 4 - after reading / not in comments - * 5 - after reading * in c-style comments - * 6 - after reading \ in strings - */ - char * c = string; + int state = 0; + /* + * 0 - not in comment + * 1 - in c-style comment + * 2 - in c++-style comment + * 3 - in string + * 4 - after reading / not in comments + * 5 - after reading * in c-style comments + * 6 - after reading \ in strings + */ + char *c = string; while (*c) { switch (state) { case 0: if (*c == '\"') - state = 3; + state = 3; else if (*c == '/') - state = 4; + state = 4; break; case 1: if (*c == '*') - state = 5; + state = 5; *c = ' '; break; case 2: if (*c == '\n') - state = 0; + state = 0; else - *c = ' '; + *c = ' '; break; case 3: if (*c == '\"') - state = 0; + state = 0; else if (*c == '\\') - state = 6; + state = 6; break; case 4: if (*c == '/') { - *(c-1) = ' '; - *c = ' '; - state = 2; + *(c - 1) = ' '; + *c = ' '; + state = 2; } else if (*c == '*') { - *(c-1) = ' '; - *c = ' '; - state = 1; + *(c - 1) = ' '; + *c = ' '; + state = 1; } else - state = 0; + state = 0; break; case 5: if (*c == '/') - state = 0; + state = 0; else - state = 1; + state = 1; *c = ' '; break; case 6: @@ -1516,11 +1516,10 @@ static void strip_comments(char *string) { } } -// Create an %insert with a typedef to make a new name visible to C -// the code is moved from parser.y, dump_nested() function with minor changes -static Node* create_insert(Node* n, bool noTypedef = false) { +// Create a %insert with a typedef to make a new name visible to C +static Node *create_insert(Node *n, bool noTypedef = false) { // format a typedef - String* ccode = Getattr(n, "code"); + String *ccode = Getattr(n, "code"); Push(ccode, " "); if (noTypedef) { Push(ccode, Getattr(n, "name")); @@ -1534,19 +1533,18 @@ static Node* create_insert(Node* n, bool noTypedef = false) { } Append(ccode, ";"); - /* Strip comments - further code may break in presence of comments. */ strip_comments(Char(ccode)); /* Make all SWIG created typedef structs/unions/classes unnamed else - redefinition errors occur - nasty hack alert.*/ + redefinition errors occur - nasty hack alert. */ if (!noTypedef) { - const char* types_array[3] = {"struct", "union", "class"}; + const char *types_array[3] = { "struct", "union", "class" }; for (int i = 0; i < 3; i++) { - char* code_ptr = Char(ccode); + char *code_ptr = Char(ccode); while (code_ptr) { /* Replace struct name (as in 'struct name {...}' ) with whitespace - name will be between struct and opening brace */ + name will be between struct and opening brace */ code_ptr = strstr(code_ptr, types_array[i]); if (code_ptr) { @@ -1555,7 +1553,7 @@ static Node* create_insert(Node* n, bool noTypedef = false) { open_bracket_pos = strchr(code_ptr, '{'); if (open_bracket_pos) { /* Make sure we don't have something like struct A a; */ - char* semi_colon_pos = strchr(code_ptr, ';'); + char *semi_colon_pos = strchr(code_ptr, ';'); if (!(semi_colon_pos && (semi_colon_pos < open_bracket_pos))) while (code_ptr < open_bracket_pos) *code_ptr++ = ' '; @@ -1566,11 +1564,11 @@ static Node* create_insert(Node* n, bool noTypedef = false) { } { /* Remove SWIG directive %constant which may be left in the SWIG created typedefs */ - char* code_ptr = Char(ccode); + char *code_ptr = Char(ccode); while (code_ptr) { code_ptr = strstr(code_ptr, "%constant"); if (code_ptr) { - char* directive_end_pos = strchr(code_ptr, ';'); + char *directive_end_pos = strchr(code_ptr, ';'); if (directive_end_pos) { while (code_ptr <= directive_end_pos) *code_ptr++ = ' '; @@ -1578,10 +1576,10 @@ static Node* create_insert(Node* n, bool noTypedef = false) { } } } - Node *newnode = NewHash(); - set_nodeType(newnode ,"insert"); - Setfile(newnode ,Getfile(n)); - Setline(newnode ,Getline(n)); + Node *newnode = NewHash(); + set_nodeType(newnode, "insert"); + Setfile(newnode, Getfile(n)); + Setline(newnode, Getline(n)); String *code = NewStringEmpty(); Wrapper_pretty_print(ccode, code); Setattr(newnode, "code", code); @@ -1590,12 +1588,11 @@ static Node* create_insert(Node* n, bool noTypedef = false) { return newnode; } -static void insertNodeAfter(Node *n, Node* c) -{ - Node* g = parentNode(n); +static void insertNodeAfter(Node *n, Node *c) { + Node *g = parentNode(n); set_parentNode(c, g); - Node* ns = nextSibling(n); - if (Node* outer = Getattr(c, "nested:outer")) { + Node *ns = nextSibling(n); + if (Node *outer = Getattr(c, "nested:outer")) { while (ns && outer == Getattr(ns, "nested:outer")) { n = ns; ns = nextSibling(n); @@ -1603,8 +1600,7 @@ static void insertNodeAfter(Node *n, Node* c) } if (!ns) { set_lastChild(g, c); - } - else { + } else { set_nextSibling(c, ns); set_previousSibling(ns, c); } @@ -1615,36 +1611,36 @@ static void insertNodeAfter(Node *n, Node* c) void Swig_name_unnamed_c_structs(Node *n) { if (!classhash) classhash = Getattr(n, "classes"); - Node* c = firstChild(n); + Node *c = firstChild(n); while (c) { - Node* next = nextSibling(c); - if (String* declName = Getattr(c, "nested:unnamed")) { - if (Node* outer = Getattr(c, "nested:outer")) { + Node *next = nextSibling(c); + if (String *declName = Getattr(c, "nested:unnamed")) { + if (Node *outer = Getattr(c, "nested:outer")) { // generate a name - String* name = NewStringf("%s_%s", Getattr(outer, "name"), declName); + String *name = NewStringf("%s_%s", Getattr(outer, "name"), declName); Delattr(c, "nested:unnamed"); // set the name to the class and symbol table Setattr(c, "tdname", name); Setattr(c, "name", name); - Swig_symbol_setscope(Getattr(c,"symtab")); + Swig_symbol_setscope(Getattr(c, "symtab")); Swig_symbol_setscopename(name); // now that we have a name - gather base symbols - if (List* publicBases = Getattr(c,"baselist")) { - List* bases = Swig_make_inherit_list(name, publicBases, 0); + if (List *publicBases = Getattr(c, "baselist")) { + List *bases = Swig_make_inherit_list(name, publicBases, 0); Swig_inherit_base_symbols(bases); Delete(bases); } - Setattr(classhash,name,c); + Setattr(classhash, name, c); Swig_symbol_popscope(); // process declarations following this type (assign correct new type) - SwigType* ty = Copy(name); - Node* decl = nextSibling(c); - List* declList = NewList(); + SwigType *ty = Copy(name); + Node *decl = nextSibling(c); + List *declList = NewList(); while (decl && Getattr(decl, "nested:unnamedtype") == c) { Setattr(decl, "type", ty); Append(declList, decl); Delattr(decl, "nested:unnamedtype"); - SetFlag(decl, "feature:immutable"); + SetFlag(decl, "feature:immutable"); add_symbols_c(decl); decl = nextSibling(decl); } @@ -1662,20 +1658,20 @@ void Swig_name_unnamed_c_structs(Node *n) { Swig_symbol_setscope(Swig_symbol_global_scope()); add_symbols_c(c); - Node* ins = create_insert(c); + Node *ins = create_insert(c); insertNodeAfter(c, ins); removeNode(c); insertNodeAfter(n, c); Delete(ins); Delattr(c, "nested:outer"); - }else { + } else { // global unnamed struct - ignore it c = next; continue; } } else if (CPlusPlusOut) { if (Getattr(c, "nested:outer")) { - Node* ins = create_insert(c, true); + Node *ins = create_insert(c, true); insertNodeAfter(c, ins); Delete(ins); Delattr(c, "nested:outer"); @@ -1686,23 +1682,24 @@ void Swig_name_unnamed_c_structs(Node *n) { c = next; } } -static void remove_outer_class_reference(Node *n) -{ - for (Node* c = firstChild(n); c; c = nextSibling(c)) { + +static void remove_outer_class_reference(Node *n) { + for (Node *c = firstChild(n); c; c = nextSibling(c)) { if (GetFlag(c, "feature:flatnested")) { Delattr(c, "nested:outer"); remove_outer_class_reference(c); } } } + void Swig_process_nested_classes(Node *n) { - Node* c = firstChild(n); + Node *c = firstChild(n); while (c) { - Node* next = nextSibling(c); - if (!Getattr(c,"templatetype")) { + Node *next = nextSibling(c); + if (!Getattr(c, "templatetype")) { if (GetFlag(c, "nested") && GetFlag(c, "feature:flatnested")) { - removeNode(c); - if (!checkAttribute(c, "access", "public")) + removeNode(c); + if (!checkAttribute(c, "access", "public")) SetFlag(c, "feature:ignore"); else insertNodeAfter(n, c); |