2003-02-02 Andrew Cagney <ac131313@redhat.com>
[deliverable/binutils-gdb.git] / gdb / parse.c
index bc81f221b52aacdf686b89d56faaa69e811d62b6..45a95975fe152f61c9718ee0c09544651855e7e8 100644 (file)
@@ -47,7 +47,6 @@
 #include "inferior.h"          /* for NUM_PSEUDO_REGS.  NOTE: replace 
                                   with "gdbarch.h" when appropriate.  */
 #include "doublest.h"
-#include "builtin-regs.h"
 #include "gdb_assert.h"
 
 \f
@@ -90,8 +89,8 @@ static void free_funcalls (void *ignore);
 
 static void prefixify_expression (struct expression *);
 
-static void
-prefixify_subexp (struct expression *, struct expression *, int, int);
+static void prefixify_subexp (struct expression *, struct expression *, int,
+                             int);
 
 void _initialize_parse (void);
 
@@ -106,42 +105,6 @@ struct funcall
 
 static struct funcall *funcall_chain;
 
-/* The generic method for targets to specify how their registers are
-   named.  The mapping can be derived from two sources: REGISTER_NAME;
-   or builtin regs.  */
-
-int
-target_map_name_to_register (char *str, int len)
-{
-  int i;
-
-  /* Search register name space. */
-  for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++)
-    if (REGISTER_NAME (i) && len == strlen (REGISTER_NAME (i))
-       && STREQN (str, REGISTER_NAME (i), len))
-      {
-       return i;
-      }
-
-  /* Try builtin registers.  */
-  i = builtin_reg_map_name_to_regnum (str, len);
-  if (i >= 0)
-    {
-      gdb_assert (i >= NUM_REGS + NUM_PSEUDO_REGS);
-      return i;
-    }
-
-  /* Try builtin registers.  */
-  i = builtin_reg_map_name_to_regnum (str, len);
-  if (i >= 0)
-    {
-      gdb_assert (i >= NUM_REGS + NUM_PSEUDO_REGS);
-      return i;
-    }
-
-  return -1;
-}
-
 /* Begin counting arguments for a function call,
    saving the data about any containing call.  */
 
@@ -491,7 +454,7 @@ write_dollar_variable (struct stoken str)
 
   /* Handle tokens that refer to machine registers:
      $ followed by a register name.  */
-  i = target_map_name_to_register (str.ptr + 1, str.length - 1);
+  i = frame_map_name_to_regnum (str.ptr + 1, str.length - 1);
   if (i >= 0)
     goto handle_register;
 
@@ -867,6 +830,11 @@ length_of_subexp (register struct expression *expr, register int endpos)
       args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
       break;
 
+    case OP_OBJC_MSGCALL:      /* Objective C message (method) call */
+      oplen = 4;
+      args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
+      break;
+
     case UNOP_MAX:
     case UNOP_MIN:
       oplen = 3;
@@ -898,6 +866,8 @@ length_of_subexp (register struct expression *expr, register int endpos)
       /* fall through */
     case OP_M2_STRING:
     case OP_STRING:
+    case OP_OBJC_NSSTRING:     /* Objective C Foundation Class NSString constant */
+    case OP_OBJC_SELECTOR:     /* Objective C "@selector" pseudo-op */
     case OP_NAME:
     case OP_EXPRSTRING:
       oplen = longest_to_int (expr->elts[endpos - 2].longconst);
@@ -936,6 +906,7 @@ length_of_subexp (register struct expression *expr, register int endpos)
 
       /* C++ */
     case OP_THIS:
+    case OP_OBJC_SELF:
       oplen = 2;
       break;
 
@@ -1004,6 +975,11 @@ prefixify_subexp (register struct expression *inexpr,
       args = 1 + longest_to_int (inexpr->elts[inend - 2].longconst);
       break;
 
+    case OP_OBJC_MSGCALL:      /* Objective C message (method) call */
+      oplen = 4;
+      args = 1 + longest_to_int (inexpr->elts[inend - 2].longconst);
+      break;
+
     case UNOP_MIN:
     case UNOP_MAX:
       oplen = 3;
@@ -1034,6 +1010,8 @@ prefixify_subexp (register struct expression *inexpr,
       /* fall through */
     case OP_M2_STRING:
     case OP_STRING:
+    case OP_OBJC_NSSTRING:     /* Objective C Foundation Class NSString constant */
+    case OP_OBJC_SELECTOR:     /* Objective C "@selector" pseudo-op */
     case OP_NAME:
     case OP_EXPRSTRING:
       oplen = longest_to_int (inexpr->elts[inend - 2].longconst);
@@ -1072,6 +1050,7 @@ prefixify_subexp (register struct expression *inexpr,
 
       /* C++ */
     case OP_THIS:
+    case OP_OBJC_SELF:
       oplen = 2;
       break;
 
@@ -1144,7 +1123,7 @@ parse_exp_1 (char **stringptr, struct block *block, int comma)
   if (block)
     {
       expression_context_block = block;
-      expression_context_pc = block->startaddr;
+      expression_context_pc = BLOCK_START (block);
     }
   else
     expression_context_block = get_selected_block (&expression_context_pc);
@@ -1366,6 +1345,23 @@ build_parse (void)
               NULL);
 }
 
+/* This function avoids direct calls to fprintf 
+   in the parser generated debug code.  */
+void
+parser_fprintf (FILE *x, const char *y, ...)
+{ 
+  va_list args;
+  va_start (args, y);
+  if (x == stderr)
+    vfprintf_unfiltered (gdb_stderr, y, args); 
+  else
+    {
+      fprintf_unfiltered (gdb_stderr, " Unknown FILE used.\n");
+      vfprintf_unfiltered (gdb_stderr, y, args);
+    }
+  va_end (args);
+}
+
 void
 _initialize_parse (void)
 {
This page took 0.040464 seconds and 4 git commands to generate.