Use std::string, std::vector in rust-lang.c
authorTom Tromey <tom@tromey.com>
Thu, 22 Sep 2016 15:51:20 +0000 (09:51 -0600)
committerTom Tromey <tom@tromey.com>
Fri, 23 Sep 2016 17:37:08 +0000 (11:37 -0600)
This patch changes some spots in rust-lang.c to use std::string or
std::vector, removing some cleanups.

2016-09-23  Tom Tromey  <tom@tromey.com>

* rust-lang.c: Include <string> and <vector>.
(rust_evaluate_funcall): Use std::vector, std::string.
(rust_evaluate_subexp): Use std::string.
(rust_lookup_symbol_nonlocal): Use std::string.

gdb/ChangeLog
gdb/rust-lang.c

index 410c386758baf8ab0d1926105a603b1e881ec3b1..ab90503d35fdf498dfbc04972863389c0925f53c 100644 (file)
@@ -1,3 +1,10 @@
+2016-09-23  Tom Tromey  <tom@tromey.com>
+
+       * rust-lang.c: Include <string> and <vector>.
+       (rust_evaluate_funcall): Use std::vector, std::string.
+       (rust_evaluate_subexp): Use std::string.
+       (rust_lookup_symbol_nonlocal): Use std::string.
+
 2016-09-23  Tom Tromey  <tom@tromey.com>
 
        * cp-namespace.c: Include <string>.
index 77f7428f3ab333960fb71d64f3375a4c4bf76bfe..82cd3f905e7dcb1f572182535dedf609334c5ccb 100644 (file)
@@ -32,6 +32,8 @@
 #include "rust-lang.h"
 #include "valprint.h"
 #include "varobj.h"
+#include <string>
+#include <vector>
 
 extern initialize_file_ftype _initialize_rust_language;
 
@@ -1154,10 +1156,7 @@ rust_evaluate_funcall (struct expression *exp, int *pos, enum noside noside)
   int i;
   int num_args = exp->elts[*pos + 1].longconst;
   const char *method;
-  char *name;
   struct value *function, *result, *arg0;
-  struct value **args;
-  struct cleanup *cleanup;
   struct type *type, *fn_type;
   const struct block *block;
   struct block_symbol sym;
@@ -1183,8 +1182,7 @@ rust_evaluate_funcall (struct expression *exp, int *pos, enum noside noside)
       return arg0;
     }
 
-  args = XNEWVEC (struct value *, num_args + 1);
-  cleanup = make_cleanup (xfree, args);
+  std::vector<struct value *> args (num_args + 1);
   args[0] = arg0;
 
   /* We don't yet implement real Deref semantics.  */
@@ -1200,17 +1198,16 @@ rust_evaluate_funcall (struct expression *exp, int *pos, enum noside noside)
   if (TYPE_TAG_NAME (type) == NULL)
     error (_("Method call on nameless type"));
 
-  name = concat (TYPE_TAG_NAME (type), "::", method, (char *) NULL);
-  make_cleanup (xfree, name);
+  std::string name = std::string (TYPE_TAG_NAME (type)) + "::" + method;
 
   block = get_selected_block (0);
-  sym = lookup_symbol (name, block, VAR_DOMAIN, NULL);
+  sym = lookup_symbol (name.c_str (), block, VAR_DOMAIN, NULL);
   if (sym.symbol == NULL)
-    error (_("Could not find function named '%s'"), name);
+    error (_("Could not find function named '%s'"), name.c_str ());
 
   fn_type = SYMBOL_TYPE (sym.symbol);
   if (TYPE_NFIELDS (fn_type) == 0)
-    error (_("Function '%s' takes no arguments"), name);
+    error (_("Function '%s' takes no arguments"), name.c_str ());
 
   if (TYPE_CODE (TYPE_FIELD_TYPE (fn_type, 0)) == TYPE_CODE_PTR)
     args[0] = value_addr (args[0]);
@@ -1223,8 +1220,7 @@ rust_evaluate_funcall (struct expression *exp, int *pos, enum noside noside)
   if (noside == EVAL_AVOID_SIDE_EFFECTS)
     result = value_zero (TYPE_TARGET_TYPE (fn_type), not_lval);
   else
-    result = call_function_by_hand (function, num_args + 1, args);
-  do_cleanups (cleanup);
+    result = call_function_by_hand (function, num_args + 1, args.data ());
   return result;
 }
 
@@ -1601,14 +1597,11 @@ rust_evaluate_subexp (struct type *expect_type, struct expression *exp,
          {
            CORE_ADDR addr;
            int i;
-           struct value **eltvec = XNEWVEC (struct value *, copies);
-           struct cleanup *cleanup = make_cleanup (xfree, eltvec);
+           std::vector<struct value *> eltvec (copies);
 
            for (i = 0; i < copies; ++i)
              eltvec[i] = elt;
-           result = value_array (0, copies - 1, eltvec);
-
-           do_cleanups (cleanup);
+           result = value_array (0, copies - 1, eltvec.data ());
          }
        else
          {
@@ -2036,14 +2029,12 @@ rust_lookup_symbol_nonlocal (const struct language_defn *langdef,
 
       if (scope[0] != '\0')
        {
-         char *scopedname = concat (scope, "::", name, (char *) NULL);
-         struct cleanup *cleanup = make_cleanup (xfree, scopedname);
+         std::string scopedname = std::string (scope) + "::" + name;
 
-         result = lookup_symbol_in_static_block (scopedname, block,
+         result = lookup_symbol_in_static_block (scopedname.c_str (), block,
                                                  domain);
          if (result.symbol == NULL)
-           result = lookup_global_symbol (scopedname, block, domain);
-         do_cleanups (cleanup);
+           result = lookup_global_symbol (scopedname.c_str (), block, domain);
        }
     }
   return result;