public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Move value_true to value.h
@ 2021-09-11 18:12 Tom Tromey
  2021-09-23 19:15 ` Pedro Alves
  0 siblings, 1 reply; 5+ messages in thread
From: Tom Tromey @ 2021-09-11 18:12 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

I noticed that value_true is declared in language.h and defined in
language.c.  However, as part of the value API, I think it would be
better in one of those files.  And, because it is very short, I
changed it to be an inline function in value.h.  I've also removed a
comment from the implementation, on the basis that it seems obsolete
-- if the change it suggests was needed, it probably would have been
done by now; and if it is needed in the future, odds are it would be
done differently anyway.

Finally, this patch also changes value_true to return a bool, and
updates some uses.
---
 gdb/ada-lang.c       | 10 +++++-----
 gdb/cli/cli-script.c |  3 +--
 gdb/language.c       | 17 -----------------
 gdb/language.h       |  4 ----
 gdb/value.h          |  7 +++++++
 5 files changed, 13 insertions(+), 28 deletions(-)

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 6680a4fd657..63e2d587440 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -11754,13 +11754,13 @@ re_set_exception (struct breakpoint *b)
    user specified a specific exception, we only want to cause a stop
    if the program thrown that exception.  */
 
-static int
+static bool
 should_stop_exception (const struct bp_location *bl)
 {
   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
   const struct ada_catchpoint_location *ada_loc
     = (const struct ada_catchpoint_location *) bl;
-  int stop;
+  bool stop;
 
   struct internalvar *var = lookup_internalvar ("_ada_exception");
   if (c->m_kind == ada_catch_assert)
@@ -11788,16 +11788,16 @@ should_stop_exception (const struct bp_location *bl)
 
   /* With no specific exception, should always stop.  */
   if (c->excep_string.empty ())
-    return 1;
+    return true;
 
   if (ada_loc->excep_cond_expr == NULL)
     {
       /* We will have a NULL expression if back when we were creating
 	 the expressions, this location's had failed to parse.  */
-      return 1;
+      return true;
     }
 
-  stop = 1;
+  stop = true;
   try
     {
       struct value *mark;
diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c
index 98463677902..0aaa59ea65f 100644
--- a/gdb/cli/cli-script.c
+++ b/gdb/cli/cli-script.c
@@ -19,7 +19,6 @@
 
 #include "defs.h"
 #include "value.h"
-#include "language.h"		/* For value_true */
 #include <ctype.h>
 
 #include "ui-out.h"
@@ -579,7 +578,7 @@ execute_control_command_1 (struct command_line *cmd, int from_tty)
 	/* Keep iterating so long as the expression is true.  */
 	while (loop == 1)
 	  {
-	    int cond_result;
+	    bool cond_result;
 
 	    QUIT;
 
diff --git a/gdb/language.c b/gdb/language.c
index 45ce2ebcc92..f52956022ac 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -394,23 +394,6 @@ pointer_type (struct type *type)
 {
   return type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type);
 }
-
-\f
-/* This page contains functions that return info about
-   (struct value) values used in GDB.  */
-
-/* Returns non-zero if the value VAL represents a true value.  */
-int
-value_true (struct value *val)
-{
-  /* It is possible that we should have some sort of error if a non-boolean
-     value is used in this context.  Possibly dependent on some kind of
-     "boolean-checking" option like range checking.  But it should probably
-     not depend on the language except insofar as is necessary to identify
-     a "boolean" value (i.e. in C using a float, pointer, etc., as a boolean
-     should be an error, probably).  */
-  return !value_logical_not (val);
-}
 \f
 /* This page contains functions for the printing out of
    error messages that occur during type- and range-
diff --git a/gdb/language.h b/gdb/language.h
index 21ed47b3580..c6bef7494b3 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -774,10 +774,6 @@ extern int pointer_type (struct type *);
 
 extern void range_error (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
 
-/* Data:  Does this value represent "truth" to the current language?  */
-
-extern int value_true (struct value *);
-
 /* Misc:  The string representing a particular enum language.  */
 
 extern enum language language_enum (const char *str);
diff --git a/gdb/value.h b/gdb/value.h
index abbb8d4268a..c5847290564 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -1024,6 +1024,13 @@ extern int value_less (struct value *arg1, struct value *arg2);
 
 extern bool value_logical_not (struct value *arg1);
 
+/* Returns non-zero if the value VAL represents a true value.  */
+static inline bool
+value_true (struct value *val)
+{
+  return !value_logical_not (val);
+}
+
 /* C++ */
 
 extern struct value *value_of_this (const struct language_defn *lang);
-- 
2.31.1


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

* Re: [PATCH] Move value_true to value.h
  2021-09-11 18:12 [PATCH] Move value_true to value.h Tom Tromey
@ 2021-09-23 19:15 ` Pedro Alves
  2021-09-23 21:01   ` Tom Tromey
  0 siblings, 1 reply; 5+ messages in thread
From: Pedro Alves @ 2021-09-23 19:15 UTC (permalink / raw)
  To: Tom Tromey, gdb-patches

On 2021-09-11 7:12 p.m., Tom Tromey wrote:
> I noticed that value_true is declared in language.h and defined in
> language.c.  However, as part of the value API, I think it would be
> better in one of those files.  And, because it is very short, I
> changed it to be an inline function in value.h.  I've also removed a
> comment from the implementation, on the basis that it seems obsolete
> -- if the change it suggests was needed, it probably would have been
> done by now; and if it is needed in the future, odds are it would be
> done differently anyway.
> 
> Finally, this patch also changes value_true to return a bool, and
> updates some uses.

Seems obvious enough.  OK.

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

* Re: [PATCH] Move value_true to value.h
  2021-09-23 19:15 ` Pedro Alves
@ 2021-09-23 21:01   ` Tom Tromey
  2021-09-24 11:13     ` Pedro Alves
  0 siblings, 1 reply; 5+ messages in thread
From: Tom Tromey @ 2021-09-23 21:01 UTC (permalink / raw)
  To: Pedro Alves; +Cc: Tom Tromey, gdb-patches

>> Finally, this patch also changes value_true to return a bool, and
>> updates some uses.

Pedro> Seems obvious enough.  OK.

I sent the wrong version -- I also converted value_logical_not to return
bool.

Tom

commit 12fb19e547b8352fb2fdaafc9e0895eb34804d0d
Author: Tom Tromey <tom@tromey.com>
Date:   Thu Aug 26 18:17:40 2021 -0600

    Move value_true to value.h
    
    I noticed that value_true is declared in language.h and defined in
    language.c.  However, as part of the value API, I think it would be
    better in one of those files.  And, because it is very short, I
    changed it to be an inline function in value.h.  I've also removed a
    comment from the implementation, on the basis that it seems obsolete
    -- if the change it suggests was needed, it probably would have been
    done by now; and if it is needed in the future, odds are it would be
    done differently anyway.
    
    Finally, this patch also changes value_true and value_logical_not to
    return a bool, and updates some uses.

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 487d92be5c9..a00fa141156 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -11765,13 +11765,13 @@ re_set_exception (struct breakpoint *b)
    user specified a specific exception, we only want to cause a stop
    if the program thrown that exception.  */
 
-static int
+static bool
 should_stop_exception (const struct bp_location *bl)
 {
   struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
   const struct ada_catchpoint_location *ada_loc
     = (const struct ada_catchpoint_location *) bl;
-  int stop;
+  bool stop;
 
   struct internalvar *var = lookup_internalvar ("_ada_exception");
   if (c->m_kind == ada_catch_assert)
@@ -11799,16 +11799,16 @@ should_stop_exception (const struct bp_location *bl)
 
   /* With no specific exception, should always stop.  */
   if (c->excep_string.empty ())
-    return 1;
+    return true;
 
   if (ada_loc->excep_cond_expr == NULL)
     {
       /* We will have a NULL expression if back when we were creating
 	 the expressions, this location's had failed to parse.  */
-      return 1;
+      return true;
     }
 
-  stop = 1;
+  stop = true;
   try
     {
       struct value *mark;
diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c
index 98463677902..0aaa59ea65f 100644
--- a/gdb/cli/cli-script.c
+++ b/gdb/cli/cli-script.c
@@ -19,7 +19,6 @@
 
 #include "defs.h"
 #include "value.h"
-#include "language.h"		/* For value_true */
 #include <ctype.h>
 
 #include "ui-out.h"
@@ -579,7 +578,7 @@ execute_control_command_1 (struct command_line *cmd, int from_tty)
 	/* Keep iterating so long as the expression is true.  */
 	while (loop == 1)
 	  {
-	    int cond_result;
+	    bool cond_result;
 
 	    QUIT;
 
diff --git a/gdb/eval.c b/gdb/eval.c
index 5c348c34e66..97710e73ece 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -2206,7 +2206,7 @@ logical_and_operation::evaluate (struct type *expect_type,
     }
   else
     {
-      int tem = value_logical_not (arg1);
+      bool tem = value_logical_not (arg1);
       if (!tem)
 	{
 	  arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
@@ -2235,7 +2235,7 @@ logical_or_operation::evaluate (struct type *expect_type,
     }
   else
     {
-      int tem = value_logical_not (arg1);
+      bool tem = value_logical_not (arg1);
       if (tem)
 	{
 	  arg2 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
diff --git a/gdb/language.c b/gdb/language.c
index 45ce2ebcc92..f52956022ac 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -394,23 +394,6 @@ pointer_type (struct type *type)
 {
   return type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type);
 }
-
-\f
-/* This page contains functions that return info about
-   (struct value) values used in GDB.  */
-
-/* Returns non-zero if the value VAL represents a true value.  */
-int
-value_true (struct value *val)
-{
-  /* It is possible that we should have some sort of error if a non-boolean
-     value is used in this context.  Possibly dependent on some kind of
-     "boolean-checking" option like range checking.  But it should probably
-     not depend on the language except insofar as is necessary to identify
-     a "boolean" value (i.e. in C using a float, pointer, etc., as a boolean
-     should be an error, probably).  */
-  return !value_logical_not (val);
-}
 \f
 /* This page contains functions for the printing out of
    error messages that occur during type- and range-
diff --git a/gdb/language.h b/gdb/language.h
index 40d22d20559..312662055e5 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -782,10 +782,6 @@ extern int pointer_type (struct type *);
 
 extern void range_error (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
 
-/* Data:  Does this value represent "truth" to the current language?  */
-
-extern int value_true (struct value *);
-
 /* Misc:  The string representing a particular enum language.  */
 
 extern enum language language_enum (const char *str);
diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
index 136969ead76..b877de400d7 100644
--- a/gdb/opencl-lang.c
+++ b/gdb/opencl-lang.c
@@ -748,7 +748,7 @@ opencl_logical_binop_operation::evaluate (struct type *expect_type,
       /* For scalar built-in types, only evaluate the right
 	 hand operand if the left hand operand compares
 	 unequal(&&)/equal(||) to 0.  */
-      int tmp = value_logical_not (arg1);
+      bool tmp = value_logical_not (arg1);
 
       if (op == BINOP_LOGICAL_OR)
 	tmp = !tmp;
diff --git a/gdb/valarith.c b/gdb/valarith.c
index 9ebad648b27..8acd83545f7 100644
--- a/gdb/valarith.c
+++ b/gdb/valarith.c
@@ -1655,7 +1655,7 @@ value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
 \f
 /* Simulate the C operator ! -- return 1 if ARG1 contains zero.  */
 
-int
+bool
 value_logical_not (struct value *arg1)
 {
   int len;
diff --git a/gdb/value.h b/gdb/value.h
index e1c6aabfa29..c5847290564 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -1022,7 +1022,14 @@ extern int value_equal_contents (struct value *arg1, struct value *arg2);
 
 extern int value_less (struct value *arg1, struct value *arg2);
 
-extern int value_logical_not (struct value *arg1);
+extern bool value_logical_not (struct value *arg1);
+
+/* Returns non-zero if the value VAL represents a true value.  */
+static inline bool
+value_true (struct value *val)
+{
+  return !value_logical_not (val);
+}
 
 /* C++ */
 

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

* Re: [PATCH] Move value_true to value.h
  2021-09-23 21:01   ` Tom Tromey
@ 2021-09-24 11:13     ` Pedro Alves
  2021-09-24 17:56       ` Tom Tromey
  0 siblings, 1 reply; 5+ messages in thread
From: Pedro Alves @ 2021-09-24 11:13 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

On 2021-09-23 10:01 p.m., Tom Tromey wrote:

> commit 12fb19e547b8352fb2fdaafc9e0895eb34804d0d
> Author: Tom Tromey <tom@tromey.com>
> Date:   Thu Aug 26 18:17:40 2021 -0600
> 
>     Move value_true to value.h
>     
>     I noticed that value_true is declared in language.h and defined in
>     language.c.  However, as part of the value API, I think it would be
>     better in one of those files.  And, because it is very short, I
>     changed it to be an inline function in value.h.  I've also removed a
>     comment from the implementation, on the basis that it seems obsolete
>     -- if the change it suggests was needed, it probably would have been
>     done by now; and if it is needed in the future, odds are it would be
>     done differently anyway.
>     
>     Finally, this patch also changes value_true and value_logical_not to
>     return a bool, and updates some uses.

Still OK.  Though I noticed a couple comments that could use tweaking.


> diff --git a/gdb/valarith.c b/gdb/valarith.c
> index 9ebad648b27..8acd83545f7 100644
> --- a/gdb/valarith.c
> +++ b/gdb/valarith.c
> @@ -1655,7 +1655,7 @@ value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
>  \f
>  /* Simulate the C operator ! -- return 1 if ARG1 contains zero.  */

"Return true".  Consider moving to .h file.

>  
> -int
> +bool
>  value_logical_not (struct value *arg1)
>  {
>    int len;
> diff --git a/gdb/value.h b/gdb/value.h
> index e1c6aabfa29..c5847290564 100644
> --- a/gdb/value.h
> +++ b/gdb/value.h

> @@ -1022,7 +1022,14 @@ extern int value_equal_contents (struct value *arg1, struct value *arg2);
>  
>  extern int value_less (struct value *arg1, struct value *arg2);
>  
> -extern int value_logical_not (struct value *arg1);
> +extern bool value_logical_not (struct value *arg1);
> +
> +/* Returns non-zero if the value VAL represents a true value.  */

"Returns true".

> +static inline bool
> +value_true (struct value *val)
> +{
> +  return !value_logical_not (val);
> +}
>  
>  /* C++ */
>  
> 

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

* Re: [PATCH] Move value_true to value.h
  2021-09-24 11:13     ` Pedro Alves
@ 2021-09-24 17:56       ` Tom Tromey
  0 siblings, 0 replies; 5+ messages in thread
From: Tom Tromey @ 2021-09-24 17:56 UTC (permalink / raw)
  To: Pedro Alves; +Cc: Tom Tromey, gdb-patches

Pedro> Still OK.  Though I noticed a couple comments that could use tweaking.

I've made these changes and will check it in shortly.  Thanks.

Tom

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

end of thread, other threads:[~2021-09-24 17:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-11 18:12 [PATCH] Move value_true to value.h Tom Tromey
2021-09-23 19:15 ` Pedro Alves
2021-09-23 21:01   ` Tom Tromey
2021-09-24 11:13     ` Pedro Alves
2021-09-24 17:56       ` Tom Tromey

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).