Flag* Flag::fuzzy_match(const char* name, size_t length, bool allow_locked) { float VMOptionsFuzzyMatchSimilarity = 0.7f; Flag* match = NULL; float score; float max_score = -1; for (Flag* current = &flagTable[0]; current->name != NULL; current++) { score = str_similar(current->name, name, length); if (score > max_score) { max_score = score; match = current; } } if (!(match->is_unlocked() || match->is_unlocker())) { if (!allow_locked) { return NULL; } } if (max_score < VMOptionsFuzzyMatchSimilarity) { return NULL; } return match; }
// Search the flag table for a named flag Flag* Flag::find_flag(const char* name, size_t length, bool allow_locked) { for (Flag* current = &flagTable[0]; current->name != NULL; current++) { if (str_equal(current->name, name, length)) { // Found a matching entry. Report locked flags only if allowed. if (!(current->is_unlocked() || current->is_unlocker())) { if (!allow_locked) { // disable use of locked flags, e.g. diagnostic, experimental, // commercial... until they are explicitly unlocked return NULL; } } return current; } } // Flag name is not in the flag table return NULL; }
// Search the flag table for a named flag Flag* Flag::find_flag(const char* name, size_t length, bool allow_locked, bool return_flag) { for (Flag* current = &flagTable[0]; current->_name != NULL; current++) { if (str_equal(current->_name, name, length)) { // Found a matching entry. // Don't report notproduct and develop flags in product builds. if (current->is_constant_in_binary()) { return (return_flag ? current : NULL); } // Report locked flags only if allowed. if (!(current->is_unlocked() || current->is_unlocker())) { if (!allow_locked) { // disable use of locked flags, e.g. diagnostic, experimental, // commercial... until they are explicitly unlocked return NULL; } } return current; } } // Flag name is not in the flag table return NULL; }