diff options
author | Michael Snyder <msnyder@vmware.com> | 2010-12-31 22:59:52 +0000 |
---|---|---|
committer | Michael Snyder <msnyder@vmware.com> | 2010-12-31 22:59:52 +0000 |
commit | aff410f1800950c650dc4fbaf32aff513e12cf54 (patch) | |
tree | ccbb04845548c63f54fd29d50becca48c7344a91 /gdb/cp-support.c | |
parent | db09a73fa458397672fa1f7b30932f904fabadd0 (diff) | |
download | gdb-aff410f1800950c650dc4fbaf32aff513e12cf54.zip gdb-aff410f1800950c650dc4fbaf32aff513e12cf54.tar.gz gdb-aff410f1800950c650dc4fbaf32aff513e12cf54.tar.bz2 |
2010-12-31 Michael Snyder <msnyder@vmware.com>
* charset.c: Comment cleanup and long line wrapping.
* charset.h: Ditto.
* c-lang.c: Ditto.
* c-lang.h: Ditto.
* coff-pe-read.c: Ditto.
* coff-pe-read.h: Ditto.
* coffread.c: Ditto.
* command.h: Ditto.
* complaints.c: Ditto.
* complaints.h: Ditto.
* completer.c: Ditto.
* completer.h: Ditto.
* corefile.c: Ditto.
* corelow.c: Ditto.
* core-regset.c: Ditto.
* cp-abi.c: Ditto.
* cp-abi.h: Ditto.
* cp-namespace.c: Ditto.
* cp-support.c: Ditto.
* cp-support.h: Ditto.
* cp-valprint.c: Ditto.
* cp-typeprint.c: Ditto.
* c-valprint.c: Ditto.
Diffstat (limited to 'gdb/cp-support.c')
-rw-r--r-- | gdb/cp-support.c | 163 |
1 files changed, 97 insertions, 66 deletions
diff --git a/gdb/cp-support.c b/gdb/cp-support.c index ad1fb06..f849a46 100644 --- a/gdb/cp-support.c +++ b/gdb/cp-support.c @@ -74,14 +74,15 @@ static void maint_cplus_command (char *arg, int from_tty); static void first_component_command (char *arg, int from_tty); /* Operator validation. - NOTE: Multi-byte operators (usually the assignment variety operator) - must appear before the single byte version, i.e., "+=" before "+". */ + NOTE: Multi-byte operators (usually the assignment variety + operator) must appear before the single byte version, i.e., "+=" + before "+". */ static const char *operator_tokens[] = { - "++", "+=", "+", "->*", "->", "--", "-=", "-", "*=", "*", "/=", "/", - "%=", "%", "!=", "==", "!", "&&", "<<=", "<<", ">>=", ">>", - "<=", "<", ">=", ">", "~", "&=", "&", "|=", "||", "|", "^=", "^", - "=", "()", "[]", ",", "new", "delete" + "++", "+=", "+", "->*", "->", "--", "-=", "-", "*=", "*", + "/=", "/", "%=", "%", "!=", "==", "!", "&&", "<<=", "<<", + ">>=", ">>", "<=", "<", ">=", ">", "~", "&=", "&", "|=", + "||", "|", "^=", "^", "=", "()", "[]", ",", "new", "delete" /* new[] and delete[] require special whitespace handling */ }; @@ -146,11 +147,11 @@ cp_canonicalize_string (const char *string) return ret; } -/* Convert a mangled name to a demangle_component tree. *MEMORY is set to the - block of used memory that should be freed when finished with the tree. - DEMANGLED_P is set to the char * that should be freed when finished with - the tree, or NULL if none was needed. OPTIONS will be passed to the - demangler. */ +/* Convert a mangled name to a demangle_component tree. *MEMORY is + set to the block of used memory that should be freed when finished + with the tree. DEMANGLED_P is set to the char * that should be + freed when finished with the tree, or NULL if none was needed. + OPTIONS will be passed to the demangler. */ static struct demangle_component * mangled_name_to_comp (const char *mangled_name, int options, @@ -163,7 +164,8 @@ mangled_name_to_comp (const char *mangled_name, int options, to trees. */ if (mangled_name[0] == '_' && mangled_name[1] == 'Z') { - ret = cplus_demangle_v3_components (mangled_name, options, memory); + ret = cplus_demangle_v3_components (mangled_name, + options, memory); if (ret) { *demangled_p = NULL; @@ -171,12 +173,14 @@ mangled_name_to_comp (const char *mangled_name, int options, } } - /* If it doesn't, or if that failed, then try to demangle the name. */ + /* If it doesn't, or if that failed, then try to demangle the + name. */ demangled_name = cplus_demangle (mangled_name, options); if (demangled_name == NULL) return NULL; - /* If we could demangle the name, parse it to build the component tree. */ + /* If we could demangle the name, parse it to build the component + tree. */ ret = cp_demangled_name_to_comp (demangled_name, NULL); if (ret == NULL) @@ -199,14 +203,15 @@ cp_class_name_from_physname (const char *physname) struct demangle_component *ret_comp, *prev_comp, *cur_comp; int done; - ret_comp = mangled_name_to_comp (physname, DMGL_ANSI, &storage, - &demangled_name); + ret_comp = mangled_name_to_comp (physname, DMGL_ANSI, + &storage, &demangled_name); if (ret_comp == NULL) return NULL; done = 0; - /* First strip off any qualifiers, if we have a function or method. */ + /* First strip off any qualifiers, if we have a function or + method. */ while (!done) switch (ret_comp->type) { @@ -233,9 +238,9 @@ cp_class_name_from_physname (const char *physname) if (ret_comp->type == DEMANGLE_COMPONENT_TEMPLATE) ret_comp = d_left (ret_comp); - /* What we have now should be a name, possibly qualified. Additional - qualifiers could live in the left subtree or the right subtree. Find - the last piece. */ + /* What we have now should be a name, possibly qualified. + Additional qualifiers could live in the left subtree or the right + subtree. Find the last piece. */ done = 0; prev_comp = NULL; cur_comp = ret_comp; @@ -266,7 +271,8 @@ cp_class_name_from_physname (const char *physname) { /* We want to discard the rightmost child of PREV_COMP. */ *prev_comp = *d_left (prev_comp); - /* The ten is completely arbitrary; we don't have a good estimate. */ + /* The ten is completely arbitrary; we don't have a good + estimate. */ ret = cp_comp_to_string (ret_comp, 10); } @@ -276,9 +282,10 @@ cp_class_name_from_physname (const char *physname) return ret; } -/* Return the child of COMP which is the basename of a method, variable, - et cetera. All scope qualifiers are discarded, but template arguments - will be included. The component tree may be modified. */ +/* Return the child of COMP which is the basename of a method, + variable, et cetera. All scope qualifiers are discarded, but + template arguments will be included. The component tree may be + modified. */ static struct demangle_component * unqualified_name_from_comp (struct demangle_component *comp) @@ -342,8 +349,8 @@ method_name_from_physname (const char *physname) char *demangled_name = NULL, *ret; struct demangle_component *ret_comp; - ret_comp = mangled_name_to_comp (physname, DMGL_ANSI, &storage, - &demangled_name); + ret_comp = mangled_name_to_comp (physname, DMGL_ANSI, + &storage, &demangled_name); if (ret_comp == NULL) return NULL; @@ -351,7 +358,8 @@ method_name_from_physname (const char *physname) ret = NULL; if (ret_comp != NULL) - /* The ten is completely arbitrary; we don't have a good estimate. */ + /* The ten is completely arbitrary; we don't have a good + estimate. */ ret = cp_comp_to_string (ret_comp, 10); xfree (storage); @@ -551,7 +559,8 @@ cp_find_first_component_aux (const char *name, int permissive) case 'o': /* Operator names can screw up the recursion. */ if (operator_possible - && strncmp (name + index, "operator", LENGTH_OF_OPERATOR) == 0) + && strncmp (name + index, "operator", + LENGTH_OF_OPERATOR) == 0) { index += LENGTH_OF_OPERATOR; while (ISSPACE(name[index])) @@ -641,20 +650,22 @@ cp_entire_prefix_len (const char *name) /* Test to see if SYM is a symbol that we haven't seen corresponding to a function named OLOAD_NAME. If so, add it to the current - completion list. */ + completion list. */ static void -overload_list_add_symbol (struct symbol *sym, const char *oload_name) +overload_list_add_symbol (struct symbol *sym, + const char *oload_name) { int newsize; int i; char *sym_name; - /* If there is no type information, we can't do anything, so skip */ + /* If there is no type information, we can't do anything, so + skip. */ if (SYMBOL_TYPE (sym) == NULL) return; - /* skip any symbols that we've already considered. */ + /* skip any symbols that we've already considered. */ for (i = 0; i < sym_return_val_index; ++i) if (strcmp (SYMBOL_LINKAGE_NAME (sym), SYMBOL_LINKAGE_NAME (sym_return_val[i])) == 0) @@ -674,12 +685,13 @@ overload_list_add_symbol (struct symbol *sym, const char *oload_name) xfree (sym_name); - /* We have a match for an overload instance, so add SYM to the current list - * of overload instances */ + /* We have a match for an overload instance, so add SYM to the + current list of overload instances */ if (sym_return_val_index + 3 > sym_return_val_size) { newsize = (sym_return_val_size *= 2) * sizeof (struct symbol *); - sym_return_val = (struct symbol **) xrealloc ((char *) sym_return_val, newsize); + sym_return_val = (struct symbol **) + xrealloc ((char *) sym_return_val, newsize); } sym_return_val[sym_return_val_index++] = sym; sym_return_val[sym_return_val_index] = NULL; @@ -774,8 +786,8 @@ make_symbol_overload_list_namespace (const char *func_name, } -/* Search the namespace of the given type and namespace of and public base - types. */ +/* Search the namespace of the given type and namespace of and public + base types. */ static void make_symbol_overload_list_adl_namespace (struct type *type, @@ -785,7 +797,8 @@ make_symbol_overload_list_adl_namespace (struct type *type, char *type_name; int i, prefix_len; - while (TYPE_CODE (type) == TYPE_CODE_PTR || TYPE_CODE (type) == TYPE_CODE_REF + while (TYPE_CODE (type) == TYPE_CODE_PTR + || TYPE_CODE (type) == TYPE_CODE_REF || TYPE_CODE (type) == TYPE_CODE_ARRAY || TYPE_CODE (type) == TYPE_CODE_TYPEDEF) { @@ -816,13 +829,14 @@ make_symbol_overload_list_adl_namespace (struct type *type, for (i = 0; i < TYPE_N_BASECLASSES (type); i++) { if (BASETYPE_VIA_PUBLIC (type, i)) - make_symbol_overload_list_adl_namespace (TYPE_BASECLASS (type, i), + make_symbol_overload_list_adl_namespace (TYPE_BASECLASS (type, + i), func_name); } } -/* Adds the the overload list overload candidates for FUNC_NAME found through - argument dependent lookup. */ +/* Adds the the overload list overload candidates for FUNC_NAME found + through argument dependent lookup. */ struct symbol ** make_symbol_overload_list_adl (struct type **arg_types, int nargs, @@ -833,12 +847,14 @@ make_symbol_overload_list_adl (struct type **arg_types, int nargs, gdb_assert (sym_return_val_size != -1); for (i = 1; i <= nargs; i++) - make_symbol_overload_list_adl_namespace (arg_types[i - 1], func_name); + make_symbol_overload_list_adl_namespace (arg_types[i - 1], + func_name); return sym_return_val; } -/* Used for cleanups to reset the "searched" flag in case of an error. */ +/* Used for cleanups to reset the "searched" flag in case of an + error. */ static void reset_directive_searched (void *data) @@ -874,19 +890,22 @@ make_symbol_overload_list_using (const char *func_name, if (current->searched) continue; - /* If this is a namespace alias or imported declaration ignore it. */ + /* If this is a namespace alias or imported declaration ignore + it. */ if (current->alias != NULL || current->declaration != NULL) continue; if (strcmp (namespace, current->import_dest) == 0) { - /* Mark this import as searched so that the recursive call does - not search it again. */ + /* Mark this import as searched so that the recursive call + does not search it again. */ struct cleanup *old_chain; current->searched = 1; - old_chain = make_cleanup (reset_directive_searched, current); + old_chain = make_cleanup (reset_directive_searched, + current); - make_symbol_overload_list_using (func_name, current->import_src); + make_symbol_overload_list_using (func_name, + current->import_src); current->searched = 0; discard_cleanups (old_chain); @@ -911,8 +930,8 @@ make_symbol_overload_list_qualified (const char *func_name) struct dict_iterator iter; const struct dictionary *dict; - /* Look through the partial symtabs for all symbols which begin - by matching FUNC_NAME. Make sure we read that symbol table in. */ + /* Look through the partial symtabs for all symbols which begin by + matching FUNC_NAME. Make sure we read that symbol table in. */ ALL_OBJFILES (objfile) { @@ -949,7 +968,7 @@ make_symbol_overload_list_qualified (const char *func_name) } } -/* Lookup the rtti type for a class name. */ +/* Lookup the rtti type for a class name. */ struct type * cp_lookup_rtti_type (const char *name, struct block *block) @@ -998,7 +1017,9 @@ static void maint_cplus_command (char *arg, int from_tty) { printf_unfiltered (_("\"maintenance cplus\" must be followed by the name of a command.\n")); - help_list (maint_cplus_cmd_list, "maintenance cplus ", -1, gdb_stdout); + help_list (maint_cplus_cmd_list, + "maintenance cplus ", + -1, gdb_stdout); } /* This is a front end for cp_find_first_component, for unit testing. @@ -1034,7 +1055,8 @@ extern initialize_file_ftype _initialize_cp_support; /* -Wmissing-prototypes */ while (0) /* Returns the length of the operator name or 0 if INPUT does not - point to a valid C++ operator. INPUT should start with "operator". */ + point to a valid C++ operator. INPUT should start with + "operator". */ int cp_validate_operator (const char *input) { @@ -1053,13 +1075,15 @@ cp_validate_operator (const char *input) p += 8; SKIP_SPACE (p); - for (i = 0; i < sizeof (operator_tokens) / sizeof (operator_tokens[0]); + for (i = 0; + i < sizeof (operator_tokens) / sizeof (operator_tokens[0]); ++i) { int length = strlen (operator_tokens[i]); - /* By using strncmp here, we MUST have operator_tokens ordered! - See additional notes where operator_tokens is defined above. */ + /* By using strncmp here, we MUST have operator_tokens + ordered! See additional notes where operator_tokens is + defined above. */ if (strncmp (p, operator_tokens[i], length) == 0) { const char *op = p; @@ -1071,8 +1095,8 @@ cp_validate_operator (const char *input) || strncmp (op, "delete", 6) == 0) { - /* Special case: new[] and delete[]. We must be careful - to swallow whitespace before/in "[]". */ + /* Special case: new[] and delete[]. We must be + careful to swallow whitespace before/in "[]". */ SKIP_SPACE (p); if (*p == '[') @@ -1093,12 +1117,12 @@ cp_validate_operator (const char *input) /* Check input for a conversion operator. */ - /* Skip past base typename */ + /* Skip past base typename. */ while (*p != '*' && *p != '&' && *p != 0 && *p != ' ') ++p; SKIP_SPACE (p); - /* Add modifiers '*'/'&' */ + /* Add modifiers '*' / '&'. */ while (*p == '*' || *p == '&') { ++p; @@ -1130,12 +1154,19 @@ cp_validate_operator (const char *input) void _initialize_cp_support (void) { - add_prefix_cmd ("cplus", class_maintenance, maint_cplus_command, - _("C++ maintenance commands."), &maint_cplus_cmd_list, - "maintenance cplus ", 0, &maintenancelist); - add_alias_cmd ("cp", "cplus", class_maintenance, 1, &maintenancelist); - - add_cmd ("first_component", class_maintenance, first_component_command, + add_prefix_cmd ("cplus", class_maintenance, + maint_cplus_command, + _("C++ maintenance commands."), + &maint_cplus_cmd_list, + "maintenance cplus ", + 0, &maintenancelist); + add_alias_cmd ("cp", "cplus", + class_maintenance, 1, + &maintenancelist); + + add_cmd ("first_component", + class_maintenance, + first_component_command, _("Print the first class/namespace component of NAME."), &maint_cplus_cmd_list); } |