[Lldb-commits] [PATCH] D27780: Make OptionDefinition structure store a StringRef

Greg Clayton via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Dec 14 16:25:32 PST 2016


clayborg added a comment.

There seems to be a bunch of places that we are passing a string literal to functions that take a StringRef. Can we pass L("--") instead of "--" to functions that take a string ref and have it be more efficient so a StringRef isn't implicitly constructed for us each time? See inlined comments for places.



================
Comment at: lldb/source/Interpreter/Args.cpp:954
+  llvm::SmallString<3> short_buffer =
+      llvm::formatv("-{0}", (char)long_options[long_options_index].val);
+  llvm::SmallString<255> long_buffer = llvm::formatv(
----------------
Will this line cause a StringRef constructor to be called on "-{0}"? If so, is there a way to avoid this with some constexpr magic?


================
Comment at: lldb/source/Interpreter/Args.cpp:956
+  llvm::SmallString<255> long_buffer = llvm::formatv(
+      "--{0}", long_options[long_options_index].definition->long_option);
 
----------------
Ditto


================
Comment at: lldb/source/Interpreter/Options.cpp:337
+bool Options::SupportsLongOption(llvm::StringRef long_option) {
+  long_option.consume_front("--");
+  if (long_option.empty())
----------------
Will this line cause a StringRef constructor to be called on "--"?


================
Comment at: lldb/source/Interpreter/Options.cpp:701
+        // level code will know this is a full match and add the " ".
+        if (cur_opt_str.startswith("--") &&
+            cur_opt_str.drop_front(2) != opt_defs[opt_defs_index].long_option) {
----------------
Will this line cause a StringRef constructor to be called on "--"?


================
Comment at: lldb/source/Interpreter/Options.cpp:719
 
-            if (strstr(def.long_option, cur_opt_str + 2) == def.long_option) {
-              std::string full_name("--");
-              full_name.append(def.long_option);
-              // The options definitions table has duplicates because of the
-              // way the grouping information is stored, so only add once.
-              bool duplicate = false;
-              for (size_t k = 0; k < matches.GetSize(); k++) {
-                if (matches.GetStringAtIndex(k) == full_name) {
-                  duplicate = true;
-                  break;
-                }
-              }
-              if (!duplicate)
-                matches.AppendString(full_name.c_str());
+        if (!cur_opt_str.consume_front("--"))
+          return true;
----------------
Will this line cause a StringRef constructor to be called on "--"?


================
Comment at: lldb/source/Interpreter/Options.cpp:728
+        for (auto &def : range) {
+          std::string full_name("--");
+          full_name.append(def.long_option);
----------------
Do we still need std::string here for full_name? We might be able to do smarter things with StringRef for all uses of full_name below, including the matches.GetStringAtIndex() by seeing if the string at index starts with "--", and then just comparing the remainder to "def.long_option"?


================
Comment at: lldb/source/Interpreter/Options.cpp:834
       // restrict it to that shared library.
-      if (cur_opt_name && strcmp(cur_opt_name, "shlib") == 0 &&
-          cur_arg_pos != -1) {
-        const char *module_name = input.GetArgumentAtIndex(cur_arg_pos);
-        if (module_name) {
+      if (cur_opt_name == "shlib" && cur_arg_pos != -1) {
+        auto module_name = input[cur_arg_pos].ref;
----------------
Will this line cause a StringRef constructor to be called on "shlib"?


https://reviews.llvm.org/D27780





More information about the lldb-commits mailing list