This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[PATCH] Handle ObjC ops in expprint.c
- From: Adam Fedor <fedor at doc dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Sun, 20 Oct 2002 20:51:58 -0600
- Subject: [PATCH] Handle ObjC ops in expprint.c
- Organization: Digital Optics Corp.
2002-10-20 Adam Fedor <fedor@gnu.org>
* gdb/expprint.c (print_subexp): Handle OP_NSSTRING, OP_MSGCALL,
and OP_SELF.
* (op_name): Handle OP_SELF.
* Makefile.in (expprint.o): Add additional depends.
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.271
diff -u -p -r1.271 Makefile.in
--- Makefile.in 20 Oct 2002 20:27:19 -0000 1.271
+++ Makefile.in 21 Oct 2002 02:39:57 -0000
@@ -1653,7 +1653,7 @@ exec.o: exec.c $(defs_h) $(frame_h) $(in
$(language_h) $(symfile_h) $(objfiles_h) $(completer_h) $(value_h) \
$(gdb_string_h) $(gdbcore_h) $(gdb_stat_h) $(xcoffsolib_h)
expprint.o: expprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \
- $(value_h) $(language_h) $(parser_defs_h)
+ $(value_h) $(language_h) $(parser_defs_h) $(target_h) $(gdb_string_h)
f-lang.o: f-lang.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
$(expression_h) $(parser_defs_h) $(language_h) $(f_lang_h) \
$(valprint_h)
Index: expprint.c
===================================================================
RCS file: /cvs/src/src/gdb/expprint.c,v
retrieving revision 1.9
diff -u -p -r1.9 expprint.c
--- expprint.c 25 Sep 2002 20:30:37 -0000 1.9
+++ expprint.c 21 Oct 2002 02:39:59 -0000
@@ -27,6 +27,8 @@
#include "language.h"
#include "parser-defs.h"
#include "frame.h" /* For frame_map_regnum_to_name. */
+#include "target.h"
+#include "gdb_string.h"
#ifdef HAVE_CTYPE_H
#include <ctype.h>
@@ -177,6 +179,51 @@ print_subexp (register struct expression
fprintf_unfiltered (stream, "B'<unimplemented>'");
return;
+ case OP_NSSTRING: /* Objective-C Foundation Class NSString constant. */
+ nargs = longest_to_int (exp->elts[pc + 1].longconst);
+ (*pos) += 3 + BYTES_TO_EXP_ELEM (nargs + 1);
+ fputs_filtered ("@\"", stream);
+ LA_PRINT_STRING (stream, &exp->elts[pc + 2].string, nargs, 1, 0);
+ fputs_filtered ("\"", stream);
+ return;
+
+ case OP_MSGCALL:
+ { /* Objective C message (method) call. */
+ char *selector;
+ (*pos) += 3;
+ nargs = longest_to_int (exp->elts[pc + 2].longconst);
+ fprintf_unfiltered (stream, "[");
+ print_subexp (exp, pos, stream, PREC_SUFFIX);
+ if (0 == target_read_string (exp->elts[pc + 1].longconst,
+ &selector, 1024, NULL))
+ {
+ error ("bad selector");
+ return;
+ }
+ if (nargs)
+ {
+ char *s, *nextS;
+ s = alloca (strlen (selector) + 1);
+ strcpy (s, selector);
+ for (tem = 0; tem < nargs; tem++)
+ {
+ nextS = strchr (s, ':');
+ *nextS = '\0';
+ fprintf_unfiltered (stream, " %s: ", s);
+ s = nextS + 1;
+ print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
+ }
+ }
+ else
+ {
+ fprintf_unfiltered (stream, " %s", selector);
+ }
+ fprintf_unfiltered (stream, "]");
+ /* "selector" was malloc'd by target_read_string. Free it. */
+ free (selector);
+ return;
+ }
+
case OP_ARRAY:
(*pos) += 3;
nargs = longest_to_int (exp->elts[pc + 2].longconst);
@@ -391,6 +439,13 @@ print_subexp (register struct expression
fputs_filtered ("this", stream);
return;
+ /* Objective-C ops */
+
+ case OP_SELF:
+ ++(*pos);
+ fputs_filtered ("self", stream); /* The ObjC equivalent of "this". */
+ return;
+
/* Modula-2 ops */
case MULTI_SUBSCRIPT:
@@ -684,6 +739,8 @@ op_name (int opcode)
return "STRUCTOP_PTR";
case OP_THIS:
return "OP_THIS";
+ case OP_SELF:
+ return "OP_SELF";
case OP_SCOPE:
return "OP_SCOPE";
case OP_TYPE: