RegexPattern.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 IsDotAll() const;
  51. bool IsUnicode() const;
  52. bool IsSticky() const;
  53. bool WasLastMatchSuccessful() const;
  54. GroupInfo GetGroup(int groupId) const;
  55. Js::InternalString GetSource() const;
  56. RegexFlags GetFlags() const;
  57. Field(RegExpTestCache*) EnsureTestCache();
  58. static uint GetTestCacheIndex(Js::JavascriptString* str);
  59. #if ENABLE_REGEX_CONFIG_OPTIONS
  60. void Print(DebugWriter* w);
  61. #endif
  62. RegexPattern *CopyToScriptContext(Js::ScriptContext *scriptContext);
  63. #if ENABLE_REGEX_CONFIG_OPTIONS
  64. static void TraceTestCache(bool cacheHit, Js::JavascriptString* input, Js::JavascriptString* cachedValue, bool disabled);
  65. #endif
  66. };
  67. }