Introduce long_const_operation
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:15 +0000 (07:28 -0700)
This adds class long_const_operation, which holds a scalar constant.

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

* expop.h (class long_const_operation): New.
* ax-gdb.c (long_const_operation::do_generate_ax): New method.

gdb/ChangeLog
gdb/ax-gdb.c
gdb/expop.h

index bfc191f16199a14dbea0c531095d8d35a455af7f..1b08ff5b9ecd5cf7b593152fb952bb0f8c421a2f 100644 (file)
@@ -1,3 +1,8 @@
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+       * expop.h (class long_const_operation): New.
+       * ax-gdb.c (long_const_operation::do_generate_ax): New method.
+
 2021-03-08  Tom Tromey  <tom@tromey.com>
 
        * expop.h (class scope_operation): New.
index 6d568a71e030bdda56abd6a4fee637dacfef8259..7640b1ba925982db8f91fc6066e79c2d6f404fa5 100644 (file)
@@ -2314,6 +2314,16 @@ scope_operation::do_generate_ax (struct expression *exp,
     error (_("There is no field named %s"), name.c_str ());
 }
 
+void
+long_const_operation::do_generate_ax (struct expression *exp,
+                                     struct agent_expr *ax,
+                                     struct axs_value *value,
+                                     struct type *cast_type)
+{
+  gen_int_literal (ax, value, std::get<1> (m_storage),
+                  std::get<0> (m_storage));
+}
+
 }
 
 /* This handles the middle-to-right-side of code generation for binary
index cd1a16172b8c9e1c6a62b1e0be222a3a224f2a26..ed883be6fc4b18aa6eb14da19edb393a7ce38f0c 100644 (file)
@@ -451,6 +451,36 @@ protected:
     override;
 };
 
+class long_const_operation
+  : public tuple_holding_operation<struct type *, LONGEST>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+                  struct expression *exp,
+                  enum noside noside) override
+  {
+    return value_from_longest (std::get<0> (m_storage),
+                              std::get<1> (m_storage));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_LONG; }
+
+  bool constant_p () const override
+  { return true; }
+
+protected:
+
+  void do_generate_ax (struct expression *exp,
+                      struct agent_expr *ax,
+                      struct axs_value *value,
+                      struct type *cast_type)
+    override;
+};
+
 } /* namespace expr */
 
 #endif /* EXPOP_H */