[22/40] get_int_var_value

Message ID 1496406158-12663-23-git-send-email-palves@redhat.com
State New, archived
Headers

Commit Message

Pedro Alves June 2, 2017, 12:22 p.m. UTC
  I noticed that get_int_var_value's parameters could use some
constification.  And then realized that client code would become
simpler by changing the interface to return the success/failure
indication as actual return value, as allows getting rid of the the
local "boolean" variable.

gdb/ChangeLog:
yyyy-mm-dd  Pedro Alves  <palves@redhat.com>

	* ada-lang.c (ada_to_fixed_type_1): Adjust.
	(get_var_value): Constify parameters.
	(get_int_var_value): Change prototype.
	(to_fixed_range_type): Adjust.
	* ada-lang.h (get_int_var_value): Change prototype.
---
 gdb/ada-lang.c      | 44 ++++++++++++++------------------------------
 gdb/ada-lang.h      |  2 +-
 gdb/ada-typeprint.c |  4 +---
 3 files changed, 16 insertions(+), 34 deletions(-)
  

Comments

Keith Seitz July 17, 2017, 10:11 p.m. UTC | #1
On 06/02/2017 05:22 AM, Pedro Alves wrote:
> I noticed that get_int_var_value's parameters could use some
> constification.  And then realized that client code would become
> simpler by changing the interface to return the success/failure
> indication as actual return value, as allows getting rid of the the
> local "boolean" variable.

It is certainly more appropriate for Joel to comment, but I did look through the patch, and it is a pretty straightforward change. I didn't notice any issues.

Keith
  
Pedro Alves July 20, 2017, 5:15 p.m. UTC | #2
On 07/17/2017 11:11 PM, Keith Seitz wrote:
> On 06/02/2017 05:22 AM, Pedro Alves wrote:
>> I noticed that get_int_var_value's parameters could use some
>> constification.  And then realized that client code would become
>> simpler by changing the interface to return the success/failure
>> indication as actual return value, as allows getting rid of the the
>> local "boolean" variable.
> 
> It is certainly more appropriate for Joel to comment, but I did look through the patch, and it is a pretty straightforward change. I didn't notice any issues.

Thanks!  I want ahead and push it in to get it out of
the way of the following, more interesting patches.  I'll of
course gladly address any concern that Joel may have.

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index ab54c64..c5f7f8c 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -193,8 +193,6 @@  static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
 static struct value *coerce_unspec_val_to_type (struct value *,
                                                 struct type *);
 
-static struct value *get_var_value (char *, char *);
-
 static int lesseq_defined_than (struct symbol *, struct symbol *);
 
 static int equiv_types (struct type *, struct type *);
@@ -8989,12 +8987,11 @@  ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
             const char *name = ada_type_name (fixed_record_type);
             char *xvz_name
 	      = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
-            int xvz_found = 0;
             LONGEST size;
 
             xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
-            size = get_int_var_value (xvz_name, &xvz_found);
-            if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
+            if (get_int_var_value (xvz_name, size)
+		&& TYPE_LENGTH (fixed_record_type) != size)
               {
                 fixed_record_type = copy_type (fixed_record_type);
                 TYPE_LENGTH (fixed_record_type) = size;
@@ -11614,7 +11611,7 @@  scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
    otherwise causes an error with message ERR_MSG.  */
 
 static struct value *
-get_var_value (char *name, char *err_msg)
+get_var_value (const char *name, const char *err_msg)
 {
   struct block_symbol *syms;
   int nsyms;
@@ -11633,27 +11630,20 @@  get_var_value (char *name, char *err_msg)
   return value_of_variable (syms[0].symbol, syms[0].block);
 }
 
-/* Value of integer variable named NAME in the current environment.  If
-   no such variable found, returns 0, and sets *FLAG to 0.  If
-   successful, sets *FLAG to 1.  */
+/* Value of integer variable named NAME in the current environment.
+   If no such variable is found, returns false.  Otherwise, sets VALUE
+   to the variable's value and returns true.  */
 
-LONGEST
-get_int_var_value (char *name, int *flag)
+bool
+get_int_var_value (const char *name, LONGEST &value)
 {
   struct value *var_val = get_var_value (name, 0);
 
   if (var_val == 0)
-    {
-      if (flag != NULL)
-        *flag = 0;
-      return 0;
-    }
-  else
-    {
-      if (flag != NULL)
-        *flag = 1;
-      return value_as_long (var_val);
-    }
+    return false;
+
+  value = value_as_long (var_val);
+  return true;
 }
 
 
@@ -11725,11 +11715,8 @@  to_fixed_range_type (struct type *raw_type, struct value *dval)
         }
       else
         {
-          int ok;
-
           strcpy (name_buf + prefix_len, "___L");
-          L = get_int_var_value (name_buf, &ok);
-          if (!ok)
+          if (!get_int_var_value (name_buf, L))
             {
               lim_warning (_("Unknown lower bound, using 1."));
               L = 1;
@@ -11744,11 +11731,8 @@  to_fixed_range_type (struct type *raw_type, struct value *dval)
         }
       else
         {
-          int ok;
-
           strcpy (name_buf + prefix_len, "___U");
-          U = get_int_var_value (name_buf, &ok);
-          if (!ok)
+          if (!get_int_var_value (name_buf, U))
             {
               lim_warning (_("Unknown upper bound, using %ld."), (long) L);
               U = L;
diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h
index 5f97a6c..f5b3bca 100644
--- a/gdb/ada-lang.h
+++ b/gdb/ada-lang.h
@@ -335,7 +335,7 @@  extern const char *ada_type_name (struct type *);
 extern struct type *ada_find_parallel_type (struct type *,
                                             const char *suffix);
 
-extern LONGEST get_int_var_value (char *, int *);
+extern bool get_int_var_value (const char *, LONGEST &value);
 
 extern struct symbol *ada_find_renaming_symbol (struct symbol *name_sym,
                                                 const struct block *block);
diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c
index 3c33bdc..8392513 100644
--- a/gdb/ada-typeprint.c
+++ b/gdb/ada-typeprint.c
@@ -256,14 +256,12 @@  print_dynamic_range_bound (struct type *type, const char *name, int name_len,
   static char *name_buf = NULL;
   static size_t name_buf_len = 0;
   LONGEST B;
-  int OK;
 
   GROW_VECT (name_buf, name_buf_len, name_len + strlen (suffix) + 1);
   strncpy (name_buf, name, name_len);
   strcpy (name_buf + name_len, suffix);
 
-  B = get_int_var_value (name_buf, &OK);
-  if (OK)
+  if (get_int_var_value (name_buf, B))
     ada_print_scalar (type, B, stream);
   else
     fprintf_filtered (stream, "?");