summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/webkit/JavaScriptCore/wrec/Escapes.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/webkit/JavaScriptCore/wrec/Escapes.h')
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/Escapes.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/src/3rdparty/webkit/JavaScriptCore/wrec/Escapes.h b/src/3rdparty/webkit/JavaScriptCore/wrec/Escapes.h
new file mode 100644
index 0000000..16c1d6f
--- /dev/null
+++ b/src/3rdparty/webkit/JavaScriptCore/wrec/Escapes.h
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef Escapes_h
+#define Escapes_h
+
+#include <wtf/Platform.h>
+
+#if ENABLE(WREC)
+
+#include <wtf/Assertions.h>
+
+namespace JSC { namespace WREC {
+
+ class CharacterClass;
+
+ class Escape {
+ public:
+ enum Type {
+ PatternCharacter,
+ CharacterClass,
+ Backreference,
+ WordBoundaryAssertion,
+ Error,
+ };
+
+ Escape(Type type)
+ : m_type(type)
+ {
+ }
+
+ Type type() const { return m_type; }
+
+ private:
+ Type m_type;
+
+ protected:
+ // Used by subclasses to store data.
+ union {
+ int i;
+ const WREC::CharacterClass* c;
+ } m_u;
+ bool m_invert;
+ };
+
+ class PatternCharacterEscape : public Escape {
+ public:
+ static const PatternCharacterEscape& cast(const Escape& escape)
+ {
+ ASSERT(escape.type() == PatternCharacter);
+ return static_cast<const PatternCharacterEscape&>(escape);
+ }
+
+ PatternCharacterEscape(int character)
+ : Escape(PatternCharacter)
+ {
+ m_u.i = character;
+ }
+
+ operator Escape() const { return *this; }
+
+ int character() const { return m_u.i; }
+ };
+
+ class CharacterClassEscape : public Escape {
+ public:
+ static const CharacterClassEscape& cast(const Escape& escape)
+ {
+ ASSERT(escape.type() == CharacterClass);
+ return static_cast<const CharacterClassEscape&>(escape);
+ }
+
+ CharacterClassEscape(const WREC::CharacterClass& characterClass, bool invert)
+ : Escape(CharacterClass)
+ {
+ m_u.c = &characterClass;
+ m_invert = invert;
+ }
+
+ operator Escape() { return *this; }
+
+ const WREC::CharacterClass& characterClass() const { return *m_u.c; }
+ bool invert() const { return m_invert; }
+ };
+
+ class BackreferenceEscape : public Escape {
+ public:
+ static const BackreferenceEscape& cast(const Escape& escape)
+ {
+ ASSERT(escape.type() == Backreference);
+ return static_cast<const BackreferenceEscape&>(escape);
+ }
+
+ BackreferenceEscape(int subpatternId)
+ : Escape(Backreference)
+ {
+ m_u.i = subpatternId;
+ }
+
+ operator Escape() const { return *this; }
+
+ int subpatternId() const { return m_u.i; }
+ };
+
+ class WordBoundaryAssertionEscape : public Escape {
+ public:
+ static const WordBoundaryAssertionEscape& cast(const Escape& escape)
+ {
+ ASSERT(escape.type() == WordBoundaryAssertion);
+ return static_cast<const WordBoundaryAssertionEscape&>(escape);
+ }
+
+ WordBoundaryAssertionEscape(bool invert)
+ : Escape(WordBoundaryAssertion)
+ {
+ m_invert = invert;
+ }
+
+ operator Escape() const { return *this; }
+
+ bool invert() const { return m_invert; }
+ };
+
+} } // namespace JSC::WREC
+
+#endif // ENABLE(WREC)
+
+#endif // Escapes_h