RegexPattern.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. namespace Js
  7. {
  8. class JavascriptLibrary;
  9. }
  10. namespace UnifiedRegex
  11. {
  12. struct Program;
  13. class Matcher;
  14. struct TrigramInfo;
  15. static const uint TestCacheSize = 8;
  16. struct RegExpTestCache
  17. {
  18. Field(BVStatic<TestCacheSize>) resultBV;
  19. Field(RecyclerWeakReference<Js::JavascriptString>*) inputArray[];
  20. };
  21. struct RegexPattern : FinalizableObject
  22. {
  23. Field(RegExpTestCache*) testCache;
  24. struct UnifiedRep
  25. {
  26. Field(Program*) program;
  27. Field(Matcher*) matcher;
  28. Field(TrigramInfo*) trigramInfo;
  29. };
  30. Field(Js::JavascriptLibrary *) const library;
  31. Field(bool) isLiteral : 1;
  32. Field(bool) isShallowClone : 1;
  33. union Rep
  34. {
  35. Field(UnifiedRep) unified;
  36. Rep() : unified() {}
  37. };
  38. Field(Rep) rep;
  39. RegexPattern(Js::JavascriptLibrary *const library, Program* program, bool isLiteral);
  40. static RegexPattern *New(Js::ScriptContext *scriptContext, Program* program, bool isLiteral);
  41. virtual void Finalize(bool isShutdown) override;
  42. virtual void Dispose(bool isShutdown) override;
  43. virtual void Mark(Recycler *recycler) override { AssertMsg(false, "Mark called on object that isn't TrackableObject"); }
  44. Js::ScriptContext *GetScriptContext() const;
  45. inline bool IsLiteral() const { return isLiteral; }
  46. uint16 NumGroups() const;
  47. bool IsIgnoreCase() const;
  48. bool IsGlobal() const;
  49. bool IsMultiline() const;
  50. bool IsUnicode() const;
  51. bool IsSticky() const;
  52. bool WasLastMatchSuccessful() const;
  53. GroupInfo GetGroup(int groupId) const;
  54. Js::InternalString GetSource() const;
  55. RegexFlags GetFlags() const;
  56. Field(RegExpTestCache*) EnsureTestCache();
  57. static uint GetTestCacheIndex(Js::JavascriptString* str);
  58. #if ENABLE_REGEX_CONFIG_OPTIONS
  59. void Print(DebugWriter* w);
  60. #endif
  61. RegexPattern *CopyToScriptContext(Js::ScriptContext *scriptContext);
  62. #if ENABLE_REGEX_CONFIG_OPTIONS
  63. static void TraceTestCache(bool cacheHit, Js::JavascriptString* input, Js::JavascriptString* cachedValue, bool disabled);
  64. #endif
  65. };
  66. }