This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Handle ObjC ops in expprint.c



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:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]