5#ifndef V8_FLAGS_FLAGS_IMPL_H_
6#define V8_FLAGS_FLAGS_IMPL_H_
9#include <unordered_set>
46 :
FlagName(name[0] ==
'!' ? name + 1 : name, name[0] ==
'!') {}
83 const Flag* implied_by_ptr_ =
nullptr;
95 bool ImpliedBy(
const void* ptr)
const {
96 const Flag* current = this->implied_by_ptr_;
97 std::unordered_set<const Flag*> visited_flags;
98 while (current !=
nullptr) {
99 visited_flags.insert(current);
100 if (current->PointsTo(ptr))
return true;
101 current = current->implied_by_ptr_;
102 if (visited_flags.contains(current))
break;
161 template <
typename T>
163 return *
reinterpret_cast<const T*
>(
defptr_);
208 const char* implied_by =
nullptr);
215 template <FlagType flag_type,
typename T>
222 template <FlagType flag_type,
typename T>
static bool EqualNames(const char *a, const char *b)
static char NormalizeChar(char ch)
static int FlagNamesCmp(const char *a, const char *b)
static bool EqualNameWithSuffix(const char *a, const char *b)
V8_EXPORT_PRIVATE base::Vector< Flag > Flags()
V8_EXPORT_PRIVATE Flag * FindFlagByName(const char *name)
Flag * FindFlagByPointer(const void *ptr)
std::ostream & operator<<(std::ostream &os, AtomicMemoryOrder order)
V8_EXPORT_PRIVATE Flag * FindImplicationFlagByName(const char *name)
#define DCHECK_NE(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
constexpr FlagName(const char *name, bool negated)
constexpr FlagName(const char *name)
void set_bool_variable(bool value, SetBy set_by)
uint64_t uint64_default() const
double float_variable() const
std::optional< bool > maybe_bool_variable() const
double float_default() const
V8_EXPORT_PRIVATE void Reset()
const char * string_value() const
const char * name() const
size_t size_t_default() const
void set_uint64_variable(uint64_t value, SetBy set_by)
bool PointsTo(const void *ptr) const
void set_size_t_variable(size_t value, SetBy set_by)
bool bool_variable() const
bool bool_default() const
T GetDefaultValue() const
void set_float_variable(double value, SetBy set_by)
unsigned int uint_variable() const
size_t size_t_variable() const
constexpr bool IsAnyImplication(Flag::SetBy set_by)
void set_maybe_bool_variable(std::optional< bool > value, SetBy set_by)
void set_uint_variable(unsigned int value, SetBy set_by)
void ReleaseDynamicAllocations()
void set_string_value(const char *new_value, bool owns_new_value, SetBy set_by)
void SetValue(T new_value, SetBy set_by)
unsigned int uint_default() const
bool CheckFlagChange(SetBy new_set_by, bool change_flag, const char *implied_by=nullptr)
void set_int_variable(int value, SetBy set_by)
static bool ShouldCheckFlagContradictions()
uint64_t uint64_variable() const
const char * comment() const
const char * string_default() const