From 42fecb6183f4cce4e85473b8c43d90ec0ea562e7 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 8 Mar 2021 07:27:57 -0700 Subject: [PATCH] Introduce ada_string_operation This adds class ada_string_operation, which implements string constants for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey * ada-lang.c (ada_string_operation::evaluate): New method. * ada-exp.h (class ada_string_operation): New. --- gdb/ChangeLog | 5 +++++ gdb/ada-exp.h | 13 +++++++++++++ gdb/ada-lang.c | 13 +++++++++++++ 3 files changed, 31 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ff5862ebec0..816f5a87950 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-03-08 Tom Tromey + + * ada-lang.c (ada_string_operation::evaluate): New method. + * ada-exp.h (class ada_string_operation): New. + 2021-03-08 Tom Tromey * ada-lang.c (ada_wrapped_operation::evaluate): New method. diff --git a/gdb/ada-exp.h b/gdb/ada-exp.h index 3f780dc9ff4..88ed0c53b46 100644 --- a/gdb/ada-exp.h +++ b/gdb/ada-exp.h @@ -42,6 +42,19 @@ public: { return std::get<0> (m_storage)->opcode (); } }; +/* An Ada string constant. */ +class ada_string_operation + : public string_operation +{ +public: + + using string_operation::string_operation; + + value *evaluate (struct type *expect_type, + struct expression *exp, + enum noside noside) override; +}; + } /* namespace expr */ #endif /* ADA_EXP_H */ diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 4db5823c3e3..0666302747f 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -10414,6 +10414,19 @@ ada_wrapped_operation::evaluate (struct type *expect_type, return result; } +value * +ada_string_operation::evaluate (struct type *expect_type, + struct expression *exp, + enum noside noside) +{ + value *result = string_operation::evaluate (expect_type, exp, noside); + /* The result type will have code OP_STRING, bashed there from + OP_ARRAY. Bash it back. */ + if (value_type (result)->code () == TYPE_CODE_STRING) + value_type (result)->set_code (TYPE_CODE_ARRAY); + return result; +} + } /* Implement the evaluate_exp routine in the exp_descriptor structure