From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.bob131.so (server2.bob131.so [128.199.153.143]) by sourceware.org (Postfix) with ESMTPS id 36C42394342D for ; Wed, 28 Apr 2021 16:27:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 36C42394342D Received: from internal.mail.bob131.so (localhost [127.0.0.1]) by mail.bob131.so (Postfix) with ESMTP id 1C1EC53EE5; Wed, 28 Apr 2021 16:27:51 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 mail.bob131.so 1C1EC53EE5 Date: Thu, 29 Apr 2021 02:27:49 +1000 From: George Barrett To: gdb-patches@sourceware.org Cc: George Barrett Subject: [PATCH v3 3/3] Guile: add value-const-value Message-ID: References: <&e1lx8mojs1b03hu3o_asydo0za8-nyh&337akgbzjn.o13/-otj@mail.bob131.so> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <&e1lx8mojs1b03hu3o_asydo0za8-nyh&337akgbzjn.o13/-otj@mail.bob131.so> X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 28 Apr 2021 16:27:54 -0000 The Guile API doesn't currently have an equivalent to the Python API's gdb.Value.const_value(). This commit adds a procedure with equivalent semantics to the Guile API. gdb/ChangeLog: 2021-04-29 George Barrett * guile/scm-value.c (gdbscm_value_const_value): Add implementation of value-const-value procedure. (value_functions): Add value-const-value procedure. * NEWS (Guile API): Note the addition of the new procedure. gdb/doc/ChangeLog: 2021-04-29 George Barrett * guile.texi (Values From Inferior In Guile): Add documentation for value-const-value. gdb/testsuite/ChangeLog: 2021-04-29 George Barrett * gdb.guile/scm-value.exp (test_value_in_inferior): Add test for value-const-value. --- gdb/NEWS | 5 +++-- gdb/doc/guile.texi | 5 +++++ gdb/guile/scm-value.c | 23 +++++++++++++++++++++++ gdb/testsuite/gdb.guile/scm-value.exp | 3 +++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index 0c51f5fceca..9e18aa6cc68 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -192,8 +192,9 @@ QMemTags value-referenced-value procedure now handles rvalue reference values. - ** New procedures for obtaining reference values: - value-reference-value and rvalue-reference-value. + ** New procedures for obtaining value variants: + value-reference-value, rvalue-reference-value and + value-const-value. *** Changes in GDB 10 diff --git a/gdb/doc/guile.texi b/gdb/doc/guile.texi index 18782bb7589..a3ff75979e8 100644 --- a/gdb/doc/guile.texi +++ b/gdb/doc/guile.texi @@ -811,6 +811,11 @@ Return a new @code{} object which is an rvalue reference to the value encapsulated by @code{} object @var{value}. @end deffn +@deffn {Scheme Procedure} value-const-value value +Return a new @code{} object which is a @samp{const} version +of @code{} object @var{value}. +@end deffn + @deffn {Scheme Procedure} value-field value field-name Return field @var{field-name} from @code{} object @var{value}. @end deffn diff --git a/gdb/guile/scm-value.c b/gdb/guile/scm-value.c index 2ab193f044a..fb753aeecf0 100644 --- a/gdb/guile/scm-value.c +++ b/gdb/guile/scm-value.c @@ -520,6 +520,24 @@ gdbscm_rvalue_reference_value (SCM self) return gdbscm_reference_value (self, TYPE_CODE_RVALUE_REF); } +/* (value-const-value ) -> */ + +static SCM +gdbscm_value_const_value (SCM self) +{ + value_smob *v_smob + = vlscm_get_value_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); + struct value *value = v_smob->value; + + return gdbscm_wrap ([=] + { + scoped_value_mark free_values; + + struct value *res_val = make_cv_value (1, 0, value); + return vlscm_scm_from_value (res_val); + }); +} + /* (value-type ) -> */ static SCM @@ -1394,6 +1412,11 @@ Return a object which is a reference to the given value." }, "\ Return a object which is an rvalue reference to the given value." }, + { "value-const-value", 1, 0, 0, + as_a_scm_t_subr (gdbscm_value_const_value), + "\ +Return a object which is a 'const' version of the given value." }, + { "value-field", 2, 0, 0, as_a_scm_t_subr (gdbscm_value_field), "\ Return the specified field of the value.\n\ diff --git a/gdb/testsuite/gdb.guile/scm-value.exp b/gdb/testsuite/gdb.guile/scm-value.exp index 883c4bea72e..28b0fd83a9f 100644 --- a/gdb/testsuite/gdb.guile/scm-value.exp +++ b/gdb/testsuite/gdb.guile/scm-value.exp @@ -183,6 +183,9 @@ proc test_value_in_inferior {} { "test rvalue-reference-value" gdb_test "gu (equal? argv (value-referenced-value argv-rref))" "#t" gdb_test "gu (eqv? (type-code (value-type argv-rref)) TYPE_CODE_RVALUE_REF)" "#t" + + gdb_test "gu (equal? (value-type (value-const-value argv)) (type-const (value-type argv)))" \ + "#t" } proc test_strings {} { -- 2.30.2