Split gen_expr_binop_rest
authorTom Tromey <tom@tromey.com>
Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)
committerTom Tromey <tom@tromey.com>
Mon, 8 Mar 2021 14:28:13 +0000 (07:28 -0700)
This splits gen_expr_binop_rest into two overloads.  One overload
retains the "pc" parameter, while the other does not, and furthermore
does not call gen_expr on the left-hand-side.  This split is useful
for subsequent patches in the new expression evaluation approach.

gdb/ChangeLog
2021-03-08  Tom Tromey  <tom@tromey.com>

* ax-gdb.c (gen_expr_binop_rest): Remove "pc" parameter.
(gen_expr_binop_rest): New overload.

gdb/ChangeLog
gdb/ax-gdb.c

index 96a97828f2910cfcc9e2b928ad979eb8aa100af8..70a93ed8e4539bde8df452cc5a7e3f98cbea32a9 100644 (file)
@@ -1,3 +1,8 @@
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+       * ax-gdb.c (gen_expr_binop_rest): Remove "pc" parameter.
+       (gen_expr_binop_rest): New overload.
+
 2021-03-08  Tom Tromey  <tom@tromey.com>
 
        * eval.c (eval_multi_subscript): New function.
index fa777281c1e3c62fd30a55ea00c71edb05592b64..e18e968b852591558fd7f981e1892892d42216d8 100644 (file)
@@ -2276,13 +2276,12 @@ gen_expr (struct expression *exp, union exp_element **pc,
 
 static void
 gen_expr_binop_rest (struct expression *exp,
-                    enum exp_opcode op, union exp_element **pc,
+                    enum exp_opcode op,
                     struct agent_expr *ax, struct axs_value *value,
                     struct axs_value *value1, struct axs_value *value2)
 {
   struct type *int_type = builtin_type (ax->gdbarch)->builtin_int;
 
-  gen_expr (exp, pc, ax, value2);
   gen_usual_unary (ax, value2);
   gen_usual_arithmetic (ax, value1, value2);
   switch (op)
@@ -2420,6 +2419,19 @@ gen_expr_binop_rest (struct expression *exp,
                      _("gen_expr: op case sets don't match"));
     }
 }
+
+/* Variant of gen_expr_binop_rest that first generates the
+   right-hand-side.  */
+
+static void
+gen_expr_binop_rest (struct expression *exp,
+                    enum exp_opcode op, union exp_element **pc,
+                    struct agent_expr *ax, struct axs_value *value,
+                    struct axs_value *value1, struct axs_value *value2)
+{
+  gen_expr (exp, pc, ax, value2);
+  gen_expr_binop_rest (exp, op, ax, value, value1, value2);
+}
 \f
 
 /* Given a single variable and a scope, generate bytecodes to trace