Introduce objc_nsstring_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:17 +0000 (07:28 -0700)
This adds class objc_nsstring_operation, which implements
OP_OBJC_NSSTRING.

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

* eval.c: Include c-exp.h.
* c-exp.h (class objc_nsstring_operation): New.

gdb/ChangeLog
gdb/c-exp.h
gdb/eval.c

index 5dd766606bbef4481af340498a2cf817ebdccf31..2b7afb1dd6886c0b334a8c1ae30733ae29426871 100644 (file)
@@ -1,3 +1,8 @@
+2021-03-08  Tom Tromey  <tom@tromey.com>
+
+       * eval.c: Include c-exp.h.
+       * c-exp.h (class objc_nsstring_operation): New.
+
 2021-03-08  Tom Tromey  <tom@tromey.com>
 
        * c-lang.c (c_string_operation::evaluate): New method.
index 5558a773e98480bc782fd8c76d8bb0aec4189581..a7b11b5a25ddbde7f4b13a91613c6e626158352c 100644 (file)
@@ -21,6 +21,7 @@
 #define C_EXP_H
 
 #include "expop.h"
+#include "objc-lang.h"
 
 namespace expr
 {
@@ -41,6 +42,27 @@ public:
   { return OP_STRING; }
 };
 
+class objc_nsstring_operation
+  : public tuple_holding_operation<std::string>
+{
+public:
+
+  using tuple_holding_operation::tuple_holding_operation;
+
+  value *evaluate (struct type *expect_type,
+                  struct expression *exp,
+                  enum noside noside) override
+  {
+    if (noside == EVAL_SKIP)
+      return eval_skip_value (exp);
+    const std::string &str = std::get<0> (m_storage);
+    return value_nsstring (exp->gdbarch, str.c_str (), str.size () + 1);
+  }
+
+  enum exp_opcode opcode () const override
+  { return OP_OBJC_NSSTRING; }
+};
+
 }/* namespace expr */
 
 #endif /* C_EXP_H */
index c667925b1bface4f3ab34cad160ccdc0e4ecc171..f1553dadbdb91f02585f969a1514fccfc950c82b 100644 (file)
@@ -41,6 +41,7 @@
 #include "typeprint.h"
 #include <ctype.h>
 #include "expop.h"
+#include "c-exp.h"
 
 /* Prototypes for local functions.  */