* language.h (language_defn): Add new la_post_parser field.
authorPaul N. Hilfinger <hilfinger@adacore.com>
Sat, 10 Apr 2004 22:10:01 +0000 (22:10 +0000)
committerPaul N. Hilfinger <hilfinger@adacore.com>
Sat, 10 Apr 2004 22:10:01 +0000 (22:10 +0000)
* parser-defs.h (null_post_parser): New declaration (default for
la_post_parser).

* parse.c (parse_exp_1): Move code to parse_exp_in_context and
insert call to that function.
(parse_exp_in_context): New function, including code formerly in
parse_exp_1.  Calls language-dependent post-parser after
prefixification.
(parse_expression_in_context): New exported function.
(null_post_parser): New definition.
* expression.h (parse_expression_in_context): Add declaration.

* p-lang.c (pascal_language_defn): Add trivial post-parser.
* c-lang.c (c_language_defn): Ditto.
(cplus_language_defn): Ditto.
(asm_language_defn): Ditto.
(minimal_language_defn): Ditto.
* f-lang.c (f_language_defn): Ditto.
* jv-lang.c (java_language_defn): Ditto.
* language.c (unknown_language_defn): Ditto.
(auto_language_defn): Ditto.
(local_language_defn): Ditto.
* m2-lang.c (m2_language_defn): Ditto.
* scm-lang.c (scm_language_defn): Ditto.
* obj-lang.c (objc_language_defn): Ditto.

13 files changed:
gdb/ChangeLog
gdb/c-lang.c
gdb/expression.h
gdb/f-lang.c
gdb/jv-lang.c
gdb/language.c
gdb/language.h
gdb/m2-lang.c
gdb/objc-lang.c
gdb/p-lang.c
gdb/parse.c
gdb/parser-defs.h
gdb/scm-lang.c

index 02f04a6fbfc81b4b7e8452625ed62cfee3ad809d..d7837292008048bd1626a59a646a663d7c3d373b 100644 (file)
@@ -1,3 +1,32 @@
+2004-03-10  Paul N. Hilfinger  <Hilfinger@gnat.com>
+
+       * language.h (language_defn): Add new la_post_parser field.
+       * parser-defs.h (null_post_parser): New declaration (default for
+       la_post_parser).
+       
+       * parse.c (parse_exp_1): Move code to parse_exp_in_context and
+       insert call to that function.
+       (parse_exp_in_context): New function, including code formerly in
+       parse_exp_1.  Calls language-dependent post-parser after 
+       prefixification.
+       (parse_expression_in_context): New exported function.
+       (null_post_parser): New definition.
+       * expression.h (parse_expression_in_context): Add declaration.
+       
+       * p-lang.c (pascal_language_defn): Add trivial post-parser.
+       * c-lang.c (c_language_defn): Ditto.
+       (cplus_language_defn): Ditto.
+       (asm_language_defn): Ditto.
+       (minimal_language_defn): Ditto.
+       * f-lang.c (f_language_defn): Ditto.
+       * jv-lang.c (java_language_defn): Ditto.
+       * language.c (unknown_language_defn): Ditto.
+       (auto_language_defn): Ditto.
+       (local_language_defn): Ditto.
+       * m2-lang.c (m2_language_defn): Ditto.
+       * scm-lang.c (scm_language_defn): Ditto.
+       * obj-lang.c (objc_language_defn): Ditto.
+       
 2004-04-10  Mark Kettenis  <kettenis@gnu.org>
 
        * amd64nbsd-tdep.c (amd64nbsd_sigcontext_addr): Remove function.
index ba34540f386026999903a581fbab8e7e9ff88a1f..3b52890309aeed5449c7508396ddd9a1cef44a0b 100644 (file)
@@ -546,6 +546,7 @@ const struct language_defn c_language_defn =
   &exp_descriptor_standard,
   c_preprocess_and_parse,
   c_error,
+  null_post_parser,
   c_printchar,                 /* Print a character constant */
   c_printstr,                  /* Function to print string constant */
   c_emit_char,                 /* Print a single char */
@@ -604,6 +605,7 @@ const struct language_defn cplus_language_defn =
   &exp_descriptor_standard,
   c_preprocess_and_parse,
   c_error,
+  null_post_parser,
   c_printchar,                 /* Print a character constant */
   c_printstr,                  /* Function to print string constant */
   c_emit_char,                 /* Print a single char */
@@ -639,6 +641,7 @@ const struct language_defn asm_language_defn =
   &exp_descriptor_standard,
   c_preprocess_and_parse,
   c_error,
+  null_post_parser,
   c_printchar,                 /* Print a character constant */
   c_printstr,                  /* Function to print string constant */
   c_emit_char,                 /* Print a single char */
@@ -679,6 +682,7 @@ const struct language_defn minimal_language_defn =
   &exp_descriptor_standard,
   c_preprocess_and_parse,
   c_error,
+  null_post_parser,
   c_printchar,                 /* Print a character constant */
   c_printstr,                  /* Function to print string constant */
   c_emit_char,                 /* Print a single char */
index 03b45c2ef9ac24111bc56764128f3d67bbde2c98..2b09716e90734b1eb4af99faed7f2a7e2f31a43e 100644 (file)
@@ -378,6 +378,8 @@ struct expression
 
 extern struct expression *parse_expression (char *);
 
+extern struct expression *parse_expression_in_context (char *, int);
+
 extern struct expression *parse_exp_1 (char **, struct block *, int);
 
 /* The innermost context required by the stack and register variables
index 1e7cd45362ceb5f1482a234ba0e20e7584973e0d..0e30c70dd0dee214314caa4c097019aa1c6d8ea0 100644 (file)
@@ -465,6 +465,7 @@ const struct language_defn f_language_defn =
   &exp_descriptor_standard,
   f_parse,                     /* parser */
   f_error,                     /* parser error function */
+  null_post_parser,
   f_printchar,                 /* Print character constant */
   f_printstr,                  /* function to print string constant */
   f_emit_char,                 /* Function to print a single character */
index 6db6e88efa5f7f47ae704c6714b472fa57bd3961..e84019168321ecfd065ebe814737b6d44599c255 100644 (file)
@@ -1036,6 +1036,7 @@ const struct language_defn java_language_defn =
   &exp_descriptor_java,
   java_parse,
   java_error,
+  null_post_parser,
   c_printchar,                 /* Print a character constant */
   c_printstr,                  /* Function to print string constant */
   java_emit_char,              /* Function to print a single character */
index bc00b473a6c991dfe9b8bdc7eb6b6ab49dc6a4c9..b4d38ea364a1c41770d3efee6e7b9bd838903720 100644 (file)
@@ -1279,6 +1279,7 @@ const struct language_defn unknown_language_defn =
   &exp_descriptor_standard,
   unk_lang_parser,
   unk_lang_error,
+  null_post_parser,
   unk_lang_printchar,          /* Print character constant */
   unk_lang_printstr,
   unk_lang_emit_char,
@@ -1315,6 +1316,7 @@ const struct language_defn auto_language_defn =
   &exp_descriptor_standard,
   unk_lang_parser,
   unk_lang_error,
+  null_post_parser,
   unk_lang_printchar,          /* Print character constant */
   unk_lang_printstr,
   unk_lang_emit_char,
@@ -1350,6 +1352,7 @@ const struct language_defn local_language_defn =
   &exp_descriptor_standard,
   unk_lang_parser,
   unk_lang_error,
+  null_post_parser,
   unk_lang_printchar,          /* Print character constant */
   unk_lang_printstr,
   unk_lang_emit_char,
index 8ed9fb084170543bec7593a27a781f4f4aa923ba..27c1491d76d6bc949641dcc5cfbb85cf7ee84edf 100644 (file)
@@ -180,6 +180,14 @@ struct language_defn
 
     void (*la_error) (char *);
 
+    /* Given an expression *EXPP created by prefixifying the result of
+       la_parser, perform any remaining processing necessary to complete
+       its translation.  *EXPP may change; la_post_parser is responsible 
+       for releasing its previous contents, if necessary.  If 
+       VOID_CONTEXT_P, then no value is expected from the expression.  */
+
+    void (*la_post_parser) (struct expression ** expp, int void_context_p);
+
     void (*la_printchar) (int ch, struct ui_file * stream);
 
     void (*la_printstr) (struct ui_file * stream, char *string,
index e5b6b500e7cb0a1e1f22bd1f191c07bf90a1e3f7..c66b70341e2ba0f304dbcd0f55e880cf99ef4508 100644 (file)
@@ -418,6 +418,7 @@ const struct language_defn m2_language_defn =
   &exp_descriptor_standard,
   m2_parse,                    /* parser */
   m2_error,                    /* parser error function */
+  null_post_parser,
   m2_printchar,                        /* Print character constant */
   m2_printstr,                 /* function to print string constant */
   m2_emit_char,                        /* Function to print a single character */
index 5c184f35d7a15f7a9fcc89e283ae78c636f3564b..ecbce77b1906bbdf7c26cafd4cb91fd7c9b74d01 100644 (file)
@@ -662,6 +662,7 @@ const struct language_defn objc_language_defn = {
   &exp_descriptor_standard,
   objc_parse,
   objc_error,
+  null_post_parser,
   objc_printchar,              /* Print a character constant */
   objc_printstr,               /* Function to print string constant */
   objc_emit_char,
index a4025322ca7fb0a0cce407107080a19e141d2791..9ab55734a1d0c8a6ca55dd0db926d7a33c8b7bb0 100644 (file)
@@ -454,6 +454,7 @@ const struct language_defn pascal_language_defn =
   &exp_descriptor_standard,
   pascal_parse,
   pascal_error,
+  null_post_parser,
   pascal_printchar,            /* Print a character constant */
   pascal_printstr,             /* Function to print string constant */
   pascal_emit_char,            /* Print a single char */
index 3bf06b96a880a69b8dde00251fa69f4a647723a4..4af6d7c7bf005991c0f463beafc5418ca02ee045 100644 (file)
@@ -102,6 +102,9 @@ static void prefixify_expression (struct expression *);
 static void prefixify_subexp (struct expression *, struct expression *, int,
                              int);
 
+static struct expression *parse_exp_in_context (char **, struct block *, int, 
+                                               int);
+
 void _initialize_parse (void);
 
 /* Data structure for saving values of arglist_len for function calls whose
@@ -1020,6 +1023,16 @@ prefixify_subexp (struct expression *inexpr,
 
 struct expression *
 parse_exp_1 (char **stringptr, struct block *block, int comma)
+{
+  return parse_exp_in_context (stringptr, block, comma, 0);
+}
+
+/* As for parse_exp_1, except that if VOID_CONTEXT_P, then
+   no value is expected from the expression.  */
+
+static struct expression *
+parse_exp_in_context (char **stringptr, struct block *block, int comma, 
+                     int void_context_p)
 {
   struct cleanup *old_chain;
 
@@ -1076,6 +1089,8 @@ parse_exp_1 (char **stringptr, struct block *block, int comma)
 
   prefixify_expression (expout);
 
+  current_language->la_post_parser (&expout, void_context_p);
+
   if (expressiondebug)
     dump_prefix_expression (expout, gdb_stdlog);
 
@@ -1095,6 +1110,28 @@ parse_expression (char *string)
     error ("Junk after end of expression.");
   return exp;
 }
+
+
+/* As for parse_expression, except that if VOID_CONTEXT_P, then
+   no value is expected from the expression.  */
+
+struct expression *
+parse_expression_in_context (char *string, int void_context_p)
+{
+  struct expression *exp;
+  exp = parse_exp_in_context (&string, 0, 0, void_context_p);
+  if (*string != '\000')
+    error ("Junk after end of expression.");
+  return exp;
+}
+
+/* A post-parser that does nothing */
+
+/* ARGSUSED */
+void
+null_post_parser (struct expression **exp, int void_context_p)
+{
+}
 \f
 /* Stuff for maintaining a stack of types.  Currently just used by C, but
    probably useful for any language which declares its types "backwards".  */
index c84fcad2c1f093d1d96992cccbbbec1f3afd2bb1..43a07c37466b6f1f9bcd9599dd15e0813c706876 100644 (file)
@@ -172,6 +172,8 @@ extern char *op_name_standard (enum exp_opcode);
 
 extern struct type *follow_types (struct type *);
 
+extern void null_post_parser (struct expression **, int);
+
 /* During parsing of a C expression, the pointer to the next character
    is in this variable.  */
 
index 872dcaf89fc84e20369de18e82f3b499939537da..1c410766963ec84ba0cb404bbd38f381ced7f945 100644 (file)
@@ -253,6 +253,7 @@ const struct language_defn scm_language_defn =
   &exp_descriptor_scm,
   scm_parse,
   c_error,
+  null_post_parser,
   scm_printchar,               /* Print a character constant */
   scm_printstr,                        /* Function to print string constant */
   NULL,                                /* Function to print a single character */