mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 22:02:23 +01:00
Factor out C-string argv building and simplify vlogs (#6478)
This extracts the C-string `argv`-like building routine to a more broadly reusable location. It also sinks the verbose logging logic out of it and into the relevant runners. In turn, it simplifies the verbose logging logic significantly. The biggest functional change is removing the implicit synthesis of a tool's `-v` verbose flag from the presence of a `vlog` stream. I thought this would be helpful, but in practice of debugging these layers it has been more of a hindrance than a help -- I pretty often only want verbose logging on one side or the other, and we have ways of explicitly passing a `-v` flag to the underlying tools already. I think my instinct to do this was just wrong, so rip it out and simplify. This does add an unused feature -- prepending a prefix of arguments while building the C-string variant. This isn't used in this PR but will be used in subsequent PRs and it seemed more disruptive to undo that logic and then re-do it in a later PR. Let me know if it's too confusing here. Assisted-by: Gemini Code Assist --------- Co-authored-by: Geoff Romer <gromer@google.com>
This commit is contained in:
co-authored by
Geoff Romer
parent
1c3d3e9284
commit
ff8ce31e1b
@@ -10,8 +10,12 @@
|
||||
#include <optional>
|
||||
#include <string>
|
||||
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
|
||||
using ::testing::Eq;
|
||||
using ::testing::Optional;
|
||||
using ::testing::StrEq;
|
||||
|
||||
namespace Carbon {
|
||||
namespace {
|
||||
@@ -228,5 +232,67 @@ TEST(ParseBlockStringLiteral, OkMultipleSlashes) {
|
||||
EXPECT_THAT(*ParseBlockStringLiteral(Input), Eq(Expected));
|
||||
}
|
||||
|
||||
TEST(BuildCStrArgs, NoArgs) {
|
||||
llvm::OwningArrayRef<char> storage;
|
||||
auto result = BuildCStrArgs("tool", {}, storage);
|
||||
ASSERT_THAT(result.size(), Eq(1));
|
||||
EXPECT_THAT(result[0], StrEq("tool"));
|
||||
}
|
||||
|
||||
TEST(BuildCStrArgs, OneArg) {
|
||||
llvm::OwningArrayRef<char> storage;
|
||||
auto result = BuildCStrArgs("tool", {"arg1"}, storage);
|
||||
ASSERT_THAT(result.size(), Eq(2));
|
||||
EXPECT_THAT(result[0], StrEq("tool"));
|
||||
EXPECT_THAT(result[1], StrEq("arg1"));
|
||||
}
|
||||
|
||||
TEST(BuildCStrArgs, MultipleArgs) {
|
||||
llvm::OwningArrayRef<char> storage;
|
||||
auto result = BuildCStrArgs("tool", {"arg1", "arg2"}, storage);
|
||||
ASSERT_THAT(result.size(), Eq(3));
|
||||
EXPECT_THAT(result[0], StrEq("tool"));
|
||||
EXPECT_THAT(result[1], StrEq("arg1"));
|
||||
EXPECT_THAT(result[2], StrEq("arg2"));
|
||||
}
|
||||
|
||||
TEST(BuildCStrArgsWithPrefix, NoArgs) {
|
||||
llvm::OwningArrayRef<char> storage;
|
||||
auto result = BuildCStrArgs("tool", {}, {}, storage);
|
||||
ASSERT_THAT(result.size(), Eq(1));
|
||||
EXPECT_THAT(result[0], StrEq("tool"));
|
||||
}
|
||||
|
||||
TEST(BuildCStrArgsWithPrefix, PrefixOnly) {
|
||||
llvm::OwningArrayRef<char> storage;
|
||||
std::string prefix_args[] = {"p_arg1", "p_arg2"};
|
||||
auto result = BuildCStrArgs("tool", prefix_args, {}, storage);
|
||||
ASSERT_THAT(result.size(), Eq(3));
|
||||
EXPECT_THAT(result[0], StrEq("tool"));
|
||||
EXPECT_THAT(result[1], Eq(prefix_args[0].c_str()));
|
||||
EXPECT_THAT(result[2], Eq(prefix_args[1].c_str()));
|
||||
}
|
||||
|
||||
TEST(BuildCStrArgsWithPrefix, ArgsOnly) {
|
||||
llvm::OwningArrayRef<char> storage;
|
||||
auto result = BuildCStrArgs("tool", {}, {"arg1", "arg2"}, storage);
|
||||
ASSERT_THAT(result.size(), Eq(3));
|
||||
EXPECT_THAT(result[0], StrEq("tool"));
|
||||
EXPECT_THAT(result[1], StrEq("arg1"));
|
||||
EXPECT_THAT(result[2], StrEq("arg2"));
|
||||
}
|
||||
|
||||
TEST(BuildCStrArgsWithPrefix, BothPrefixAndArgs) {
|
||||
llvm::OwningArrayRef<char> storage;
|
||||
std::string prefix_args[] = {"p_arg1", "p_arg2"};
|
||||
auto result = BuildCStrArgs("tool", prefix_args, {"arg1", "arg2"}, storage);
|
||||
ASSERT_THAT(result.size(), Eq(5));
|
||||
EXPECT_THAT(result[0], StrEq("tool"));
|
||||
EXPECT_THAT(result[1], Eq(prefix_args[0].c_str()));
|
||||
EXPECT_THAT(result[2], Eq(prefix_args[1].c_str()));
|
||||
EXPECT_THAT(result[3], StrEq("arg1"));
|
||||
EXPECT_THAT(result[4], StrEq("arg2"));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace Carbon
|
||||
|
||||
Reference in New Issue
Block a user