summaryrefslogtreecommitdiffstats
path: root/JavaScriptCore/yarr/RegexPattern.h
diff options
context:
space:
mode:
Diffstat (limited to 'JavaScriptCore/yarr/RegexPattern.h')
-rw-r--r--JavaScriptCore/yarr/RegexPattern.h29
1 files changed, 28 insertions, 1 deletions
diff --git a/JavaScriptCore/yarr/RegexPattern.h b/JavaScriptCore/yarr/RegexPattern.h
index dd7512d..3271cc1 100644
--- a/JavaScriptCore/yarr/RegexPattern.h
+++ b/JavaScriptCore/yarr/RegexPattern.h
@@ -26,7 +26,6 @@
#ifndef RegexPattern_h
#define RegexPattern_h
-#include <wtf/Platform.h>
#if ENABLE(YARR)
@@ -57,11 +56,35 @@ struct CharacterRange {
}
};
+struct CharacterClassTable : RefCounted<CharacterClassTable> {
+ const char* m_table;
+ bool m_inverted;
+ static PassRefPtr<CharacterClassTable> create(const char* table, bool inverted)
+ {
+ return adoptRef(new CharacterClassTable(table, inverted));
+ }
+
+private:
+ CharacterClassTable(const char* table, bool inverted)
+ : m_table(table)
+ , m_inverted(inverted)
+ {
+ }
+};
+
struct CharacterClass : FastAllocBase {
+ // All CharacterClass instances have to have the full set of matches and ranges,
+ // they may have an optional table for faster lookups (which must match the
+ // specified matches and ranges)
+ CharacterClass(PassRefPtr<CharacterClassTable> table)
+ : m_table(table)
+ {
+ }
Vector<UChar> m_matches;
Vector<CharacterRange> m_ranges;
Vector<UChar> m_matchesUnicode;
Vector<CharacterRange> m_rangesUnicode;
+ RefPtr<CharacterClassTable> m_table;
};
enum QuantifierType {
@@ -248,6 +271,7 @@ struct RegexPattern {
, m_multiline(multiline)
, m_numSubpatterns(0)
, m_maxBackReference(0)
+ , m_shouldFallBack(false)
, newlineCached(0)
, digitsCached(0)
, spacesCached(0)
@@ -269,6 +293,8 @@ struct RegexPattern {
m_numSubpatterns = 0;
m_maxBackReference = 0;
+ m_shouldFallBack = false;
+
newlineCached = 0;
digitsCached = 0;
spacesCached = 0;
@@ -335,6 +361,7 @@ struct RegexPattern {
bool m_multiline;
unsigned m_numSubpatterns;
unsigned m_maxBackReference;
+ bool m_shouldFallBack;
PatternDisjunction* m_body;
Vector<PatternDisjunction*, 4> m_disjunctions;
Vector<CharacterClass*> m_userCharacterClasses;