summaryrefslogtreecommitdiffstats
path: root/js/public/RegExpFlags.h
diff options
context:
space:
mode:
Diffstat (limited to 'js/public/RegExpFlags.h')
-rw-r--r--js/public/RegExpFlags.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/js/public/RegExpFlags.h b/js/public/RegExpFlags.h
index 36a2e76c29..e4663786fc 100644
--- a/js/public/RegExpFlags.h
+++ b/js/public/RegExpFlags.h
@@ -12,6 +12,7 @@
#include "mozilla/Assertions.h" // MOZ_ASSERT
#include "mozilla/Attributes.h" // MOZ_IMPLICIT
+#include <ostream> // ostream
#include <stdint.h> // uint8_t
namespace JS {
@@ -129,6 +130,15 @@ class RegExpFlags {
explicit operator bool() const { return flags_ != 0; }
Flag value() const { return flags_; }
+ constexpr operator Flag() const { return flags_; }
+
+ void set(Flag flags, bool value) {
+ if (value) {
+ flags_ |= flags;
+ } else {
+ flags_ &= ~flags;
+ }
+ }
};
inline RegExpFlags& operator&=(RegExpFlags& flags, RegExpFlags::Flag flag) {
@@ -158,6 +168,39 @@ inline RegExpFlags operator|(const RegExpFlags& lhs, const RegExpFlags& rhs) {
return result;
}
+inline bool MaybeParseRegExpFlag(char c, RegExpFlags::Flag* flag) {
+ switch (c) {
+ case 'd':
+ *flag = RegExpFlag::HasIndices;
+ return true;
+ case 'g':
+ *flag = RegExpFlag::Global;
+ return true;
+ case 'i':
+ *flag = RegExpFlag::IgnoreCase;
+ return true;
+ case 'm':
+ *flag = RegExpFlag::Multiline;
+ return true;
+ case 's':
+ *flag = RegExpFlag::DotAll;
+ return true;
+ case 'u':
+ *flag = RegExpFlag::Unicode;
+ return true;
+ case 'v':
+ *flag = RegExpFlag::UnicodeSets;
+ return true;
+ case 'y':
+ *flag = RegExpFlag::Sticky;
+ return true;
+ default:
+ return false;
+ }
+}
+
+std::ostream& operator<<(std::ostream& os, RegExpFlags flags);
+
} // namespace JS
#endif // js_RegExpFlags_h