Introduce bool_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:16 +0000 (07:28 -0700)
This adds class bool_operation, which implements OP_BOOL.

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

* expop.h (class bool_operation): New.

gdb/ChangeLog
gdb/expop.h

index 0633260cb5a67708b0cd588f6182fd4816540af2..9acaee4c152b591f3072cc987e30fca4be74d622 100644 (file)
@@ -1,3 +1,7 @@
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+       * expop.h (class bool_operation): New.
+
 2021-03-08  Tom Tromey  <tom@tromey.com>
 
        * expop.h (class register_operation): New.
index a0e00302532fc120f8ac9221ca107ee71929e9e7..44098b847613005d7ee05be68a6e92224a6be8dc 100644 (file)
@@ -627,6 +627,28 @@ protected:
     override;
 };
 
+class bool_operation
+  : public tuple_holding_operation<bool>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+                  struct expression *exp,
+                  enum noside noside) override
+  {
+    struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
+    return value_from_longest (type, std::get<0> (m_storage));
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_BOOL; }
+
+  bool constant_p () const override
+  { return true; }
+};
+
 } /* namespace expr */
 
 #endif /* EXPOP_H */