2 * Copyright (C) 2008 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #include <wtf/Platform.h>
33 #include <wtf/Assertions.h>
35 namespace JSC
{ namespace WREC
{
45 WordBoundaryAssertion
,
54 Type
type() const { return m_type
; }
60 // Used by subclasses to store data.
63 const WREC::CharacterClass
* c
;
68 class PatternCharacterEscape
: public Escape
{
70 static const PatternCharacterEscape
& cast(const Escape
& escape
)
72 ASSERT(escape
.type() == PatternCharacter
);
73 return static_cast<const PatternCharacterEscape
&>(escape
);
76 PatternCharacterEscape(int character
)
77 : Escape(PatternCharacter
)
82 operator Escape() const { return *this; }
84 int character() const { return m_u
.i
; }
87 class CharacterClassEscape
: public Escape
{
89 static const CharacterClassEscape
& cast(const Escape
& escape
)
91 ASSERT(escape
.type() == CharacterClass
);
92 return static_cast<const CharacterClassEscape
&>(escape
);
95 CharacterClassEscape(const WREC::CharacterClass
& characterClass
, bool invert
)
96 : Escape(CharacterClass
)
98 m_u
.c
= &characterClass
;
102 operator Escape() { return *this; }
104 const WREC::CharacterClass
& characterClass() const { return *m_u
.c
; }
105 bool invert() const { return m_invert
; }
108 class BackreferenceEscape
: public Escape
{
110 static const BackreferenceEscape
& cast(const Escape
& escape
)
112 ASSERT(escape
.type() == Backreference
);
113 return static_cast<const BackreferenceEscape
&>(escape
);
116 BackreferenceEscape(int subpatternId
)
117 : Escape(Backreference
)
119 m_u
.i
= subpatternId
;
122 operator Escape() const { return *this; }
124 int subpatternId() const { return m_u
.i
; }
127 class WordBoundaryAssertionEscape
: public Escape
{
129 static const WordBoundaryAssertionEscape
& cast(const Escape
& escape
)
131 ASSERT(escape
.type() == WordBoundaryAssertion
);
132 return static_cast<const WordBoundaryAssertionEscape
&>(escape
);
135 WordBoundaryAssertionEscape(bool invert
)
136 : Escape(WordBoundaryAssertion
)
141 operator Escape() const { return *this; }
143 bool invert() const { return m_invert
; }
146 } } // namespace JSC::WREC
148 #endif // ENABLE(WREC)