summaryrefslogtreecommitdiff
path: root/deps/v8/src/flags/flags.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/flags/flags.cc')
-rw-r--r--deps/v8/src/flags/flags.cc68
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;