From ab8b80a88546eacb6e75004e8dd571e6bdf9505f Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 22 Sep 2016 09:51:20 -0600 Subject: [PATCH] Use std::string, std::vector in rust-lang.c This patch changes some spots in rust-lang.c to use std::string or std::vector, removing some cleanups. 2016-09-23 Tom Tromey * rust-lang.c: Include and . (rust_evaluate_funcall): Use std::vector, std::string. (rust_evaluate_subexp): Use std::string. (rust_lookup_symbol_nonlocal): Use std::string. --- gdb/ChangeLog | 7 +++++++ gdb/rust-lang.c | 35 +++++++++++++---------------------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 410c386..ab90503 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2016-09-23 Tom Tromey + * rust-lang.c: Include and . + (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 + * cp-namespace.c: Include . (cp_search_static_and_baseclasses) (cp_lookup_symbol_imports_or_template, find_symbol_in_baseclass): diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 77f7428..82cd3f9 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -32,6 +32,8 @@ #include "rust-lang.h" #include "valprint.h" #include "varobj.h" +#include +#include 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 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 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; -- 2.7.4