Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: gdb/objc-lang.c

Issue 124383005: GDB 7.6.50 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@upstream
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gdb/objc-lang.h ('k') | gdb/objfiles.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/objc-lang.c
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index 15bf792bc34f7bc14fa20b4ea9289a60467b9846..90c589dc196f07c279016a5befddbbc3db400359 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -1,6 +1,6 @@
/* Objective-C language support routines for GDB, the GNU debugger.
- Copyright (C) 2002-2005, 2007-2012 Free Software Foundation, Inc.
+ Copyright (C) 2002-2013 Free Software Foundation, Inc.
Contributed by Apple Computer, Inc.
Written by Michael Snyder.
@@ -26,6 +26,7 @@
#include "expression.h"
#include "parser-defs.h"
#include "language.h"
+#include "varobj.h"
#include "c-lang.h"
#include "objc-lang.h"
#include "exceptions.h"
@@ -33,7 +34,7 @@
#include "value.h"
#include "symfile.h"
#include "objfiles.h"
-#include "gdb_string.h" /* for strchr */
+#include <string.h> /* for strchr */
#include "target.h" /* for target_has_execution */
#include "gdbcore.h"
#include "gdbcmd.h"
@@ -44,6 +45,7 @@
#include "infcall.h"
#include "valprint.h"
#include "gdb_assert.h"
+#include "cli/cli-utils.h"
#include <ctype.h>
@@ -82,7 +84,7 @@ static const struct objfile_data *objc_objfile_data;
suitably defined. */
struct symbol *
-lookup_struct_typedef (char *name, struct block *block, int noerr)
+lookup_struct_typedef (char *name, const struct block *block, int noerr)
{
struct symbol *sym;
@@ -282,160 +284,6 @@ objc_demangle (const char *mangled, int options)
return NULL; /* Not an objc mangled name. */
}
-/* Print the character C on STREAM as part of the contents of a
- literal string whose delimiter is QUOTER. Note that that format
- for printing characters and strings is language specific. */
-
-static void
-objc_emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
-{
- c &= 0xFF; /* Avoid sign bit follies. */
-
- if (PRINT_LITERAL_FORM (c))
- {
- if (c == '\\' || c == quoter)
- {
- fputs_filtered ("\\", stream);
- }
- fprintf_filtered (stream, "%c", c);
- }
- else
- {
- switch (c)
- {
- case '\n':
- fputs_filtered ("\\n", stream);
- break;
- case '\b':
- fputs_filtered ("\\b", stream);
- break;
- case '\t':
- fputs_filtered ("\\t", stream);
- break;
- case '\f':
- fputs_filtered ("\\f", stream);
- break;
- case '\r':
- fputs_filtered ("\\r", stream);
- break;
- case '\033':
- fputs_filtered ("\\e", stream);
- break;
- case '\007':
- fputs_filtered ("\\a", stream);
- break;
- default:
- fprintf_filtered (stream, "\\%.3o", (unsigned int) c);
- break;
- }
- }
-}
-
-static void
-objc_printchar (int c, struct type *type, struct ui_file *stream)
-{
- fputs_filtered ("'", stream);
- objc_emit_char (c, type, stream, '\'');
- fputs_filtered ("'", stream);
-}
-
-/* Print the character string STRING, printing at most LENGTH
- characters. Printing stops early if the number hits print_max;
- repeat counts are printed as appropriate. Print ellipses at the
- end if we had to stop before printing LENGTH characters, or if
- FORCE_ELLIPSES. */
-
-static void
-objc_printstr (struct ui_file *stream, struct type *type,
- const gdb_byte *string, unsigned int length,
- const char *encoding, int force_ellipses,
- const struct value_print_options *options)
-{
- unsigned int i;
- unsigned int things_printed = 0;
- int in_quotes = 0;
- int need_comma = 0;
-
- /* If the string was not truncated due to `set print elements', and
- the last byte of it is a null, we don't print that, in
- traditional C style. */
- if ((!force_ellipses) && length > 0 && string[length-1] == '\0')
- length--;
-
- if (length == 0)
- {
- fputs_filtered ("\"\"", stream);
- return;
- }
-
- for (i = 0; i < length && things_printed < options->print_max; ++i)
- {
- /* Position of the character we are examining to see whether it
- is repeated. */
- unsigned int rep1;
- /* Number of repetitions we have detected so far. */
- unsigned int reps;
-
- QUIT;
-
- if (need_comma)
- {
- fputs_filtered (", ", stream);
- need_comma = 0;
- }
-
- rep1 = i + 1;
- reps = 1;
- while (rep1 < length && string[rep1] == string[i])
- {
- ++rep1;
- ++reps;
- }
-
- if (reps > options->repeat_count_threshold)
- {
- if (in_quotes)
- {
- if (options->inspect_it)
- fputs_filtered ("\\\", ", stream);
- else
- fputs_filtered ("\", ", stream);
- in_quotes = 0;
- }
- objc_printchar (string[i], type, stream);
- fprintf_filtered (stream, " <repeats %u times>", reps);
- i = rep1 - 1;
- things_printed += options->repeat_count_threshold;
- need_comma = 1;
- }
- else
- {
- if (!in_quotes)
- {
- if (options->inspect_it)
- fputs_filtered ("\\\"", stream);
- else
- fputs_filtered ("\"", stream);
- in_quotes = 1;
- }
- objc_emit_char (string[i], type, stream, '"');
- ++things_printed;
- }
- }
-
- /* Terminate the quotes if necessary. */
- if (in_quotes)
- {
- if (options->inspect_it)
- fputs_filtered ("\\\"", stream);
- else
- fputs_filtered ("\"", stream);
- }
-
- if (force_ellipses || i < length)
- fputs_filtered ("...", stream);
-}
-
/* Determine if we are currently in the Objective-C dispatch function.
If so, get the address of the method function that the dispatcher
would call and use that as the function to step into instead. Also
@@ -507,19 +355,19 @@ static const struct op_print objc_op_print_tab[] =
const struct language_defn objc_language_defn = {
"objective-c", /* Language name */
+ "Objective-C",
language_objc,
range_check_off,
- type_check_off,
case_sensitive_on,
array_row_major,
macro_expansion_c,
&exp_descriptor_standard,
- objc_parse,
- objc_error,
+ c_parse,
+ c_error,
null_post_parser,
- objc_printchar, /* Print a character constant */
- objc_printstr, /* Function to print string constant */
- objc_emit_char,
+ c_printchar, /* Print a character constant */
+ c_printstr, /* Function to print string constant */
+ c_emit_char,
c_print_type, /* Print a type using appropriate syntax */
c_print_typedef, /* Print a typedef using appropriate syntax */
c_val_print, /* Print a value using appropriate syntax */
@@ -543,6 +391,7 @@ const struct language_defn objc_language_defn = {
default_get_string,
NULL, /* la_get_symbol_name_cmp */
iterate_over_symbols,
+ &default_varobj_ops,
LANG_MAGIC
};
@@ -580,7 +429,8 @@ start_msglist(void)
void
add_msglist(struct stoken *str, int addcolon)
{
- char *s, *p;
+ char *s;
+ const char *p;
int len, plen;
if (str == 0) /* Unnamed arg, or... */
@@ -967,15 +817,13 @@ parse_selector (char *method, char **selector)
s1 = method;
- while (isspace (*s1))
- s1++;
+ s1 = skip_spaces (s1);
if (*s1 == '\'')
{
found_quote = 1;
s1++;
}
- while (isspace (*s1))
- s1++;
+ s1 = skip_spaces (s1);
nselector = s1;
s2 = s1;
@@ -994,14 +842,12 @@ parse_selector (char *method, char **selector)
}
*s1++ = '\0';
- while (isspace (*s2))
- s2++;
+ s2 = skip_spaces (s2);
if (found_quote)
{
if (*s2 == '\'')
s2++;
- while (isspace (*s2))
- s2++;
+ s2 = skip_spaces (s2);
}
if (selector != NULL)
@@ -1030,21 +876,18 @@ parse_method (char *method, char *type, char **class,
s1 = method;
- while (isspace (*s1))
- s1++;
+ s1 = skip_spaces (s1);
if (*s1 == '\'')
{
found_quote = 1;
s1++;
}
- while (isspace (*s1))
- s1++;
+ s1 = skip_spaces (s1);
if ((s1[0] == '+') || (s1[0] == '-'))
ntype = *s1++;
- while (isspace (*s1))
- s1++;
+ s1 = skip_spaces (s1);
if (*s1 != '[')
return NULL;
@@ -1055,14 +898,12 @@ parse_method (char *method, char *type, char **class,
s1++;
s2 = s1;
- while (isspace (*s2))
- s2++;
+ s2 = skip_spaces (s2);
if (*s2 == '(')
{
s2++;
- while (isspace (*s2))
- s2++;
+ s2 = skip_spaces (s2);
ncategory = s2;
while (isalnum (*s2) || (*s2 == '_'))
s2++;
@@ -1090,15 +931,13 @@ parse_method (char *method, char *type, char **class,
*s1++ = '\0';
s2++;
- while (isspace (*s2))
- s2++;
+ s2 = skip_spaces (s2);
if (found_quote)
{
if (*s2 != '\'')
return NULL;
s2++;
- while (isspace (*s2))
- s2++;
+ s2 = skip_spaces (s2);
}
if (type != NULL)
@@ -1151,8 +990,6 @@ find_methods (char type, const char *class, const char *category,
ALL_OBJFILE_MSYMBOLS (objfile, msymbol)
{
- struct gdbarch *gdbarch = get_objfile_arch (objfile);
-
QUIT;
/* Check the symbol name first as this can be done entirely without
@@ -1219,6 +1056,11 @@ uniquify_strings (VEC (const_char_ptr) **strings)
const char *elem, *last = NULL;
int out;
+ /* If the vector is empty, there's nothing to do. This explicit
+ check is needed to avoid invoking qsort with NULL. */
+ if (VEC_empty (const_char_ptr, *strings))
+ return;
+
qsort (VEC_address (const_char_ptr, *strings),
VEC_length (const_char_ptr, *strings),
sizeof (const_char_ptr),
@@ -1238,7 +1080,7 @@ uniquify_strings (VEC (const_char_ptr) **strings)
}
/*
- * Function: find_imps (char *selector, struct symbol **sym_arr)
+ * Function: find_imps (const char *selector, struct symbol **sym_arr)
*
* Input: a string representing a selector
* a pointer to an array of symbol pointers
@@ -1267,8 +1109,8 @@ uniquify_strings (VEC (const_char_ptr) **strings)
* be the index of the first non-debuggable one).
*/
-char *
-find_imps (char *method, VEC (const_char_ptr) **symbol_names)
+const char *
+find_imps (const char *method, VEC (const_char_ptr) **symbol_names)
{
char type = '\0';
char *class = NULL;
« no previous file with comments | « gdb/objc-lang.h ('k') | gdb/objfiles.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698