blob: 0df04cb634a7eaa785f1f4b9d8439759a18b36d4 [file] [log] [blame]
zherczeg@webkit.org17dc93a2010-06-22 19:16:57 +00001/*
2 * Copyright (C) 2010 University of Szeged
3 * Copyright (C) 2010 Renata Hodovan (hodovan@inf.u-szeged.hu)
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include "RegExp.h"
29#include "RegExpKey.h"
oliver@apple.com5652af72011-05-26 01:12:46 +000030#include "Strong.h"
oliver@apple.comd7523c12011-05-26 22:58:52 +000031#include "Weak.h"
ggaren@apple.com34e919e2013-04-08 23:41:02 +000032#include "WeakInlines.h"
weinig@apple.combe6603a2013-12-10 01:28:05 +000033#include <array>
barraclough@apple.com79b4e282010-08-17 02:13:02 +000034#include <wtf/HashMap.h>
zherczeg@webkit.org17dc93a2010-06-22 19:16:57 +000035
36#ifndef RegExpCache_h
37#define RegExpCache_h
38
39namespace JSC {
40
oliver@apple.comd7523c12011-05-26 22:58:52 +000041class RegExpCache : private WeakHandleOwner {
ggaren@apple.com3e775032015-03-27 17:27:47 +000042 WTF_MAKE_FAST_ALLOCATED;
43
44 friend class RegExp;
45 typedef HashMap<RegExpKey, Weak<RegExp>> RegExpCacheMap;
ggaren@apple.com5280b9c2010-07-02 21:34:43 +000046
zherczeg@webkit.org17dc93a2010-06-22 19:16:57 +000047public:
ggaren@apple.com9a9a4b52013-04-18 19:32:17 +000048 RegExpCache(VM* vm);
ggaren@apple.com05627c52015-08-13 20:17:02 +000049 void deleteAllCode();
zherczeg@webkit.org17dc93a2010-06-22 19:16:57 +000050
51private:
oliver@apple.comd7523c12011-05-26 22:58:52 +000052
53 static const unsigned maxStrongCacheablePatternLength = 256;
barraclough@apple.com99406a02010-12-22 01:30:12 +000054
oliver@apple.comd7523c12011-05-26 22:58:52 +000055 static const int maxStrongCacheableEntries = 32;
zherczeg@webkit.org17dc93a2010-06-22 19:16:57 +000056
darin@apple.com11ff47c2016-03-04 16:47:55 +000057 void finalize(Handle<Unknown>, void* context) override;
oliver@apple.comd7523c12011-05-26 22:58:52 +000058
benjamin@webkit.orgcff06e42012-08-30 21:23:51 +000059 RegExp* lookupOrCreate(const WTF::String& patternString, RegExpFlags);
oliver@apple.comd7523c12011-05-26 22:58:52 +000060 void addToStrongCache(RegExp*);
61 RegExpCacheMap m_weakCache; // Holds all regular expressions currently live.
62 int m_nextEntryInStrongCache;
weinig@apple.combe6603a2013-12-10 01:28:05 +000063 std::array<Strong<RegExp>, maxStrongCacheableEntries> m_strongCache; // Holds a select few regular expressions that have compiled and executed
ggaren@apple.com9a9a4b52013-04-18 19:32:17 +000064 VM* m_vm;
zherczeg@webkit.org17dc93a2010-06-22 19:16:57 +000065};
66
67} // namespace JSC
68
69#endif // RegExpCache_h