public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v3 0/3] Guile: add value-{reference,const}-value
@ 2021-04-28 16:27 George Barrett
  2021-04-28 16:27 ` [PATCH v3 1/3] Guile: improved rvalue reference support George Barrett
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: George Barrett @ 2021-04-28 16:27 UTC (permalink / raw)
  To: gdb-patches; +Cc: George Barrett

A couple of simple patches implementing functions missing from the
Guile API (relative to the Python API). Both are straight-forward
translations of the Python implementations.

Feedback on the original series pointed out that the Python API also
has a Value.rvalue_reference_value() method and that a matching
Guile procedure should be introduced alongside value-reference-value,
owing to their similarity. This v2 series updates the patch as
indicated; an additional patch improving the Guile support for rvalue
reference types is included to allow for writing an appropriate test.

Feedback on the v2 series pointed out mistaken quoting in the texinfo
manual diff and suggested that API changes be listed in the NEWS
file. This series includes improvements as suggested.

George Barrett (3):
  Guile: improved rvalue reference support
  Guile: add {r,}value-reference-value
  Guile: add value-const-value

 gdb/NEWS                              | 11 +++++
 gdb/doc/guile.texi                    | 18 ++++++++
 gdb/guile/scm-type.c                  |  1 +
 gdb/guile/scm-value.c                 | 66 +++++++++++++++++++++++++++
 gdb/testsuite/gdb.guile/scm-value.exp | 13 ++++++
 5 files changed, 109 insertions(+)

-- 
2.30.2

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v3 1/3] Guile: improved rvalue reference support
  2021-04-28 16:27 [PATCH v3 0/3] Guile: add value-{reference,const}-value George Barrett
@ 2021-04-28 16:27 ` George Barrett
  2021-04-28 16:38   ` Eli Zaretskii
  2021-04-28 16:54   ` Andrew Burgess
  2021-04-28 16:27 ` [PATCH v3 2/3] Guile: add {r,}value-reference-value George Barrett
  2021-04-28 16:27 ` [PATCH v3 3/3] Guile: add value-const-value George Barrett
  2 siblings, 2 replies; 11+ messages in thread
From: George Barrett @ 2021-04-28 16:27 UTC (permalink / raw)
  To: gdb-patches; +Cc: George Barrett

Adds a couple of missing bits to the Guile API to make C++11 rvalue
reference values and types usable from Guile scripts.

gdb/ChangeLog:

2021-04-29  George Barrett  <bob@bob131.so>

	* guile/scm-type.c (type_integer_constants): Add binding for
	TYPE_CODE_RVALUE_REF.
	* guile/scm-value.c (gdbscm_value_referenced_value): Handle
	dereferencing of rvalue references.
	* NEWS (Guile API): Note improvements in rvalue reference
	support.

gdb/doc/ChangeLog:

2021-04-29  George Barrett  <bob@bob131.so>

	* guile.texi (Types In Guile): Add documentation for
	TYPE_CODE_RVALUE_REF.
---
 gdb/NEWS              | 7 +++++++
 gdb/doc/guile.texi    | 3 +++
 gdb/guile/scm-type.c  | 1 +
 gdb/guile/scm-value.c | 1 +
 4 files changed, 12 insertions(+)

diff --git a/gdb/NEWS b/gdb/NEWS
index 6550ea352ac..9c76df8b6d5 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -185,6 +185,13 @@ QMemTags
   Request the remote to store the specified allocation tags to the requested
   memory range.
 
+* Guile API
+
+  ** Improved support for rvalue reference values:
+     TYPE_CODE_RVALUE_REF is now exported as part of the API and the
+     value-referenced-value procedure now handles rvalue reference
+     values.
+
 *** Changes in GDB 10
 
 * There are new feature names for ARC targets: "org.gnu.gdb.arc.core"
diff --git a/gdb/doc/guile.texi b/gdb/doc/guile.texi
index 762a82a08c5..c7904574002 100644
--- a/gdb/doc/guile.texi
+++ b/gdb/doc/guile.texi
@@ -1268,6 +1268,9 @@ A pointer-to-member.
 @item TYPE_CODE_REF
 A reference type.
 
+@item TYPE_CODE_RVALUE_REF
+A C@t{++}11 rvalue reference type.
+
 @item TYPE_CODE_CHAR
 A character type.
 
diff --git a/gdb/guile/scm-type.c b/gdb/guile/scm-type.c
index 8d9c2c5f9a4..d65102b01c7 100644
--- a/gdb/guile/scm-type.c
+++ b/gdb/guile/scm-type.c
@@ -1318,6 +1318,7 @@ static const scheme_integer_constant type_integer_constants[] =
   X (TYPE_CODE_METHODPTR),
   X (TYPE_CODE_MEMBERPTR),
   X (TYPE_CODE_REF),
+  X (TYPE_CODE_RVALUE_REF),
   X (TYPE_CODE_CHAR),
   X (TYPE_CODE_BOOL),
   X (TYPE_CODE_COMPLEX),
diff --git a/gdb/guile/scm-value.c b/gdb/guile/scm-value.c
index 59995169cd0..f50e8b5b46c 100644
--- a/gdb/guile/scm-value.c
+++ b/gdb/guile/scm-value.c
@@ -476,6 +476,7 @@ gdbscm_value_referenced_value (SCM self)
 	  res_val = value_ind (value);
 	  break;
 	case TYPE_CODE_REF:
+	case TYPE_CODE_RVALUE_REF:
 	  res_val = coerce_ref (value);
 	  break;
 	default:
-- 
2.30.2

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v3 2/3] Guile: add {r,}value-reference-value
  2021-04-28 16:27 [PATCH v3 0/3] Guile: add value-{reference,const}-value George Barrett
  2021-04-28 16:27 ` [PATCH v3 1/3] Guile: improved rvalue reference support George Barrett
@ 2021-04-28 16:27 ` George Barrett
  2021-04-28 16:40   ` Eli Zaretskii
  2021-04-28 16:59   ` Andrew Burgess
  2021-04-28 16:27 ` [PATCH v3 3/3] Guile: add value-const-value George Barrett
  2 siblings, 2 replies; 11+ messages in thread
From: George Barrett @ 2021-04-28 16:27 UTC (permalink / raw)
  To: gdb-patches; +Cc: George Barrett

The Guile API doesn't currently have an equivalent to the Python API's
Value.reference_value() or Value.rvalue_reference_value(). This commit
adds a procedure with equivalent semantics to the Guile API.

gdb/ChangeLog:

2021-04-29  George Barrett  <bob@bob131.so>

	* guile/scm-value.c (gdbscm_reference_value): Add helper
	function for reference value creation.
	(gdbscm_value_reference_value): Add implementation of
	value-reference-value procedure.
	(gdbscm_rvalue_reference_value): Add implementation of
	rvalue-reference-value procedure.
	(value_functions): Add value-reference-value procedure.
	Add rvalue-reference-value procedure.
	* NEWS (Guile API): Note the addition of new procedures.

gdb/doc/ChangeLog:

2021-04-29  George Barrett  <bob@bob131.so>

	* guile.texi (Values From Inferior In Guile): Add
	documentation for value-reference-value.
	Add documentation for rvalue-reference-value.

gdb/testsuite/ChangeLog:

2021-04-29  George Barrett  <bob@bob131.so>

	* gdb.guile/scm-value.exp (test_value_in_inferior): Add test
	for value-reference-value.
	Add test for rvalue-reference-value.
---
 gdb/NEWS                              |  3 ++
 gdb/doc/guile.texi                    | 10 +++++++
 gdb/guile/scm-value.c                 | 42 +++++++++++++++++++++++++++
 gdb/testsuite/gdb.guile/scm-value.exp | 10 +++++++
 4 files changed, 65 insertions(+)

diff --git a/gdb/NEWS b/gdb/NEWS
index 9c76df8b6d5..0c51f5fceca 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -192,6 +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.
+
 *** Changes in GDB 10
 
 * There are new feature names for ARC targets: "org.gnu.gdb.arc.core"
diff --git a/gdb/doc/guile.texi b/gdb/doc/guile.texi
index c7904574002..18782bb7589 100644
--- a/gdb/doc/guile.texi
+++ b/gdb/doc/guile.texi
@@ -801,6 +801,16 @@ The @code{<gdb:value>} object @code{scm-val} is identical to that
 corresponding to @code{val}.
 @end deffn
 
+@deffn {Scheme Procedure} value-reference-value value
+Return a new @code{<gdb:value>} object which is a reference to the value
+encapsulated by @code{<gdb:value>} object @var{value}.
+@end deffn
+
+@deffn {Scheme Procedure} rvalue-reference-value value
+Return a new @code{<gdb:value>} object which is an rvalue reference to
+the value encapsulated by @code{<gdb:value>} object @var{value}.
+@end deffn
+
 @deffn {Scheme Procedure} value-field value field-name
 Return field @var{field-name} from @code{<gdb:value>} object @var{value}.
 @end deffn
diff --git a/gdb/guile/scm-value.c b/gdb/guile/scm-value.c
index f50e8b5b46c..2ab193f044a 100644
--- a/gdb/guile/scm-value.c
+++ b/gdb/guile/scm-value.c
@@ -488,6 +488,38 @@ gdbscm_value_referenced_value (SCM self)
     });
 }
 
+static SCM
+gdbscm_reference_value (SCM self, enum type_code refcode)
+{
+  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 = value_ref (value, refcode);
+      return vlscm_scm_from_value (res_val);
+    });
+}
+
+/* (value-reference-value <gdb:value>) -> <gdb:value> */
+
+static SCM
+gdbscm_value_reference_value (SCM self)
+{
+  return gdbscm_reference_value (self, TYPE_CODE_REF);
+}
+
+/* (rvalue-reference-value <gdb:value>) -> <gdb:value> */
+
+static SCM
+gdbscm_rvalue_reference_value (SCM self)
+{
+  return gdbscm_reference_value (self, TYPE_CODE_RVALUE_REF);
+}
+
 /* (value-type <gdb:value>) -> <gdb:type> */
 
 static SCM
@@ -1352,6 +1384,16 @@ For example, for a value which is a reference to an 'int' pointer ('int *'),\n\
 value-dereference will result in a value of type 'int' while\n\
 value-referenced-value will result in a value of type 'int *'." },
 
+  { "value-reference-value", 1, 0, 0,
+    as_a_scm_t_subr (gdbscm_value_reference_value),
+    "\
+Return a <gdb:value> object which is a reference to the given value." },
+
+  { "rvalue-reference-value", 1, 0, 0,
+    as_a_scm_t_subr (gdbscm_rvalue_reference_value),
+    "\
+Return a <gdb:value> object which is an rvalue reference to 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 191af1d71a6..883c4bea72e 100644
--- a/gdb/testsuite/gdb.guile/scm-value.exp
+++ b/gdb/testsuite/gdb.guile/scm-value.exp
@@ -173,6 +173,16 @@ proc test_value_in_inferior {} {
 	"get string beyond null"
     gdb_test "gu (print nullst)" \
 	"= divide\\\\000et"
+
+    gdb_scm_test_silent_cmd "gu (define argv-ref (value-reference-value argv))" \
+	"test value-reference-value"
+    gdb_test "gu (equal? argv (value-referenced-value argv-ref))" "#t"
+    gdb_test "gu (eqv? (type-code (value-type argv-ref)) TYPE_CODE_REF)" "#t"
+
+    gdb_scm_test_silent_cmd "gu (define argv-rref (rvalue-reference-value argv))" \
+	"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"
 }
 
 proc test_strings {} {
-- 
2.30.2

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v3 3/3] Guile: add value-const-value
  2021-04-28 16:27 [PATCH v3 0/3] Guile: add value-{reference,const}-value George Barrett
  2021-04-28 16:27 ` [PATCH v3 1/3] Guile: improved rvalue reference support George Barrett
  2021-04-28 16:27 ` [PATCH v3 2/3] Guile: add {r,}value-reference-value George Barrett
@ 2021-04-28 16:27 ` George Barrett
  2021-04-28 16:39   ` Eli Zaretskii
  2021-04-28 17:00   ` Andrew Burgess
  2 siblings, 2 replies; 11+ messages in thread
From: George Barrett @ 2021-04-28 16:27 UTC (permalink / raw)
  To: gdb-patches; +Cc: George Barrett

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  <bob@bob131.so>

	* 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  <bob@bob131.so>

	* guile.texi (Values From Inferior In Guile): Add
	documentation for value-const-value.

gdb/testsuite/ChangeLog:

2021-04-29  George Barrett  <bob@bob131.so>

	* 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{<gdb:value>} object which is an rvalue reference to
 the value encapsulated by @code{<gdb:value>} object @var{value}.
 @end deffn
 
+@deffn {Scheme Procedure} value-const-value value
+Return a new @code{<gdb:value>} object which is a @samp{const} version
+of @code{<gdb:value>} object @var{value}.
+@end deffn
+
 @deffn {Scheme Procedure} value-field value field-name
 Return field @var{field-name} from @code{<gdb:value>} 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 <gdb:value>) -> <gdb: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 <gdb:value>) -> <gdb:type> */
 
 static SCM
@@ -1394,6 +1412,11 @@ Return a <gdb:value> object which is a reference to the given value." },
     "\
 Return a <gdb:value> 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 <gdb:value> 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

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/3] Guile: improved rvalue reference support
  2021-04-28 16:27 ` [PATCH v3 1/3] Guile: improved rvalue reference support George Barrett
@ 2021-04-28 16:38   ` Eli Zaretskii
  2021-04-28 16:54   ` Andrew Burgess
  1 sibling, 0 replies; 11+ messages in thread
From: Eli Zaretskii @ 2021-04-28 16:38 UTC (permalink / raw)
  To: George Barrett; +Cc: gdb-patches

> Date: Thu, 29 Apr 2021 02:27:26 +1000
> From: George Barrett via Gdb-patches <gdb-patches@sourceware.org>
> Cc: George Barrett <bob@bob131.so>
> 
> Adds a couple of missing bits to the Guile API to make C++11 rvalue
> reference values and types usable from Guile scripts.
> 
> gdb/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* guile/scm-type.c (type_integer_constants): Add binding for
> 	TYPE_CODE_RVALUE_REF.
> 	* guile/scm-value.c (gdbscm_value_referenced_value): Handle
> 	dereferencing of rvalue references.
> 	* NEWS (Guile API): Note improvements in rvalue reference
> 	support.
> 
> gdb/doc/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* guile.texi (Types In Guile): Add documentation for
> 	TYPE_CODE_RVALUE_REF.

The documentation parts are okay, thanks.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 3/3] Guile: add value-const-value
  2021-04-28 16:27 ` [PATCH v3 3/3] Guile: add value-const-value George Barrett
@ 2021-04-28 16:39   ` Eli Zaretskii
  2021-04-28 17:00   ` Andrew Burgess
  1 sibling, 0 replies; 11+ messages in thread
From: Eli Zaretskii @ 2021-04-28 16:39 UTC (permalink / raw)
  To: George Barrett; +Cc: gdb-patches

> Date: Thu, 29 Apr 2021 02:27:49 +1000
> From: George Barrett via Gdb-patches <gdb-patches@sourceware.org>
> Cc: George Barrett <bob@bob131.so>
> 
> 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  <bob@bob131.so>
> 
> 	* 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  <bob@bob131.so>
> 
> 	* guile.texi (Values From Inferior In Guile): Add
> 	documentation for value-const-value.
> 
> gdb/testsuite/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* gdb.guile/scm-value.exp (test_value_in_inferior): Add test
> 	for value-const-value.

OK for the documentation parts.

Thanks.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 2/3] Guile: add {r,}value-reference-value
  2021-04-28 16:27 ` [PATCH v3 2/3] Guile: add {r,}value-reference-value George Barrett
@ 2021-04-28 16:40   ` Eli Zaretskii
  2021-04-28 16:59   ` Andrew Burgess
  1 sibling, 0 replies; 11+ messages in thread
From: Eli Zaretskii @ 2021-04-28 16:40 UTC (permalink / raw)
  To: George Barrett; +Cc: gdb-patches

> Date: Thu, 29 Apr 2021 02:27:37 +1000
> From: George Barrett via Gdb-patches <gdb-patches@sourceware.org>
> Cc: George Barrett <bob@bob131.so>
> 
> The Guile API doesn't currently have an equivalent to the Python API's
> Value.reference_value() or Value.rvalue_reference_value(). This commit
> adds a procedure with equivalent semantics to the Guile API.
> 
> gdb/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* guile/scm-value.c (gdbscm_reference_value): Add helper
> 	function for reference value creation.
> 	(gdbscm_value_reference_value): Add implementation of
> 	value-reference-value procedure.
> 	(gdbscm_rvalue_reference_value): Add implementation of
> 	rvalue-reference-value procedure.
> 	(value_functions): Add value-reference-value procedure.
> 	Add rvalue-reference-value procedure.
> 	* NEWS (Guile API): Note the addition of new procedures.
> 
> gdb/doc/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* guile.texi (Values From Inferior In Guile): Add
> 	documentation for value-reference-value.
> 	Add documentation for rvalue-reference-value.
> 
> gdb/testsuite/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* gdb.guile/scm-value.exp (test_value_in_inferior): Add test
> 	for value-reference-value.
> 	Add test for rvalue-reference-value.

Thanks, the documentation parts are okay.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/3] Guile: improved rvalue reference support
  2021-04-28 16:27 ` [PATCH v3 1/3] Guile: improved rvalue reference support George Barrett
  2021-04-28 16:38   ` Eli Zaretskii
@ 2021-04-28 16:54   ` Andrew Burgess
  1 sibling, 0 replies; 11+ messages in thread
From: Andrew Burgess @ 2021-04-28 16:54 UTC (permalink / raw)
  To: George Barrett; +Cc: gdb-patches

* George Barrett via Gdb-patches <gdb-patches@sourceware.org> [2021-04-29 02:27:26 +1000]:

> Adds a couple of missing bits to the Guile API to make C++11 rvalue
> reference values and types usable from Guile scripts.
> 
> gdb/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* guile/scm-type.c (type_integer_constants): Add binding for
> 	TYPE_CODE_RVALUE_REF.
> 	* guile/scm-value.c (gdbscm_value_referenced_value): Handle
> 	dereferencing of rvalue references.
> 	* NEWS (Guile API): Note improvements in rvalue reference
> 	support.
> 
> gdb/doc/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* guile.texi (Types In Guile): Add documentation for
> 	TYPE_CODE_RVALUE_REF.

Looks good to me.

Thanks,
Andrew

> ---
>  gdb/NEWS              | 7 +++++++
>  gdb/doc/guile.texi    | 3 +++
>  gdb/guile/scm-type.c  | 1 +
>  gdb/guile/scm-value.c | 1 +
>  4 files changed, 12 insertions(+)
> 
> diff --git a/gdb/NEWS b/gdb/NEWS
> index 6550ea352ac..9c76df8b6d5 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -185,6 +185,13 @@ QMemTags
>    Request the remote to store the specified allocation tags to the requested
>    memory range.
>  
> +* Guile API
> +
> +  ** Improved support for rvalue reference values:
> +     TYPE_CODE_RVALUE_REF is now exported as part of the API and the
> +     value-referenced-value procedure now handles rvalue reference
> +     values.
> +
>  *** Changes in GDB 10
>  
>  * There are new feature names for ARC targets: "org.gnu.gdb.arc.core"
> diff --git a/gdb/doc/guile.texi b/gdb/doc/guile.texi
> index 762a82a08c5..c7904574002 100644
> --- a/gdb/doc/guile.texi
> +++ b/gdb/doc/guile.texi
> @@ -1268,6 +1268,9 @@ A pointer-to-member.
>  @item TYPE_CODE_REF
>  A reference type.
>  
> +@item TYPE_CODE_RVALUE_REF
> +A C@t{++}11 rvalue reference type.
> +
>  @item TYPE_CODE_CHAR
>  A character type.
>  
> diff --git a/gdb/guile/scm-type.c b/gdb/guile/scm-type.c
> index 8d9c2c5f9a4..d65102b01c7 100644
> --- a/gdb/guile/scm-type.c
> +++ b/gdb/guile/scm-type.c
> @@ -1318,6 +1318,7 @@ static const scheme_integer_constant type_integer_constants[] =
>    X (TYPE_CODE_METHODPTR),
>    X (TYPE_CODE_MEMBERPTR),
>    X (TYPE_CODE_REF),
> +  X (TYPE_CODE_RVALUE_REF),
>    X (TYPE_CODE_CHAR),
>    X (TYPE_CODE_BOOL),
>    X (TYPE_CODE_COMPLEX),
> diff --git a/gdb/guile/scm-value.c b/gdb/guile/scm-value.c
> index 59995169cd0..f50e8b5b46c 100644
> --- a/gdb/guile/scm-value.c
> +++ b/gdb/guile/scm-value.c
> @@ -476,6 +476,7 @@ gdbscm_value_referenced_value (SCM self)
>  	  res_val = value_ind (value);
>  	  break;
>  	case TYPE_CODE_REF:
> +	case TYPE_CODE_RVALUE_REF:
>  	  res_val = coerce_ref (value);
>  	  break;
>  	default:
> -- 
> 2.30.2

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 2/3] Guile: add {r,}value-reference-value
  2021-04-28 16:27 ` [PATCH v3 2/3] Guile: add {r,}value-reference-value George Barrett
  2021-04-28 16:40   ` Eli Zaretskii
@ 2021-04-28 16:59   ` Andrew Burgess
  2021-04-28 17:11     ` George Barrett
  1 sibling, 1 reply; 11+ messages in thread
From: Andrew Burgess @ 2021-04-28 16:59 UTC (permalink / raw)
  To: George Barrett; +Cc: gdb-patches

* George Barrett via Gdb-patches <gdb-patches@sourceware.org> [2021-04-29 02:27:37 +1000]:

> The Guile API doesn't currently have an equivalent to the Python API's
> Value.reference_value() or Value.rvalue_reference_value(). This commit
> adds a procedure with equivalent semantics to the Guile API.

Thank you for doing this work.  I'm sorry to be a real pain, but could
you rename the second new function to value-rvalue-reference-value
please, I think this would be inline with the existing naming
convention; the first 'value-' indicates that the function applies to
something of value type, and the rest of the name
'rvalue-reference-value' indicates what you're going to get.

If you just make the rename as suggested, then this patch is approved.

Thanks,
Andrew

> 
> gdb/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* guile/scm-value.c (gdbscm_reference_value): Add helper
> 	function for reference value creation.
> 	(gdbscm_value_reference_value): Add implementation of
> 	value-reference-value procedure.
> 	(gdbscm_rvalue_reference_value): Add implementation of
> 	rvalue-reference-value procedure.
> 	(value_functions): Add value-reference-value procedure.
> 	Add rvalue-reference-value procedure.
> 	* NEWS (Guile API): Note the addition of new procedures.
> 
> gdb/doc/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* guile.texi (Values From Inferior In Guile): Add
> 	documentation for value-reference-value.
> 	Add documentation for rvalue-reference-value.
> 
> gdb/testsuite/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* gdb.guile/scm-value.exp (test_value_in_inferior): Add test
> 	for value-reference-value.
> 	Add test for rvalue-reference-value.
> ---
>  gdb/NEWS                              |  3 ++
>  gdb/doc/guile.texi                    | 10 +++++++
>  gdb/guile/scm-value.c                 | 42 +++++++++++++++++++++++++++
>  gdb/testsuite/gdb.guile/scm-value.exp | 10 +++++++
>  4 files changed, 65 insertions(+)
> 
> diff --git a/gdb/NEWS b/gdb/NEWS
> index 9c76df8b6d5..0c51f5fceca 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -192,6 +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.
> +
>  *** Changes in GDB 10
>  
>  * There are new feature names for ARC targets: "org.gnu.gdb.arc.core"
> diff --git a/gdb/doc/guile.texi b/gdb/doc/guile.texi
> index c7904574002..18782bb7589 100644
> --- a/gdb/doc/guile.texi
> +++ b/gdb/doc/guile.texi
> @@ -801,6 +801,16 @@ The @code{<gdb:value>} object @code{scm-val} is identical to that
>  corresponding to @code{val}.
>  @end deffn
>  
> +@deffn {Scheme Procedure} value-reference-value value
> +Return a new @code{<gdb:value>} object which is a reference to the value
> +encapsulated by @code{<gdb:value>} object @var{value}.
> +@end deffn
> +
> +@deffn {Scheme Procedure} rvalue-reference-value value
> +Return a new @code{<gdb:value>} object which is an rvalue reference to
> +the value encapsulated by @code{<gdb:value>} object @var{value}.
> +@end deffn
> +
>  @deffn {Scheme Procedure} value-field value field-name
>  Return field @var{field-name} from @code{<gdb:value>} object @var{value}.
>  @end deffn
> diff --git a/gdb/guile/scm-value.c b/gdb/guile/scm-value.c
> index f50e8b5b46c..2ab193f044a 100644
> --- a/gdb/guile/scm-value.c
> +++ b/gdb/guile/scm-value.c
> @@ -488,6 +488,38 @@ gdbscm_value_referenced_value (SCM self)
>      });
>  }
>  
> +static SCM
> +gdbscm_reference_value (SCM self, enum type_code refcode)
> +{
> +  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 = value_ref (value, refcode);
> +      return vlscm_scm_from_value (res_val);
> +    });
> +}
> +
> +/* (value-reference-value <gdb:value>) -> <gdb:value> */
> +
> +static SCM
> +gdbscm_value_reference_value (SCM self)
> +{
> +  return gdbscm_reference_value (self, TYPE_CODE_REF);
> +}
> +
> +/* (rvalue-reference-value <gdb:value>) -> <gdb:value> */
> +
> +static SCM
> +gdbscm_rvalue_reference_value (SCM self)
> +{
> +  return gdbscm_reference_value (self, TYPE_CODE_RVALUE_REF);
> +}
> +
>  /* (value-type <gdb:value>) -> <gdb:type> */
>  
>  static SCM
> @@ -1352,6 +1384,16 @@ For example, for a value which is a reference to an 'int' pointer ('int *'),\n\
>  value-dereference will result in a value of type 'int' while\n\
>  value-referenced-value will result in a value of type 'int *'." },
>  
> +  { "value-reference-value", 1, 0, 0,
> +    as_a_scm_t_subr (gdbscm_value_reference_value),
> +    "\
> +Return a <gdb:value> object which is a reference to the given value." },
> +
> +  { "rvalue-reference-value", 1, 0, 0,
> +    as_a_scm_t_subr (gdbscm_rvalue_reference_value),
> +    "\
> +Return a <gdb:value> object which is an rvalue reference to 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 191af1d71a6..883c4bea72e 100644
> --- a/gdb/testsuite/gdb.guile/scm-value.exp
> +++ b/gdb/testsuite/gdb.guile/scm-value.exp
> @@ -173,6 +173,16 @@ proc test_value_in_inferior {} {
>  	"get string beyond null"
>      gdb_test "gu (print nullst)" \
>  	"= divide\\\\000et"
> +
> +    gdb_scm_test_silent_cmd "gu (define argv-ref (value-reference-value argv))" \
> +	"test value-reference-value"
> +    gdb_test "gu (equal? argv (value-referenced-value argv-ref))" "#t"
> +    gdb_test "gu (eqv? (type-code (value-type argv-ref)) TYPE_CODE_REF)" "#t"
> +
> +    gdb_scm_test_silent_cmd "gu (define argv-rref (rvalue-reference-value argv))" \
> +	"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"
>  }
>  
>  proc test_strings {} {
> -- 
> 2.30.2

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 3/3] Guile: add value-const-value
  2021-04-28 16:27 ` [PATCH v3 3/3] Guile: add value-const-value George Barrett
  2021-04-28 16:39   ` Eli Zaretskii
@ 2021-04-28 17:00   ` Andrew Burgess
  1 sibling, 0 replies; 11+ messages in thread
From: Andrew Burgess @ 2021-04-28 17:00 UTC (permalink / raw)
  To: George Barrett; +Cc: gdb-patches

* George Barrett via Gdb-patches <gdb-patches@sourceware.org> [2021-04-29 02:27:49 +1000]:

> 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  <bob@bob131.so>
> 
> 	* 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  <bob@bob131.so>
> 
> 	* guile.texi (Values From Inferior In Guile): Add
> 	documentation for value-const-value.
> 
> gdb/testsuite/ChangeLog:
> 
> 2021-04-29  George Barrett  <bob@bob131.so>
> 
> 	* gdb.guile/scm-value.exp (test_value_in_inferior): Add test
> 	for value-const-value.

LGTM.

Thanks,
Andrew


> ---
>  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{<gdb:value>} object which is an rvalue reference to
>  the value encapsulated by @code{<gdb:value>} object @var{value}.
>  @end deffn
>  
> +@deffn {Scheme Procedure} value-const-value value
> +Return a new @code{<gdb:value>} object which is a @samp{const} version
> +of @code{<gdb:value>} object @var{value}.
> +@end deffn
> +
>  @deffn {Scheme Procedure} value-field value field-name
>  Return field @var{field-name} from @code{<gdb:value>} 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 <gdb:value>) -> <gdb: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 <gdb:value>) -> <gdb:type> */
>  
>  static SCM
> @@ -1394,6 +1412,11 @@ Return a <gdb:value> object which is a reference to the given value." },
>      "\
>  Return a <gdb:value> 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 <gdb:value> 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

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 2/3] Guile: add {r,}value-reference-value
  2021-04-28 16:59   ` Andrew Burgess
@ 2021-04-28 17:11     ` George Barrett
  0 siblings, 0 replies; 11+ messages in thread
From: George Barrett @ 2021-04-28 17:11 UTC (permalink / raw)
  To: Andrew Burgess; +Cc: gdb-patches

On Wed, Apr 28, 2021 at 05:59:45PM +0100, Andrew Burgess wrote:
> Thank you for doing this work.  I'm sorry to be a real pain, but could
> you rename the second new function to value-rvalue-reference-value
> please, I think this would be inline with the existing naming
> convention; the first 'value-' indicates that the function applies to
> something of value type, and the rest of the name
> 'rvalue-reference-value' indicates what you're going to get.

No problem, thank you for your patience with me. I have no objection to the
name change (in fact, I'm not sure why I thought the name I chose was an
appropriate one :P) so I'll roll a v4 in a moment.

> If you just make the rename as suggested, then this patch is approved.
> 
> Thanks,
> Andrew

Thanks

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-04-28 17:11 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-28 16:27 [PATCH v3 0/3] Guile: add value-{reference,const}-value George Barrett
2021-04-28 16:27 ` [PATCH v3 1/3] Guile: improved rvalue reference support George Barrett
2021-04-28 16:38   ` Eli Zaretskii
2021-04-28 16:54   ` Andrew Burgess
2021-04-28 16:27 ` [PATCH v3 2/3] Guile: add {r,}value-reference-value George Barrett
2021-04-28 16:40   ` Eli Zaretskii
2021-04-28 16:59   ` Andrew Burgess
2021-04-28 17:11     ` George Barrett
2021-04-28 16:27 ` [PATCH v3 3/3] Guile: add value-const-value George Barrett
2021-04-28 16:39   ` Eli Zaretskii
2021-04-28 17:00   ` Andrew Burgess

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).