RegexPattern.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. struct RegexPattern : FinalizableObject
  16. {
  17. struct UnifiedRep
  18. {
  19. Field(Program*) program;
  20. Field(Matcher*) matcher;
  21. Field(TrigramInfo*) trigramInfo;
  22. };
  23. Field(Js::JavascriptLibrary *) const library;
  24. Field(bool) isLiteral : 1;
  25. Field(bool) isShallowClone : 1;
  26. union Rep
  27. {
  28. Field(UnifiedRep) unified;
  29. Rep() : unified() {}
  30. };
  31. Field(Rep) rep;
  32. RegexPattern(Js::JavascriptLibrary *const library, Program* program, bool isLiteral);
  33. static RegexPattern *New(Js::ScriptContext *scriptContext, Program* program, bool isLiteral);
  34. virtual void Finalize(bool isShutdown) override;
  35. virtual void Dispose(bool isShutdown) override;
  36. virtual void Mark(Recycler *recycler) override { AssertMsg(false, "Mark called on object that isn't TrackableObject"); }
  37. Js::ScriptContext *GetScriptContext() const;
  38. inline bool IsLiteral() const { return isLiteral; }
  39. int NumGroups() const;
  40. bool IsIgnoreCase() const;
  41. bool IsGlobal() const;
  42. bool IsMultiline() const;
  43. bool IsUnicode() const;
  44. bool IsSticky() const;
  45. bool WasLastMatchSuccessful() const;
  46. GroupInfo GetGroup(int groupId) const;
  47. Js::InternalString GetSource() const;
  48. RegexFlags GetFlags() const;
  49. #if ENABLE_REGEX_CONFIG_OPTIONS
  50. void Print(DebugWriter* w);
  51. #endif
  52. RegexPattern *CopyToScriptContext(Js::ScriptContext *scriptContext);
  53. };
  54. }