RegExpCache.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  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. #include "RegExp.h"
  28. #include "RegExpKey.h"
  29. #include "Strong.h"
  30. #include "Weak.h"
  31. #include "WeakInlines.h"
  32. #include <wtf/FixedArray.h>
  33. #include <wtf/HashMap.h>
  34. #ifndef RegExpCache_h
  35. #define RegExpCache_h
  36. namespace JSC {
  37. class RegExpCache : private WeakHandleOwner {
  38. friend class RegExp;
  39. typedef HashMap<RegExpKey, Weak<RegExp> > RegExpCacheMap;
  40. public:
  41. RegExpCache(VM* vm);
  42. void invalidateCode();
  43. private:
  44. static const unsigned maxStrongCacheablePatternLength = 256;
  45. static const int maxStrongCacheableEntries = 32;
  46. virtual void finalize(Handle<Unknown>, void* context);
  47. RegExp* lookupOrCreate(const WTF::String& patternString, RegExpFlags);
  48. void addToStrongCache(RegExp*);
  49. RegExpCacheMap m_weakCache; // Holds all regular expressions currently live.
  50. int m_nextEntryInStrongCache;
  51. WTF::FixedArray<Strong<RegExp>, maxStrongCacheableEntries> m_strongCache; // Holds a select few regular expressions that have compiled and executed
  52. VM* m_vm;
  53. };
  54. } // namespace JSC
  55. #endif // RegExpCache_h