diff options
Diffstat (limited to 'deps/v8/src/flags/flags.cc')
-rw-r--r-- | deps/v8/src/flags/flags.cc | 68 |
1 files changed, 40 insertions, 28 deletions
diff --git a/deps/v8/src/flags/flags.cc b/deps/v8/src/flags/flags.cc index 4bf401b73c..66ad2974d0 100644 --- a/deps/v8/src/flags/flags.cc +++ b/deps/v8/src/flags/flags.cc @@ -9,6 +9,7 @@ #include <cinttypes> #include <cstdlib> #include <cstring> +#include <iomanip> #include <sstream> #include "src/base/functional.h" @@ -40,6 +41,8 @@ namespace internal { namespace { +char NormalizeChar(char ch) { return ch == '_' ? '-' : ch; } + struct Flag; Flag* FindFlagByPointer(const void* ptr); Flag* FindFlagByName(const char* name); @@ -380,8 +383,6 @@ Flag flags[] = { const size_t num_flags = sizeof(flags) / sizeof(*flags); -inline char NormalizeChar(char ch) { return ch == '_' ? '-' : ch; } - bool EqualNames(const char* a, const char* b) { for (int i = 0; NormalizeChar(a[i]) == NormalizeChar(b[i]); i++) { if (a[i] == '\0') { @@ -429,7 +430,27 @@ static const char* Type2String(Flag::FlagType type) { UNREACHABLE(); } -std::ostream& operator<<(std::ostream& os, const Flag& flag) { +// Helper struct for printing normalize Flag names. +struct FlagName { + explicit FlagName(const Flag& flag) : flag(flag) {} + const Flag& flag; +}; + +std::ostream& operator<<(std::ostream& os, const FlagName& flag_name) { + for (const char* c = flag_name.flag.name(); *c != '\0'; ++c) { + os << NormalizeChar(*c); + } + return os; +} + +// Helper for printing flag values. +struct FlagValue { + explicit FlagValue(const Flag& flag) : flag(flag) {} + const Flag& flag; +}; + +std::ostream& operator<<(std::ostream& os, const FlagValue& flag_value) { + const Flag& flag = flag_value.flag; switch (flag.type()) { case Flag::TYPE_BOOL: os << (flag.bool_variable() ? "true" : "false"); @@ -456,33 +477,20 @@ std::ostream& operator<<(std::ostream& os, const Flag& flag) { break; case Flag::TYPE_STRING: { const char* str = flag.string_value(); - os << (str ? str : "nullptr"); + os << std::quoted(str ? str : ""); break; } } return os; } -// static -std::vector<const char*>* FlagList::argv() { - std::vector<const char*>* args = new std::vector<const char*>(8); - for (size_t i = 0; i < num_flags; ++i) { - Flag* f = &flags[i]; - if (!f->IsDefault()) { - { - bool disabled = f->type() == Flag::TYPE_BOOL && !f->bool_variable(); - std::ostringstream os; - os << (disabled ? "--no" : "--") << f->name(); - args->push_back(StrDup(os.str().c_str())); - } - if (f->type() != Flag::TYPE_BOOL) { - std::ostringstream os; - os << *f; - args->push_back(StrDup(os.str().c_str())); - } - } +std::ostream& operator<<(std::ostream& os, const Flag& flag) { + if (flag.type() == Flag::TYPE_BOOL) { + os << (flag.bool_variable() ? "--" : "--no") << FlagName(flag); + } else { + os << "--" << FlagName(flag) << "=" << FlagValue(flag); } - return args; + return os; } // Helper function to parse flags: Takes an argument arg and splits it into @@ -768,16 +776,20 @@ void FlagList::PrintHelp() { os << "Options:\n"; for (const Flag& f : flags) { - os << " --"; - for (const char* c = f.name(); *c != '\0'; ++c) { - os << NormalizeChar(*c); - } - os << " (" << f.comment() << ")\n" + os << " --" << FlagName(f) << " (" << f.comment() << ")\n" << " type: " << Type2String(f.type()) << " default: " << f << "\n"; } } +// static +void FlagList::PrintValues() { + StdoutStream os; + for (const Flag& f : flags) { + os << f << "\n"; + } +} + namespace { static uint32_t flag_hash = 0; |