Pass std::string_view by value
As std::string_view is a relatively small structure it can be passed
by value. The code was using a mix of passing it either by value or
by const reference. Settle on passing by value.
Remove some unnecessary templated functions that was only overloaded
for `const std::string&` and `const std::string_view` as the latter
was enough.
Fix IWYU by adding `#include <string_view>` in all header files that
uses std::string_view.
Bug: none
Change-Id: If42ab28342e8d73f6f0543e77319fdf6380c41b5
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/11400
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
diff --git a/src/base/command_line.cc b/src/base/command_line.cc
index ea4bbda..ba9a6b0 100644
--- a/src/base/command_line.cc
+++ b/src/base/command_line.cc
@@ -283,7 +283,7 @@
#endif
}
-bool CommandLine::HasSwitch(const std::string_view& switch_string) const {
+bool CommandLine::HasSwitch(std::string_view switch_string) const {
DCHECK_EQ(ToLowerASCII(switch_string), switch_string);
return ContainsKey(switches_, switch_string);
}
@@ -293,7 +293,7 @@
}
std::string CommandLine::GetSwitchValueASCII(
- const std::string_view& switch_string) const {
+ std::string_view switch_string) const {
StringType value = GetSwitchValueNative(switch_string);
if (!IsStringASCII(value)) {
DLOG(WARNING) << "Value of switch (" << switch_string << ") must be ASCII.";
@@ -306,13 +306,12 @@
#endif
}
-FilePath CommandLine::GetSwitchValuePath(
- const std::string_view& switch_string) const {
+FilePath CommandLine::GetSwitchValuePath(std::string_view switch_string) const {
return FilePath(GetSwitchValueNative(switch_string));
}
CommandLine::StringType CommandLine::GetSwitchValueNative(
- const std::string_view& switch_string) const {
+ std::string_view switch_string) const {
DCHECK_EQ(ToLowerASCII(switch_string), switch_string);
auto result = switches_.find(switch_string);
return result == switches_.end() ? StringType() : result->second;
diff --git a/src/base/command_line.h b/src/base/command_line.h
index 46c1fcc..3a44346 100644
--- a/src/base/command_line.h
+++ b/src/base/command_line.h
@@ -164,15 +164,15 @@
// The second override provides an optimized version to avoid inlining codegen
// at every callsite to find the length of the constant and construct a
// std::string_view.
- bool HasSwitch(const std::string_view& switch_string) const;
+ bool HasSwitch(std::string_view switch_string) const;
bool HasSwitch(const char switch_constant[]) const;
// Returns the value associated with the given switch. If the switch has no
// value or isn't present, this method returns the empty string.
// Switch names must be lowercase.
- std::string GetSwitchValueASCII(const std::string_view& switch_string) const;
- FilePath GetSwitchValuePath(const std::string_view& switch_string) const;
- StringType GetSwitchValueNative(const std::string_view& switch_string) const;
+ std::string GetSwitchValueASCII(std::string_view switch_string) const;
+ FilePath GetSwitchValuePath(std::string_view switch_string) const;
+ StringType GetSwitchValueNative(std::string_view switch_string) const;
// Get a copy of all switches, along with their values.
const SwitchMap& GetSwitches() const { return switches_; }
diff --git a/src/base/containers/span.h b/src/base/containers/span.h
index 29c9a97..4af83b4 100644
--- a/src/base/containers/span.h
+++ b/src/base/containers/span.h
@@ -10,6 +10,7 @@
#include <algorithm>
#include <array>
#include <iterator>
+#include <string_view>
#include <type_traits>
#include <utility>
diff --git a/src/base/md5.cc b/src/base/md5.cc
index 4fcab55..54684e9 100644
--- a/src/base/md5.cc
+++ b/src/base/md5.cc
@@ -169,7 +169,7 @@
* Update context to reflect the concatenation of another buffer full
* of bytes.
*/
-void MD5Update(MD5Context* context, const std::string_view& data) {
+void MD5Update(MD5Context* context, std::string_view data) {
struct Context* ctx = reinterpret_cast<struct Context*>(context);
const uint8_t* buf = reinterpret_cast<const uint8_t*>(data.data());
size_t len = data.size();
@@ -292,7 +292,7 @@
MD5Final(digest, &ctx);
}
-std::string MD5String(const std::string_view& str) {
+std::string MD5String(std::string_view str) {
MD5Digest digest;
MD5Sum(str.data(), str.length(), &digest);
return MD5DigestToBase16(digest);
diff --git a/src/base/md5.h b/src/base/md5.h
index d25b2fc..b00165c 100644
--- a/src/base/md5.h
+++ b/src/base/md5.h
@@ -52,7 +52,7 @@
// For the given buffer of |data| as a std::string_view, updates the given MD5
// context with the sum of the data. You can call this any number of times
// during the computation, except that MD5Init() must have been called first.
-void MD5Update(MD5Context* context, const std::string_view& data);
+void MD5Update(MD5Context* context, std::string_view data);
// Finalizes the MD5 operation and fills the buffer with the digest.
void MD5Final(MD5Digest* digest, MD5Context* context);
@@ -70,7 +70,7 @@
void MD5Sum(const void* data, size_t length, MD5Digest* digest);
// Returns the MD5 (in hexadecimal) of a string.
-std::string MD5String(const std::string_view& str);
+std::string MD5String(std::string_view str);
} // namespace base
diff --git a/src/base/strings/utf_offset_string_conversions.cc b/src/base/strings/utf_offset_string_conversions.cc
index ee55a24..6f2aaf4 100644
--- a/src/base/strings/utf_offset_string_conversions.cc
+++ b/src/base/strings/utf_offset_string_conversions.cc
@@ -228,7 +228,7 @@
}
std::u16string UTF8ToUTF16WithAdjustments(
- const std::string_view& utf8,
+ std::string_view utf8,
base::OffsetAdjuster::Adjustments* adjustments) {
std::u16string result;
UTF8ToUTF16WithAdjustments(utf8.data(), utf8.length(), &result, adjustments);
@@ -236,7 +236,7 @@
}
std::u16string UTF8ToUTF16AndAdjustOffsets(
- const std::string_view& utf8,
+ std::string_view utf8,
std::vector<size_t>* offsets_for_adjustment) {
for (size_t& offset : *offsets_for_adjustment) {
if (offset > utf8.length())
@@ -249,7 +249,7 @@
}
std::string UTF16ToUTF8AndAdjustOffsets(
- const std::u16string_view& utf16,
+ std::u16string_view utf16,
std::vector<size_t>* offsets_for_adjustment) {
for (size_t& offset : *offsets_for_adjustment) {
if (offset > utf16.length())
diff --git a/src/base/strings/utf_offset_string_conversions.h b/src/base/strings/utf_offset_string_conversions.h
index 8d6c5e8..0562e01 100644
--- a/src/base/strings/utf_offset_string_conversions.h
+++ b/src/base/strings/utf_offset_string_conversions.h
@@ -93,17 +93,17 @@
std::u16string* output,
base::OffsetAdjuster::Adjustments* adjustments);
std::u16string UTF8ToUTF16WithAdjustments(
- const std::string_view& utf8,
+ std::string_view utf8,
base::OffsetAdjuster::Adjustments* adjustments);
// As above, but instead internally examines the adjustments and applies them
// to |offsets_for_adjustment|. Input offsets greater than the length of the
// input string will be set to std::u16string::npos. See comments by
// AdjustOffsets().
std::u16string UTF8ToUTF16AndAdjustOffsets(
- const std::string_view& utf8,
+ std::string_view utf8,
std::vector<size_t>* offsets_for_adjustment);
std::string UTF16ToUTF8AndAdjustOffsets(
- const std::u16string_view& utf16,
+ std::u16string_view utf16,
std::vector<size_t>* offsets_for_adjustment);
} // namespace base
diff --git a/src/gn/args.h b/src/gn/args.h
index 992d48f..24e8308 100644
--- a/src/gn/args.h
+++ b/src/gn/args.h
@@ -8,6 +8,7 @@
#include <map>
#include <mutex>
#include <set>
+#include <string_view>
#include <unordered_map>
#include "base/macros.h"
diff --git a/src/gn/c_include_iterator.cc b/src/gn/c_include_iterator.cc
index f8626e1..9fcc6be 100644
--- a/src/gn/c_include_iterator.cc
+++ b/src/gn/c_include_iterator.cc
@@ -23,7 +23,7 @@
// Returns a new string piece referencing the same buffer as the argument, but
// with leading space trimmed. This only checks for space and tab characters
// since we're dealing with lines in C source files.
-std::string_view TrimLeadingWhitespace(const std::string_view& str) {
+std::string_view TrimLeadingWhitespace(std::string_view str) {
size_t new_begin = 0;
while (new_begin < str.size() &&
(str[new_begin] == ' ' || str[new_begin] == '\t'))
@@ -42,7 +42,7 @@
//
// We assume the line has leading whitespace trimmed. We also assume that empty
// lines have already been filtered out.
-bool ShouldCountTowardNonIncludeLines(const std::string_view& line) {
+bool ShouldCountTowardNonIncludeLines(std::string_view line) {
if (base::StartsWith(line, "//", base::CompareCase::SENSITIVE))
return false; // Don't count comments.
if (base::StartsWith(line, "/*", base::CompareCase::SENSITIVE) ||
@@ -61,7 +61,7 @@
//
// The 1-based character number on the line that the include was found at
// will be filled into *begin_char.
-IncludeType ExtractInclude(const std::string_view& line,
+IncludeType ExtractInclude(std::string_view line,
std::string_view* path,
int* begin_char) {
static const char kInclude[] = "include";
@@ -113,7 +113,7 @@
}
// Returns true if this line has a "nogncheck" comment associated with it.
-bool HasNoCheckAnnotation(const std::string_view& line) {
+bool HasNoCheckAnnotation(std::string_view line) {
return line.find("nogncheck") != std::string_view::npos;
}
diff --git a/src/gn/command_args.cc b/src/gn/command_args.cc
index 14ca348..e74c598 100644
--- a/src/gn/command_args.cc
+++ b/src/gn/command_args.cc
@@ -40,7 +40,7 @@
const char kSwitchOverridesOnly[] = "overrides-only";
const char kSwitchJson[] = "json";
-bool DoesLineBeginWithComment(const std::string_view& line) {
+bool DoesLineBeginWithComment(std::string_view line) {
// Skip whitespace.
size_t i = 0;
while (i < line.size() && base::IsAsciiWhitespace(line[i]))
@@ -67,7 +67,7 @@
// Assumes DoesLineBeginWithComment(), this strips the # character from the
// beginning and normalizes preceding whitespace.
-std::string StripHashFromLine(const std::string_view& line, bool pad) {
+std::string StripHashFromLine(std::string_view line, bool pad) {
// Replace the # sign and everything before it with 3 spaces, so that a
// normal comment that has a space after the # will be indented 4 spaces
// (which makes our formatting come out nicely). If the comment is indented
@@ -137,8 +137,7 @@
}
// Override value is null if there is no override.
-void PrintArgHelp(const std::string_view& name,
- const Args::ValueWithOverride& val) {
+void PrintArgHelp(std::string_view name, const Args::ValueWithOverride& val) {
OutputString(std::string(name), DECORATION_YELLOW);
OutputString("\n");
@@ -163,7 +162,7 @@
}
void BuildArgJson(base::Value& dict,
- const std::string_view& name,
+ std::string_view name,
const Args::ValueWithOverride& arg,
bool short_only) {
assert(dict.is_dict());
diff --git a/src/gn/create_bundle_target_generator.cc b/src/gn/create_bundle_target_generator.cc
index b614a9c..0a3d7cf 100644
--- a/src/gn/create_bundle_target_generator.cc
+++ b/src/gn/create_bundle_target_generator.cc
@@ -76,7 +76,7 @@
bool CreateBundleTargetGenerator::FillBundleDir(
const SourceDir& bundle_root_dir,
- const std::string_view& name,
+ std::string_view name,
SourceDir* bundle_dir) {
// All bundle_foo_dir properties are optional. They are only required if they
// are used in an expansion. The check is performed there.
diff --git a/src/gn/create_bundle_target_generator.h b/src/gn/create_bundle_target_generator.h
index 6f13fb4..6a0971a 100644
--- a/src/gn/create_bundle_target_generator.h
+++ b/src/gn/create_bundle_target_generator.h
@@ -5,6 +5,8 @@
#ifndef TOOLS_GN_CREATE_BUNDLE_TARGET_GENERATOR_H_
#define TOOLS_GN_CREATE_BUNDLE_TARGET_GENERATOR_H_
+#include <string_view>
+
#include "base/macros.h"
#include "gn/target_generator.h"
@@ -24,7 +26,7 @@
private:
bool FillBundleDir(const SourceDir& bundle_root_dir,
- const std::string_view& name,
+ std::string_view name,
SourceDir* bundle_dir);
bool FillXcodeExtraAttributes();
diff --git a/src/gn/err.cc b/src/gn/err.cc
index 301ee8d..68cb046 100644
--- a/src/gn/err.cc
+++ b/src/gn/err.cc
@@ -17,7 +17,7 @@
namespace {
-std::string GetNthLine(const std::string_view& data, int n) {
+std::string GetNthLine(std::string_view data, int n) {
size_t line_off = Tokenizer::ByteOffsetOfNthLine(data, n);
size_t end = line_off + 1;
while (end < data.size() && !Tokenizer::IsNewline(data, end))
diff --git a/src/gn/escape.cc b/src/gn/escape.cc
index 3c8dc3f..687c92a 100644
--- a/src/gn/escape.cc
+++ b/src/gn/escape.cc
@@ -42,7 +42,7 @@
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0};
// clang-format on
-size_t EscapeStringToString_Space(const std::string_view& str,
+size_t EscapeStringToString_Space(std::string_view str,
const EscapeOptions& options,
char* dest,
bool* needed_quoting) {
@@ -76,7 +76,7 @@
return ch == '$' || ch == ' ' || ch == ':';
}
-size_t EscapeStringToString_Ninja(const std::string_view& str,
+size_t EscapeStringToString_Ninja(std::string_view str,
const EscapeOptions& options,
char* dest,
bool* needed_quoting) {
@@ -93,7 +93,7 @@
return ch == '\\' || ch == '"';
}
-size_t EscapeStringToString_CompilationDatabase(const std::string_view& str,
+size_t EscapeStringToString_CompilationDatabase(std::string_view str,
const EscapeOptions& options,
char* dest,
bool* needed_quoting) {
@@ -119,7 +119,7 @@
return i;
}
-size_t EscapeStringToString_Depfile(const std::string_view& str,
+size_t EscapeStringToString_Depfile(std::string_view str,
const EscapeOptions& options,
char* dest,
bool* needed_quoting) {
@@ -137,7 +137,7 @@
return i;
}
-size_t EscapeStringToString_NinjaPreformatted(const std::string_view& str,
+size_t EscapeStringToString_NinjaPreformatted(std::string_view str,
char* dest) {
// Only Ninja-escape $.
size_t i = 0;
@@ -157,7 +157,7 @@
// See:
// http://blogs.msdn.com/b/twistylittlepassagesallalike/archive/2011/04/23/everyone-quotes-arguments-the-wrong-way.aspx
// http://blogs.msdn.com/b/oldnewthing/archive/2010/09/17/10063629.aspx
-size_t EscapeStringToString_WindowsNinjaFork(const std::string_view& str,
+size_t EscapeStringToString_WindowsNinjaFork(std::string_view str,
const EscapeOptions& options,
char* dest,
bool* needed_quoting) {
@@ -209,7 +209,7 @@
return i;
}
-size_t EscapeStringToString_PosixNinjaFork(const std::string_view& str,
+size_t EscapeStringToString_PosixNinjaFork(std::string_view str,
const EscapeOptions& options,
char* dest,
bool* needed_quoting) {
@@ -240,7 +240,7 @@
}
// Escapes |str| into |dest| and returns the number of characters written.
-size_t EscapeStringToString(const std::string_view& str,
+size_t EscapeStringToString(std::string_view str,
const EscapeOptions& options,
char* dest,
bool* needed_quoting) {
@@ -286,7 +286,7 @@
} // namespace
-std::string EscapeString(const std::string_view& str,
+std::string EscapeString(std::string_view str,
const EscapeOptions& options,
bool* needed_quoting) {
StackOrHeapBuffer dest(str.size() * kMaxEscapedCharsPerChar);
@@ -295,14 +295,14 @@
}
void EscapeStringToStream(std::ostream& out,
- const std::string_view& str,
+ std::string_view str,
const EscapeOptions& options) {
StackOrHeapBuffer dest(str.size() * kMaxEscapedCharsPerChar);
out.write(dest, EscapeStringToString(str, options, dest, nullptr));
}
void EscapeJSONStringToStream(std::ostream& out,
- const std::string_view& str,
+ std::string_view str,
const EscapeOptions& options) {
std::string dest;
bool needed_quoting = !options.inhibit_quoting;
diff --git a/src/gn/escape.h b/src/gn/escape.h
index 31f972e..57a723f 100644
--- a/src/gn/escape.h
+++ b/src/gn/escape.h
@@ -71,20 +71,20 @@
// (if inhibit_quoting was set) quoted will be written to it. This value should
// be initialized to false by the caller and will be written to only if it's
// true (the common use-case is for chaining calls).
-std::string EscapeString(const std::string_view& str,
+std::string EscapeString(std::string_view str,
const EscapeOptions& options,
bool* needed_quoting);
// Same as EscapeString but writes the results to the given stream, saving a
// copy.
void EscapeStringToStream(std::ostream& out,
- const std::string_view& str,
+ std::string_view str,
const EscapeOptions& options);
// Same as EscapeString but escape JSON string and writes the results to the
// given stream, saving a copy.
void EscapeJSONStringToStream(std::ostream& out,
- const std::string_view& str,
+ std::string_view str,
const EscapeOptions& options);
#endif // TOOLS_GN_ESCAPE_H_
diff --git a/src/gn/file_writer.h b/src/gn/file_writer.h
index 0ae5061..9b7a01f 100644
--- a/src/gn/file_writer.h
+++ b/src/gn/file_writer.h
@@ -5,6 +5,8 @@
#ifndef TOOLS_GN_FILE_WRITER_H_
#define TOOLS_GN_FILE_WRITER_H_
+#include <string_view>
+
#include "util/build_config.h"
#if defined(OS_WIN)
diff --git a/src/gn/filesystem_utils.cc b/src/gn/filesystem_utils.cc
index 9eb713b..4906d56 100644
--- a/src/gn/filesystem_utils.cc
+++ b/src/gn/filesystem_utils.cc
@@ -81,8 +81,7 @@
// Attempts to do a case and slash-insensitive comparison of two 8-bit Windows
// paths.
-bool AreAbsoluteWindowsPathsEqual(const std::string_view& a,
- const std::string_view& b) {
+bool AreAbsoluteWindowsPathsEqual(std::string_view a, std::string_view b) {
if (a.size() != b.size())
return false;
@@ -95,7 +94,7 @@
return true;
}
-bool DoesBeginWindowsDriveLetter(const std::string_view& path) {
+bool DoesBeginWindowsDriveLetter(std::string_view path) {
if (path.size() < 3)
return false;
@@ -200,7 +199,7 @@
}
}
-size_t AbsPathLenWithNoTrailingSlash(const std::string_view& path) {
+size_t AbsPathLenWithNoTrailingSlash(std::string_view path) {
size_t len = path.size();
#if defined(OS_WIN)
size_t min_len = 3;
@@ -222,7 +221,7 @@
#endif
}
-base::FilePath UTF8ToFilePath(const std::string_view& sp) {
+base::FilePath UTF8ToFilePath(std::string_view sp) {
#if defined(OS_WIN)
return base::FilePath(base::UTF8ToUTF16(sp));
#else
@@ -283,7 +282,7 @@
path->resize(FindFilenameOffset(*path));
}
-bool EndsWithSlash(const std::string_view s) {
+bool EndsWithSlash(std::string_view s) {
return !s.empty() && IsSlash(s[s.size() - 1]);
}
@@ -334,7 +333,7 @@
return false;
}
-bool IsPathAbsolute(const std::string_view& path) {
+bool IsPathAbsolute(std::string_view path) {
if (path.empty())
return false;
@@ -355,12 +354,12 @@
return true;
}
-bool IsPathSourceAbsolute(const std::string_view& path) {
+bool IsPathSourceAbsolute(std::string_view path) {
return (path.size() >= 2 && path[0] == '/' && path[1] == '/');
}
-bool MakeAbsolutePathRelativeIfPossible(const std::string_view& source_root,
- const std::string_view& path,
+bool MakeAbsolutePathRelativeIfPossible(std::string_view source_root,
+ std::string_view path,
std::string* dest) {
DCHECK(IsPathAbsolute(source_root));
DCHECK(IsPathAbsolute(path));
@@ -504,7 +503,7 @@
return base::FilePath(base::JoinString(relative_components, separator));
}
-void NormalizePath(std::string* path, const std::string_view& source_root) {
+void NormalizePath(std::string* path, std::string_view source_root) {
char* pathbuf = path->empty() ? nullptr : &(*path)[0];
// top_index is the first character we can modify in the path. Anything
@@ -707,7 +706,7 @@
std::string RebasePath(const std::string& input,
const SourceDir& dest_dir,
- const std::string_view& source_root) {
+ std::string_view source_root) {
std::string ret;
DCHECK(source_root.empty() ||
!base::EndsWith(source_root, "/", base::CompareCase::SENSITIVE));
@@ -785,11 +784,10 @@
.NormalizePathSeparatorsTo('/');
}
-template <typename StringType>
-std::string ResolveRelative(const StringType& input,
+std::string ResolveRelative(std::string_view input,
const std::string& value,
bool as_file,
- const std::string_view& source_root) {
+ std::string_view source_root) {
std::string result;
if (input.size() >= 2 && input[0] == '/' && input[1] == '/') {
@@ -850,17 +848,6 @@
return result;
}
-// Explicit template instantiation
-template std::string ResolveRelative(const std::string_view& input,
- const std::string& value,
- bool as_file,
- const std::string_view& source_root);
-
-template std::string ResolveRelative(const std::string& input,
- const std::string& value,
- bool as_file,
- const std::string_view& source_root);
-
std::string DirectoryWithNoLastSlash(const SourceDir& dir) {
std::string ret;
diff --git a/src/gn/filesystem_utils.h b/src/gn/filesystem_utils.h
index 830478a..9f21cff 100644
--- a/src/gn/filesystem_utils.h
+++ b/src/gn/filesystem_utils.h
@@ -20,7 +20,7 @@
inline std::string FilePathToUTF8(const base::FilePath& path) {
return FilePathToUTF8(path.value());
}
-base::FilePath UTF8ToFilePath(const std::string_view& sp);
+base::FilePath UTF8ToFilePath(std::string_view sp);
// Extensions -----------------------------------------------------------------
@@ -60,7 +60,7 @@
}
// Returns true if the given path ends with a slash.
-bool EndsWithSlash(const std::string_view s);
+bool EndsWithSlash(std::string_view s);
// Path parts -----------------------------------------------------------------
@@ -96,12 +96,12 @@
// Returns true if the input string is absolute. Double-slashes at the
// beginning are treated as source-relative paths. On Windows, this handles
// paths of both the native format: "C:/foo" and ours "/C:/foo"
-bool IsPathAbsolute(const std::string_view& path);
+bool IsPathAbsolute(std::string_view path);
// Returns true if the input string is source-absolute. Source-absolute
// paths begin with two forward slashes and resolve as if they are
// relative to the source root.
-bool IsPathSourceAbsolute(const std::string_view& path);
+bool IsPathSourceAbsolute(std::string_view path);
// Given an absolute path, checks to see if is it is inside the source root.
// If it is, fills a source-absolute path into the given output and returns
@@ -112,8 +112,8 @@
// ("/C:/"). The source root can end with a slash or not.
//
// Note that this does not attempt to normalize slashes in the output.
-bool MakeAbsolutePathRelativeIfPossible(const std::string_view& source_root,
- const std::string_view& path,
+bool MakeAbsolutePathRelativeIfPossible(std::string_view source_root,
+ std::string_view path,
std::string* dest);
// Given two absolute paths |base| and |target|, returns a relative path to
@@ -134,7 +134,7 @@
// a leading slash. Otherwise, |path| will retain its relativity. |source_root|
// must not end with a slash.
void NormalizePath(std::string* path,
- const std::string_view& source_root = std::string_view());
+ std::string_view source_root = std::string_view());
// Converts slashes to backslashes for Windows. Keeps the string unchanged
// for other systems.
@@ -147,10 +147,9 @@
// If supplied, the |source_root| parameter is the absolute path to
// the source root and not end in a slash. Unless you know that the
// inputs are always source relative, this should be supplied.
-std::string RebasePath(
- const std::string& input,
- const SourceDir& dest_dir,
- const std::string_view& source_root = std::string_view());
+std::string RebasePath(const std::string& input,
+ const SourceDir& dest_dir,
+ std::string_view source_root = std::string_view());
// Resolves a file or dir name (parameter input) relative to
// value directory. Will return an empty SourceDir/File on error
@@ -165,11 +164,10 @@
// If source_root is supplied, these functions will additionally handle the
// case where the input is a system-absolute but still inside the source
// tree. This is the case for some external tools.
-template <typename StringType>
-std::string ResolveRelative(const StringType& input,
+std::string ResolveRelative(std::string_view input,
const std::string& value,
bool as_file,
- const std::string_view& source_root);
+ std::string_view source_root);
// Resolves source file or directory relative to some given source root. Returns
// an empty file path on error.
diff --git a/src/gn/generated_file_target_generator.cc b/src/gn/generated_file_target_generator.cc
index 2506f19..0a92122 100644
--- a/src/gn/generated_file_target_generator.cc
+++ b/src/gn/generated_file_target_generator.cc
@@ -68,7 +68,7 @@
}
bool GeneratedFileTargetGenerator::IsMetadataCollectionTarget(
- const std::string_view& variable,
+ std::string_view variable,
const ParseNode* origin) {
if (contents_defined_) {
*err_ =
diff --git a/src/gn/generated_file_target_generator.h b/src/gn/generated_file_target_generator.h
index dcc4814..c10c600 100644
--- a/src/gn/generated_file_target_generator.h
+++ b/src/gn/generated_file_target_generator.h
@@ -5,6 +5,8 @@
#ifndef TOOLS_GN_GENERATED_FILE_TARGET_GENERATOR_H_
#define TOOLS_GN_GENERATED_FILE_TARGET_GENERATOR_H_
+#include <string_view>
+
#include "base/macros.h"
#include "gn/target.h"
#include "gn/target_generator.h"
@@ -35,7 +37,7 @@
// it is okay to set metadata collection variables on this target.
//
// Should be called before FillContents().
- bool IsMetadataCollectionTarget(const std::string_view& variable,
+ bool IsMetadataCollectionTarget(std::string_view variable,
const ParseNode* origin);
bool contents_defined_ = false;
diff --git a/src/gn/input_conversion.cc b/src/gn/input_conversion.cc
index e82a939..73e8dcc 100644
--- a/src/gn/input_conversion.cc
+++ b/src/gn/input_conversion.cc
@@ -108,7 +108,7 @@
return ret;
}
-bool IsIdentifier(const std::string_view& buffer) {
+bool IsIdentifier(std::string_view buffer) {
DCHECK(buffer.size() > 0);
if (!Tokenizer::IsIdentifierFirstChar(buffer[0]))
return false;
diff --git a/src/gn/label.cc b/src/gn/label.cc
index 173c3d5..c78b00e 100644
--- a/src/gn/label.cc
+++ b/src/gn/label.cc
@@ -29,8 +29,8 @@
// used. The value is used only for generating error messages.
bool ComputeBuildLocationFromDep(const Value& input_value,
const SourceDir& current_dir,
- const std::string_view& source_root,
- const std::string_view& input,
+ std::string_view source_root,
+ std::string_view input,
SourceDir* result,
Err* err) {
// No rule, use the current location.
@@ -50,7 +50,7 @@
// error messages.
bool ComputeTargetNameFromDep(const Value& input_value,
const SourceDir& computed_location,
- const std::string_view& input,
+ std::string_view input,
StringAtom* result,
Err* err) {
if (!input.empty()) {
@@ -88,10 +88,10 @@
// Returns true on success. On failure, the out* variables might be written to
// but shouldn't be used.
bool Resolve(const SourceDir& current_dir,
- const std::string_view& source_root,
+ std::string_view source_root,
const Label& current_toolchain,
const Value& original_value,
- const std::string_view& input,
+ std::string_view input,
SourceDir* out_dir,
StringAtom* out_name,
SourceDir* out_toolchain_dir,
@@ -256,22 +256,21 @@
Label::Label() : hash_(ComputeHash()) {}
Label::Label(const SourceDir& dir,
- const std::string_view& name,
+ std::string_view name,
const SourceDir& toolchain_dir,
- const std::string_view& toolchain_name)
+ std::string_view toolchain_name)
: dir_(dir),
name_(StringAtom(name)),
toolchain_dir_(toolchain_dir),
toolchain_name_(StringAtom(toolchain_name)),
hash_(ComputeHash()) {}
-Label::Label(const SourceDir& dir, const std::string_view& name)
- : dir_(dir), name_(StringAtom(name)),
- hash_(ComputeHash()) {}
+Label::Label(const SourceDir& dir, std::string_view name)
+ : dir_(dir), name_(StringAtom(name)), hash_(ComputeHash()) {}
// static
Label Label::Resolve(const SourceDir& current_dir,
- const std::string_view& source_root,
+ std::string_view source_root,
const Label& current_toolchain,
const Value& input,
Err* err) {
diff --git a/src/gn/label.h b/src/gn/label.h
index dc9813b..1458fcc 100644
--- a/src/gn/label.h
+++ b/src/gn/label.h
@@ -5,6 +5,7 @@
#ifndef TOOLS_GN_LABEL_H_
#define TOOLS_GN_LABEL_H_
+#include <string_view>
#include <tuple>
#include <stddef.h>
@@ -25,18 +26,18 @@
// Makes a label given an already-separated out path and name.
// See also Resolve().
Label(const SourceDir& dir,
- const std::string_view& name,
+ std::string_view name,
const SourceDir& toolchain_dir,
- const std::string_view& toolchain_name);
+ std::string_view toolchain_name);
// Makes a label with an empty toolchain.
- Label(const SourceDir& dir, const std::string_view& name);
+ Label(const SourceDir& dir, std::string_view name);
// Resolves a string from a build file that may be relative to the
// current directory into a fully qualified label. On failure returns an
// is_null() label and sets the error.
static Label Resolve(const SourceDir& current_dir,
- const std::string_view& source_root,
+ std::string_view source_root,
const Label& current_toolchain,
const Value& input,
Err* err);
diff --git a/src/gn/label_pattern.cc b/src/gn/label_pattern.cc
index 35235e5..9a21829 100644
--- a/src/gn/label_pattern.cc
+++ b/src/gn/label_pattern.cc
@@ -53,7 +53,7 @@
LabelPattern::LabelPattern(Type type,
const SourceDir& dir,
- const std::string_view& name,
+ std::string_view name,
const Label& toolchain_label)
: toolchain_(toolchain_label), type_(type), dir_(dir), name_(name) {}
@@ -63,7 +63,7 @@
// static
LabelPattern LabelPattern::GetPattern(const SourceDir& current_dir,
- const std::string_view& source_root,
+ std::string_view source_root,
const Value& value,
Err* err) {
if (!value.VerifyTypeIs(Value::STRING, err))
diff --git a/src/gn/label_pattern.h b/src/gn/label_pattern.h
index f40750e..fbb11fa 100644
--- a/src/gn/label_pattern.h
+++ b/src/gn/label_pattern.h
@@ -30,7 +30,7 @@
LabelPattern();
LabelPattern(Type type,
const SourceDir& dir,
- const std::string_view& name,
+ std::string_view name,
const Label& toolchain_label);
LabelPattern(const LabelPattern& other);
~LabelPattern();
@@ -38,7 +38,7 @@
// Converts the given input string to a pattern. This does special stuff
// to treat the pattern as a label. Sets the error on failure.
static LabelPattern GetPattern(const SourceDir& current_dir,
- const std::string_view& source_root,
+ std::string_view source_root,
const Value& value,
Err* err);
diff --git a/src/gn/lib_file.cc b/src/gn/lib_file.cc
index cbb67f1..6723a18 100644
--- a/src/gn/lib_file.cc
+++ b/src/gn/lib_file.cc
@@ -8,7 +8,7 @@
LibFile::LibFile(const SourceFile& source_file) : source_file_(source_file) {}
-LibFile::LibFile(const std::string_view& lib_name)
+LibFile::LibFile(std::string_view lib_name)
: name_(lib_name.data(), lib_name.size()) {
DCHECK(!lib_name.empty());
}
diff --git a/src/gn/lib_file.h b/src/gn/lib_file.h
index 47952f8..575a9e9 100644
--- a/src/gn/lib_file.h
+++ b/src/gn/lib_file.h
@@ -19,7 +19,7 @@
public:
LibFile() = default;
- explicit LibFile(const std::string_view& lib_name);
+ explicit LibFile(std::string_view lib_name);
explicit LibFile(const SourceFile& source_file);
bool is_source_file() const { return name_.empty(); }
diff --git a/src/gn/ninja_build_writer.cc b/src/gn/ninja_build_writer.cc
index e7852aa..28e2fa6 100644
--- a/src/gn/ninja_build_writer.cc
+++ b/src/gn/ninja_build_writer.cc
@@ -629,7 +629,7 @@
}
void NinjaBuildWriter::WritePhonyRule(const Target* target,
- const std::string& phony_name) {
+ std::string_view phony_name) {
EscapeOptions ninja_escape;
ninja_escape.mode = ESCAPE_NINJA;
diff --git a/src/gn/ninja_build_writer.h b/src/gn/ninja_build_writer.h
index 9f41a38..b5e9e6a 100644
--- a/src/gn/ninja_build_writer.h
+++ b/src/gn/ninja_build_writer.h
@@ -7,6 +7,7 @@
#include <iosfwd>
#include <map>
+#include <string_view>
#include <unordered_map>
#include <vector>
@@ -56,7 +57,7 @@
bool WriteSubninjas(Err* err);
bool WritePhonyAndAllRules(Err* err);
- void WritePhonyRule(const Target* target, const std::string& phony_name);
+ void WritePhonyRule(const Target* target, std::string_view phony_name);
const BuildSettings* build_settings_;
diff --git a/src/gn/ninja_target_command_util.h b/src/gn/ninja_target_command_util.h
index d9d30bc..00f9a77 100644
--- a/src/gn/ninja_target_command_util.h
+++ b/src/gn/ninja_target_command_util.h
@@ -5,6 +5,8 @@
#ifndef TOOLS_GN_NINJA_TARGET_COMMAND_WRITER_H_
#define TOOLS_GN_NINJA_TARGET_COMMAND_WRITER_H_
+#include <string_view>
+
#include "base/json/string_escape.h"
#include "gn/config_values_extractors.h"
#include "gn/escape.h"
diff --git a/src/gn/parse_tree.cc b/src/gn/parse_tree.cc
index 9ab28b5..83452d0 100644
--- a/src/gn/parse_tree.cc
+++ b/src/gn/parse_tree.cc
@@ -221,7 +221,7 @@
}
base::Value ParseNode::CreateJSONNode(const char* type,
- const std::string_view& value,
+ std::string_view value,
LocationRange location) const {
base::Value dict(base::Value::Type::DICTIONARY);
dict.SetKey(kJsonNodeType, base::Value(type));
diff --git a/src/gn/parse_tree.h b/src/gn/parse_tree.h
index 9ffacc2..57d82e3 100644
--- a/src/gn/parse_tree.h
+++ b/src/gn/parse_tree.h
@@ -8,6 +8,7 @@
#include <stddef.h>
#include <memory>
+#include <string_view>
#include <utility>
#include <vector>
@@ -115,7 +116,7 @@
// given type (and value).
base::Value CreateJSONNode(const char* type, LocationRange location) const;
base::Value CreateJSONNode(const char* type,
- const std::string_view& value,
+ std::string_view value,
LocationRange location) const;
private:
diff --git a/src/gn/path_output.cc b/src/gn/path_output.cc
index c89e061..d2886d7 100644
--- a/src/gn/path_output.cc
+++ b/src/gn/path_output.cc
@@ -11,7 +11,7 @@
#include "util/build_config.h"
PathOutput::PathOutput(const SourceDir& current_dir,
- const std::string_view& source_root,
+ std::string_view source_root,
EscapingMode escaping)
: current_dir_(current_dir) {
inverse_current_dir_ = RebasePath("//", current_dir, source_root);
@@ -129,7 +129,7 @@
}
void PathOutput::WriteSourceRelativeString(std::ostream& out,
- const std::string_view& str) const {
+ std::string_view str) const {
if (options_.mode == ESCAPE_NINJA_COMMAND) {
// Shell escaping needs an intermediate string since it may end up
// quoting the whole thing.
@@ -150,8 +150,7 @@
}
}
-void PathOutput::WritePathStr(std::ostream& out,
- const std::string_view& str) const {
+void PathOutput::WritePathStr(std::ostream& out, std::string_view str) const {
DCHECK(str.size() > 0 && str[0] == '/');
if (str.substr(0, current_dir_.value().size()) ==
diff --git a/src/gn/path_output.h b/src/gn/path_output.h
index 729ba98..e04d236 100644
--- a/src/gn/path_output.h
+++ b/src/gn/path_output.h
@@ -35,7 +35,7 @@
};
PathOutput(const SourceDir& current_dir,
- const std::string_view& source_root,
+ std::string_view source_root,
EscapingMode escaping);
~PathOutput();
@@ -72,13 +72,12 @@
// Backend for WriteFile and WriteDir. This appends the given file or
// directory string to the file.
- void WritePathStr(std::ostream& out, const std::string_view& str) const;
+ void WritePathStr(std::ostream& out, std::string_view str) const;
private:
// Takes the given string and writes it out, appending to the inverse
// current dir. This assumes leading slashes have been trimmed.
- void WriteSourceRelativeString(std::ostream& out,
- const std::string_view& str) const;
+ void WriteSourceRelativeString(std::ostream& out, std::string_view str) const;
SourceDir current_dir_;
diff --git a/src/gn/rust_project_writer.cc b/src/gn/rust_project_writer.cc
index 117442f..ee62479 100644
--- a/src/gn/rust_project_writer.cc
+++ b/src/gn/rust_project_writer.cc
@@ -181,8 +181,8 @@
// Add each of the crates a sysroot has, including their dependencies.
void AddSysrootCrate(const BuildSettings* build_settings,
- const std::string_view crate,
- const std::string_view current_sysroot,
+ std::string_view crate,
+ std::string_view current_sysroot,
SysrootCrateIndexMap& sysroot_crate_lookup,
CrateList& crate_list) {
if (sysroot_crate_lookup.find(crate) != sysroot_crate_lookup.end()) {
@@ -227,7 +227,7 @@
// Add the given sysroot to the project, if it hasn't already been added.
void AddSysroot(const BuildSettings* build_settings,
- const std::string_view sysroot,
+ std::string_view sysroot,
SysrootIndexMap& sysroot_lookup,
CrateList& crate_list) {
// If this sysroot is already in the lookup, we don't add it again.
@@ -244,7 +244,7 @@
void AddSysrootDependencyToCrate(Crate* crate,
const SysrootCrateIndexMap& sysroot,
- const std::string_view crate_name) {
+ std::string_view crate_name) {
if (const auto crate_idx = sysroot.find(crate_name);
crate_idx != sysroot.end()) {
crate->AddDependency(crate_idx->second, std::string(crate_name));
diff --git a/src/gn/rust_project_writer_helpers.h b/src/gn/rust_project_writer_helpers.h
index 0020e2c..a63ded1 100644
--- a/src/gn/rust_project_writer_helpers.h
+++ b/src/gn/rust_project_writer_helpers.h
@@ -9,6 +9,7 @@
#include <optional>
#include <sstream>
#include <string>
+#include <string_view>
#include <tuple>
#include <unordered_map>
#include <vector>
@@ -104,7 +105,7 @@
// Add all of the crates for a sysroot (path) to the rust_project ostream.
// Add the given sysroot to the project, if it hasn't already been added.
void AddSysroot(const BuildSettings* build_settings,
- const std::string_view sysroot,
+ std::string_view sysroot,
SysrootIndexMap& sysroot_lookup,
CrateList& crate_list);
diff --git a/src/gn/rust_tool.h b/src/gn/rust_tool.h
index 6a4fdf7..8eec377 100644
--- a/src/gn/rust_tool.h
+++ b/src/gn/rust_tool.h
@@ -6,6 +6,7 @@
#define TOOLS_GN_RUST_TOOL_H_
#include <string>
+#include <string_view>
#include "base/logging.h"
#include "base/macros.h"
diff --git a/src/gn/scope.cc b/src/gn/scope.cc
index 7e92766..05b0995 100644
--- a/src/gn/scope.cc
+++ b/src/gn/scope.cc
@@ -21,7 +21,7 @@
// Returns true if this variable name should be considered private. Private
// values start with an underscore, and are not imported from "gni" files
// when processing an import.
-bool IsPrivateVar(const std::string_view& name) {
+bool IsPrivateVar(std::string_view name) {
return name.empty() || name[0] == '_';
}
@@ -74,13 +74,12 @@
return !values_.empty();
}
-const Value* Scope::GetValue(const std::string_view& ident,
- bool counts_as_used) {
+const Value* Scope::GetValue(std::string_view ident, bool counts_as_used) {
const Scope* found_in_scope = nullptr;
return GetValueWithScope(ident, counts_as_used, &found_in_scope);
}
-const Value* Scope::GetValueWithScope(const std::string_view& ident,
+const Value* Scope::GetValueWithScope(std::string_view ident,
bool counts_as_used,
const Scope** found_in_scope) {
// First check for programmatically-provided values.
@@ -110,7 +109,7 @@
return nullptr;
}
-Value* Scope::GetMutableValue(const std::string_view& ident,
+Value* Scope::GetMutableValue(std::string_view ident,
SearchNested search_mode,
bool counts_as_used) {
// Don't do programmatic values, which are not mutable.
@@ -129,7 +128,7 @@
return nullptr;
}
-std::string_view Scope::GetStorageKey(const std::string_view& ident) const {
+std::string_view Scope::GetStorageKey(std::string_view ident) const {
RecordMap::const_iterator found = values_.find(ident);
if (found != values_.end())
return found->first;
@@ -140,12 +139,12 @@
return std::string_view();
}
-const Value* Scope::GetValue(const std::string_view& ident) const {
+const Value* Scope::GetValue(std::string_view ident) const {
const Scope* found_in_scope = nullptr;
return GetValueWithScope(ident, &found_in_scope);
}
-const Value* Scope::GetValueWithScope(const std::string_view& ident,
+const Value* Scope::GetValueWithScope(std::string_view ident,
const Scope** found_in_scope) const {
RecordMap::const_iterator found = values_.find(ident);
if (found != values_.end()) {
@@ -157,7 +156,7 @@
return nullptr;
}
-Value* Scope::SetValue(const std::string_view& ident,
+Value* Scope::SetValue(std::string_view ident,
Value v,
const ParseNode* set_node) {
Record& r = values_[ident]; // Clears any existing value.
@@ -166,7 +165,7 @@
return &r.value;
}
-void Scope::RemoveIdentifier(const std::string_view& ident) {
+void Scope::RemoveIdentifier(std::string_view ident) {
RecordMap::iterator found = values_.find(ident);
if (found != values_.end())
values_.erase(found);
@@ -203,7 +202,7 @@
return nullptr;
}
-void Scope::MarkUsed(const std::string_view& ident) {
+void Scope::MarkUsed(std::string_view ident) {
RecordMap::iterator found = values_.find(ident);
if (found == values_.end()) {
NOTREACHED();
@@ -227,7 +226,7 @@
}
}
-void Scope::MarkUnused(const std::string_view& ident) {
+void Scope::MarkUnused(std::string_view ident) {
RecordMap::iterator found = values_.find(ident);
if (found == values_.end()) {
NOTREACHED();
@@ -236,7 +235,7 @@
found->second.used = false;
}
-bool Scope::IsSetButUnused(const std::string_view& ident) const {
+bool Scope::IsSetButUnused(std::string_view ident) const {
RecordMap::const_iterator found = values_.find(ident);
if (found != values_.end()) {
if (!found->second.used) {
@@ -298,7 +297,7 @@
Err* err) const {
// Values.
for (const auto& pair : values_) {
- const std::string_view& current_name = pair.first;
+ const std::string_view current_name = pair.first;
if (options.skip_private_vars && IsPrivateVar(current_name))
continue; // Skip this private var.
if (!options.excluded_values.empty() &&
diff --git a/src/gn/scope.h b/src/gn/scope.h
index e6a2f5f..341cefa 100644
--- a/src/gn/scope.h
+++ b/src/gn/scope.h
@@ -8,6 +8,7 @@
#include <map>
#include <memory>
#include <set>
+#include <string_view>
#include <unordered_map>
#include <utility>
#include <vector>
@@ -58,8 +59,7 @@
// Returns a non-null value if the given value can be programmatically
// generated, or NULL if there is none.
- virtual const Value* GetProgrammaticValue(
- const std::string_view& ident) = 0;
+ virtual const Value* GetProgrammaticValue(std::string_view ident) = 0;
protected:
Scope* scope_;
@@ -135,11 +135,11 @@
// found_in_scope is set to the scope that contains the definition of the
// ident. If the value was provided programmatically (like host_cpu),
// found_in_scope will be set to null.
- const Value* GetValue(const std::string_view& ident, bool counts_as_used);
- const Value* GetValue(const std::string_view& ident) const;
- const Value* GetValueWithScope(const std::string_view& ident,
+ const Value* GetValue(std::string_view ident, bool counts_as_used);
+ const Value* GetValue(std::string_view ident) const;
+ const Value* GetValueWithScope(std::string_view ident,
const Scope** found_in_scope) const;
- const Value* GetValueWithScope(const std::string_view& ident,
+ const Value* GetValueWithScope(std::string_view ident,
bool counts_as_used,
const Scope** found_in_scope);
@@ -165,7 +165,7 @@
// }
// The 6 should get set on the nested scope rather than modify the value
// in the outer one.
- Value* GetMutableValue(const std::string_view& ident,
+ Value* GetMutableValue(std::string_view ident,
SearchNested search_mode,
bool counts_as_used);
@@ -175,18 +175,16 @@
// is static and won't be deleted for the life of the program, so it can be
// used as keys in places that may outlive a temporary. It will return an
// empty string for programmatic and nonexistent values.
- std::string_view GetStorageKey(const std::string_view& ident) const;
+ std::string_view GetStorageKey(std::string_view ident) const;
// The set_node indicates the statement that caused the set, for displaying
// errors later. Returns a pointer to the value in the current scope (a copy
// is made for storage).
- Value* SetValue(const std::string_view& ident,
- Value v,
- const ParseNode* set_node);
+ Value* SetValue(std::string_view ident, Value v, const ParseNode* set_node);
// Removes the value with the given identifier if it exists on the current
// scope. This does not search recursive scopes. Does nothing if not found.
- void RemoveIdentifier(const std::string_view& ident);
+ void RemoveIdentifier(std::string_view ident);
// Removes from this scope all identifiers and templates that are considered
// private.
@@ -200,17 +198,17 @@
const Template* GetTemplate(const std::string& name) const;
// Marks the given identifier as (un)used in the current scope.
- void MarkUsed(const std::string_view& ident);
+ void MarkUsed(std::string_view ident);
void MarkAllUsed();
void MarkAllUsed(const std::set<std::string>& excluded_values);
- void MarkUnused(const std::string_view& ident);
+ void MarkUnused(std::string_view ident);
// Checks to see if the scope has a var set that hasn't been used. This is
// called before replacing the var with a different one. It does not check
// containing scopes.
//
// If the identifier is present but hasnn't been used, return true.
- bool IsSetButUnused(const std::string_view& ident) const;
+ bool IsSetButUnused(std::string_view ident) const;
// Checks the scope to see if any values were set but not used, and fills in
// the error and returns false if they were.
diff --git a/src/gn/scope_per_file_provider.cc b/src/gn/scope_per_file_provider.cc
index 3110a8f..9332c40 100644
--- a/src/gn/scope_per_file_provider.cc
+++ b/src/gn/scope_per_file_provider.cc
@@ -20,7 +20,7 @@
ScopePerFileProvider::~ScopePerFileProvider() = default;
const Value* ScopePerFileProvider::GetProgrammaticValue(
- const std::string_view& ident) {
+ std::string_view ident) {
if (ident == variables::kCurrentToolchain)
return GetCurrentToolchain();
if (ident == variables::kDefaultToolchain)
diff --git a/src/gn/scope_per_file_provider.h b/src/gn/scope_per_file_provider.h
index 228bac3..3daa4fb 100644
--- a/src/gn/scope_per_file_provider.h
+++ b/src/gn/scope_per_file_provider.h
@@ -6,6 +6,7 @@
#define TOOLS_GN_SCOPE_PER_FILE_PROVIDER_H_
#include <memory>
+#include <string_view>
#include "base/macros.h"
#include "gn/scope.h"
@@ -21,7 +22,7 @@
~ScopePerFileProvider() override;
// ProgrammaticProvider implementation.
- const Value* GetProgrammaticValue(const std::string_view& ident) override;
+ const Value* GetProgrammaticValue(std::string_view ident) override;
private:
const Value* GetCurrentToolchain();
diff --git a/src/gn/source_dir.cc b/src/gn/source_dir.cc
index ce92cf2..f34a637 100644
--- a/src/gn/source_dir.cc
+++ b/src/gn/source_dir.cc
@@ -13,7 +13,7 @@
namespace {
-void AssertValueSourceDirString(const std::string_view s) {
+void AssertValueSourceDirString(std::string_view s) {
if (!s.empty()) {
#if defined(OS_WIN)
DCHECK(s[0] == '/' ||
@@ -27,10 +27,9 @@
// Validates input value (input_value) and sets proper error message.
// Note: Parameter blame_input is used only for generating error message.
-template <typename StringType>
bool ValidateResolveInput(bool as_file,
const Value& blame_input_value,
- const StringType& input_value,
+ std::string_view input_value,
Err* err) {
if (as_file) {
// It's an error to resolve an empty string or one that is a directory
@@ -57,7 +56,7 @@
return true;
}
-static StringAtom SourceDirStringAtom(const std::string_view s) {
+static StringAtom SourceDirStringAtom(std::string_view s) {
if (EndsWithSlash(s)) { // Avoid allocation when possible.
AssertValueSourceDirString(s);
return StringAtom(s);
@@ -73,44 +72,49 @@
} // namespace
-SourceDir::SourceDir(const std::string_view s)
- : value_(SourceDirStringAtom(s)) {}
+SourceDir::SourceDir(std::string_view s) : value_(SourceDirStringAtom(s)) {}
-template <typename StringType>
-std::string SourceDir::ResolveRelativeAs(
- bool as_file,
- const Value& blame_input_value,
- const StringType& input_value,
- Err* err,
- const std::string_view& source_root) const {
- if (!ValidateResolveInput<StringType>(as_file, blame_input_value, input_value,
- err)) {
+std::string SourceDir::ResolveRelativeAs(bool as_file,
+ const Value& blame_input_value,
+ std::string_view input_value,
+ Err* err,
+ std::string_view source_root) const {
+ if (!ValidateResolveInput(as_file, blame_input_value, input_value, err)) {
return std::string();
}
return ResolveRelative(input_value, value_.str(), as_file, source_root);
}
-SourceFile SourceDir::ResolveRelativeFile(
- const Value& p,
- Err* err,
- const std::string_view& source_root) const {
+SourceFile SourceDir::ResolveRelativeFile(const Value& p,
+ Err* err,
+ std::string_view source_root) const {
SourceFile ret;
if (!p.VerifyTypeIs(Value::STRING, err))
return ret;
const std::string& input_string = p.string_value();
- if (!ValidateResolveInput<std::string>(true, p, input_string, err))
+ if (!ValidateResolveInput(true, p, input_string, err))
return ret;
ret.SetValue(ResolveRelative(input_string, value_.str(), true, source_root));
return ret;
}
+SourceDir SourceDir::ResolveRelativeDir(const Value& blame_input_value,
+ std::string_view input_value,
+ Err* err,
+ std::string_view source_root) const {
+ SourceDir ret;
+ ret.value_ = StringAtom(ResolveRelativeAs(false, blame_input_value,
+ input_value, err, source_root));
+ return ret;
+}
+
std::string SourceDir::ResolveRelativeAs(bool as_file,
const Value& v,
Err* err,
- const std::string_view& source_root,
+ std::string_view source_root,
const std::string* v_value) const {
if (!v.VerifyTypeIs(Value::STRING, err))
return std::string();
@@ -125,31 +129,15 @@
return result;
}
-SourceDir SourceDir::ResolveRelativeDir(
- const Value& v,
- Err* err,
- const std::string_view& source_root) const {
+SourceDir SourceDir::ResolveRelativeDir(const Value& v,
+ Err* err,
+ std::string_view source_root) const {
if (!v.VerifyTypeIs(Value::STRING, err))
return SourceDir();
- return ResolveRelativeDir<std::string>(v, v.string_value(), err, source_root);
+ return ResolveRelativeDir(v, v.string_value(), err, source_root);
}
base::FilePath SourceDir::Resolve(const base::FilePath& source_root) const {
return ResolvePath(value_.str(), false, source_root);
}
-
-// Explicit template instantiation
-template std::string SourceDir::ResolveRelativeAs(
- bool as_file,
- const Value& blame_input_value,
- const std::string& input_value,
- Err* err,
- const std::string_view& source_root) const;
-
-template std::string SourceDir::ResolveRelativeAs(
- bool as_file,
- const Value& blame_input_value,
- const std::string_view& input_value,
- Err* err,
- const std::string_view& source_root) const;
diff --git a/src/gn/source_dir.h b/src/gn/source_dir.h
index 5c436f4..d8b3c28 100644
--- a/src/gn/source_dir.h
+++ b/src/gn/source_dir.h
@@ -31,7 +31,7 @@
public:
SourceDir() = default;
- SourceDir(const std::string_view s);
+ SourceDir(std::string_view s);
// Resolves a file or dir name (based on as_file parameter) relative
// to this source directory. Will return an empty string on error
@@ -48,44 +48,37 @@
bool as_file,
const Value& v,
Err* err,
- const std::string_view& source_root = std::string_view(),
+ std::string_view source_root = std::string_view(),
const std::string* v_value = nullptr) const;
// Like ResolveRelativeAs above, but allows one to produce result
// without overhead for string conversion (on input value).
- template <typename StringType>
std::string ResolveRelativeAs(
bool as_file,
const Value& blame_input_value,
- const StringType& input_value,
+ std::string_view input_value,
Err* err,
- const std::string_view& source_root = std::string_view()) const;
+ std::string_view source_root = std::string_view()) const;
// Wrapper for ResolveRelativeAs.
SourceFile ResolveRelativeFile(
const Value& p,
Err* err,
- const std::string_view& source_root = std::string_view()) const;
+ std::string_view source_root = std::string_view()) const;
// Wrapper for ResolveRelativeAs.
- template <typename StringType>
SourceDir ResolveRelativeDir(
const Value& blame_input_value,
- const StringType& input_value,
+ std::string_view input_value,
Err* err,
- const std::string_view& source_root = std::string_view()) const {
- SourceDir ret;
- ret.value_ = StringAtom(ResolveRelativeAs<StringType>(
- false, blame_input_value, input_value, err, source_root));
- return ret;
- }
+ std::string_view source_root = std::string_view()) const;
// Wrapper for ResolveRelativeDir where input_value equals to
// v.string_value().
SourceDir ResolveRelativeDir(
const Value& v,
Err* err,
- const std::string_view& source_root = std::string_view()) const;
+ std::string_view source_root = std::string_view()) const;
// Resolves this source file relative to some given source root. Returns
// an empty file path on error.
diff --git a/src/gn/string_atom.cc b/src/gn/string_atom.cc
index fe1ef73..b4cd9f7 100644
--- a/src/gn/string_atom.cc
+++ b/src/gn/string_atom.cc
@@ -163,7 +163,7 @@
public:
// Init the n-th string in the slab with |str|.
// Return its location as well.
- std::string* init(size_t index, const std::string_view& str) {
+ std::string* init(size_t index, std::string_view str) {
std::string* result = &items_[index].str;
new (result) std::string(str);
return result;
diff --git a/src/gn/string_atom.h b/src/gn/string_atom.h
index 29d4e41..541399e 100644
--- a/src/gn/string_atom.h
+++ b/src/gn/string_atom.h
@@ -7,6 +7,7 @@
#include <functional>
#include <string>
+#include <string_view>
// A StringAtom models a pointer to a globally unique constant string.
//
diff --git a/src/gn/string_output_buffer.h b/src/gn/string_output_buffer.h
index d2a42c9..5e89250 100644
--- a/src/gn/string_output_buffer.h
+++ b/src/gn/string_output_buffer.h
@@ -9,6 +9,7 @@
#include <memory>
#include <streambuf>
#include <string>
+#include <string_view>
#include <vector>
namespace base {
diff --git a/src/gn/string_utils.cc b/src/gn/string_utils.cc
index b785e75..bff9e8f 100644
--- a/src/gn/string_utils.cc
+++ b/src/gn/string_utils.cc
@@ -287,8 +287,8 @@
return true;
}
-size_t EditDistance(const std::string_view& s1,
- const std::string_view& s2,
+size_t EditDistance(std::string_view s1,
+ std::string_view s2,
size_t max_edit_distance) {
// The algorithm implemented below is the "classic"
// dynamic-programming algorithm for computing the Levenshtein
@@ -329,7 +329,7 @@
return row[n];
}
-std::string_view SpellcheckString(const std::string_view& text,
+std::string_view SpellcheckString(std::string_view text,
const std::vector<std::string_view>& words) {
const size_t kMaxValidEditDistance = 3u;
diff --git a/src/gn/string_utils.h b/src/gn/string_utils.h
index a98a485..4b3a69c 100644
--- a/src/gn/string_utils.h
+++ b/src/gn/string_utils.h
@@ -14,7 +14,7 @@
class Token;
class Value;
-inline std::string operator+(const std::string& a, const std::string_view& b) {
+inline std::string operator+(const std::string& a, std::string_view b) {
std::string ret;
ret.reserve(a.size() + b.size());
ret.assign(a);
@@ -22,7 +22,7 @@
return ret;
}
-inline std::string operator+(const std::string_view& a, const std::string& b) {
+inline std::string operator+(std::string_view a, const std::string& b) {
std::string ret;
ret.reserve(a.size() + b.size());
ret.assign(a.data(), a.size());
@@ -40,14 +40,14 @@
// Returns the minimum number of inserts, deleted, and replacements of
// characters needed to transform s1 to s2, or max_edit_distance + 1 if
// transforming s1 into s2 isn't possible in at most max_edit_distance steps.
-size_t EditDistance(const std::string_view& s1,
- const std::string_view& s2,
+size_t EditDistance(std::string_view s1,
+ std::string_view s2,
size_t max_edit_distance);
// Given a string |text| and a vector of correctly-spelled strings |words|,
// returns the first string in |words| closest to |text|, or an empty
// std::string_view if none of the strings in |words| is close.
-std::string_view SpellcheckString(const std::string_view& text,
+std::string_view SpellcheckString(std::string_view text,
const std::vector<std::string_view>& words);
// Reads stdin until end-of-data and returns what it read.
diff --git a/src/gn/token.cc b/src/gn/token.cc
index 3af9c48..ea5139f 100644
--- a/src/gn/token.cc
+++ b/src/gn/token.cc
@@ -9,12 +9,11 @@
Token::Token() : type_(INVALID), value_() {}
-Token::Token(const Location& location, Type t, const std::string_view& v)
+Token::Token(const Location& location, Type t, std::string_view v)
: type_(t), value_(v), location_(location) {}
// static
-Token Token::ClassifyAndMake(const Location& location,
- const std::string_view& v) {
+Token Token::ClassifyAndMake(const Location& location, std::string_view v) {
char first = v.size() > 0 ? v[0] : '\0';
char second = v.size() > 1 ? v[1] : '\0';
return Token(location, Tokenizer::ClassifyToken(first, second), v);
diff --git a/src/gn/token.h b/src/gn/token.h
index a11807a..6a90872 100644
--- a/src/gn/token.h
+++ b/src/gn/token.h
@@ -58,13 +58,12 @@
};
Token();
- Token(const Location& location, Type t, const std::string_view& v);
+ Token(const Location& location, Type t, std::string_view v);
- static Token ClassifyAndMake(const Location& location,
- const std::string_view& v);
+ static Token ClassifyAndMake(const Location& location, std::string_view v);
Type type() const { return type_; }
- const std::string_view& value() const { return value_; }
+ std::string_view value() const { return value_; }
const Location& location() const { return location_; }
void set_location(Location location) { location_ = location; }
LocationRange range() const {
diff --git a/src/gn/tokenizer.cc b/src/gn/tokenizer.cc
index 93a6425..a2f0034 100644
--- a/src/gn/tokenizer.cc
+++ b/src/gn/tokenizer.cc
@@ -156,7 +156,7 @@
}
// static
-size_t Tokenizer::ByteOffsetOfNthLine(const std::string_view& buf, int n) {
+size_t Tokenizer::ByteOffsetOfNthLine(std::string_view buf, int n) {
DCHECK_GT(n, 0);
if (n == 1)
@@ -176,7 +176,7 @@
}
// static
-bool Tokenizer::IsNewline(const std::string_view& buffer, size_t offset) {
+bool Tokenizer::IsNewline(std::string_view buffer, size_t offset) {
DCHECK(offset < buffer.size());
// We may need more logic here to handle different line ending styles.
return buffer[offset] == '\n';
diff --git a/src/gn/tokenizer.h b/src/gn/tokenizer.h
index d4b347b..0af3a36 100644
--- a/src/gn/tokenizer.h
+++ b/src/gn/tokenizer.h
@@ -40,11 +40,11 @@
//
// This is a helper function for error output so that the tokenizer's
// notion of lines can be used elsewhere.
- static size_t ByteOffsetOfNthLine(const std::string_view& buf, int n);
+ static size_t ByteOffsetOfNthLine(std::string_view buf, int n);
// Returns true if the given offset of the string piece counts as a newline.
// The offset must be in the buffer.
- static bool IsNewline(const std::string_view& buffer, size_t offset);
+ static bool IsNewline(std::string_view buffer, size_t offset);
static bool IsIdentifierFirstChar(char c);
diff --git a/src/gn/visibility.cc b/src/gn/visibility.cc
index eb99a27..8fb5e7f 100644
--- a/src/gn/visibility.cc
+++ b/src/gn/visibility.cc
@@ -22,7 +22,7 @@
Visibility::~Visibility() = default;
bool Visibility::Set(const SourceDir& current_dir,
- const std::string_view& source_root,
+ std::string_view source_root,
const Value& value,
Err* err) {
patterns_.clear();
diff --git a/src/gn/visibility.h b/src/gn/visibility.h
index fc16731..f0ebcf5 100644
--- a/src/gn/visibility.h
+++ b/src/gn/visibility.h
@@ -32,7 +32,7 @@
// Set the visibility to the thing specified by the given value. On failure,
// returns false and sets the error.
bool Set(const SourceDir& current_dir,
- const std::string_view& source_root,
+ std::string_view source_root,
const Value& value,
Err* err);
diff --git a/src/gn/xcode_object.cc b/src/gn/xcode_object.cc
index 0761b4f..1d08f22 100644
--- a/src/gn/xcode_object.cc
+++ b/src/gn/xcode_object.cc
@@ -143,7 +143,7 @@
{"y", "sourcecode.yacc"},
};
-const char* GetSourceType(const std::string_view& ext) {
+const char* GetSourceType(std::string_view ext) {
for (size_t i = 0; i < std::size(kSourceTypeForExt); ++i) {
if (kSourceTypeForExt[i].ext == ext)
return kSourceTypeForExt[i].source_type;
@@ -152,11 +152,11 @@
return "text";
}
-bool HasExplicitFileType(const std::string_view& ext) {
+bool HasExplicitFileType(std::string_view ext) {
return ext == "dart";
}
-bool IsSourceFileForIndexing(const std::string_view& ext) {
+bool IsSourceFileForIndexing(std::string_view ext) {
return ext == "c" || ext == "cc" || ext == "cpp" || ext == "cxx" ||
ext == "m" || ext == "mm";
}
diff --git a/src/gn/xml_element_writer.cc b/src/gn/xml_element_writer.cc
index 8525057..f888915 100644
--- a/src/gn/xml_element_writer.cc
+++ b/src/gn/xml_element_writer.cc
@@ -8,13 +8,13 @@
XmlAttributes::XmlAttributes() = default;
-XmlAttributes::XmlAttributes(const std::string_view& attr_key,
- const std::string_view& attr_value) {
+XmlAttributes::XmlAttributes(std::string_view attr_key,
+ std::string_view attr_value) {
add(attr_key, attr_value);
}
-XmlAttributes& XmlAttributes::add(const std::string_view& attr_key,
- const std::string_view& attr_value) {
+XmlAttributes& XmlAttributes::add(std::string_view attr_key,
+ std::string_view attr_value) {
push_back(std::make_pair(attr_key, attr_value));
return *this;
}
@@ -50,7 +50,7 @@
}
}
-void XmlElementWriter::Text(const std::string_view& content) {
+void XmlElementWriter::Text(std::string_view content) {
StartContent(false);
out_ << content;
}
diff --git a/src/gn/xml_element_writer.h b/src/gn/xml_element_writer.h
index 9040d16..6229f88 100644
--- a/src/gn/xml_element_writer.h
+++ b/src/gn/xml_element_writer.h
@@ -19,11 +19,9 @@
: public std::vector<std::pair<std::string_view, std::string_view>> {
public:
XmlAttributes();
- XmlAttributes(const std::string_view& attr_key,
- const std::string_view& attr_value);
+ XmlAttributes(std::string_view attr_key, std::string_view attr_value);
- XmlAttributes& add(const std::string_view& attr_key,
- const std::string_view& attr_value);
+ XmlAttributes& add(std::string_view attr_key, std::string_view attr_value);
};
// Helper class for writing XML elements. New XML element is started in
@@ -54,7 +52,7 @@
~XmlElementWriter();
// Writes arbitrary XML element text.
- void Text(const std::string_view& content);
+ void Text(std::string_view content);
// Starts new XML sub-element. Caller must ensure that parent element outlives
// its children.