2
0

GlobalSymbolRegistry.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System.Diagnostics.CodeAnalysis;
  2. namespace Jint.Native.Symbol;
  3. public sealed class GlobalSymbolRegistry
  4. {
  5. public static readonly JsSymbol AsyncIterator = new JsSymbol("Symbol.asyncIterator");
  6. public static readonly JsSymbol HasInstance = new JsSymbol("Symbol.hasInstance");
  7. public static readonly JsSymbol IsConcatSpreadable = new JsSymbol("Symbol.isConcatSpreadable");
  8. public static readonly JsSymbol Iterator = new JsSymbol("Symbol.iterator");
  9. public static readonly JsSymbol Match = new JsSymbol("Symbol.match");
  10. public static readonly JsSymbol MatchAll = new JsSymbol("Symbol.matchAll");
  11. public static readonly JsSymbol Replace = new JsSymbol("Symbol.replace");
  12. public static readonly JsSymbol Search = new JsSymbol("Symbol.search");
  13. public static readonly JsSymbol Species = new JsSymbol("Symbol.species");
  14. public static readonly JsSymbol Split = new JsSymbol("Symbol.split");
  15. public static readonly JsSymbol ToPrimitive = new JsSymbol("Symbol.toPrimitive");
  16. public static readonly JsSymbol ToStringTag = new JsSymbol("Symbol.toStringTag");
  17. public static readonly JsSymbol Unscopables = new JsSymbol("Symbol.unscopables");
  18. // engine-specific created by scripts
  19. private Dictionary<JsValue, JsSymbol>? _customSymbolLookup;
  20. internal bool TryGetSymbol(JsValue key, [NotNullWhen(true)] out JsSymbol? symbol)
  21. {
  22. symbol = null;
  23. return _customSymbolLookup != null
  24. && _customSymbolLookup.TryGetValue(key, out symbol);
  25. }
  26. internal void Add(JsSymbol symbol)
  27. {
  28. _customSymbolLookup ??= new Dictionary<JsValue, JsSymbol>();
  29. _customSymbolLookup[symbol._value] = symbol;
  30. }
  31. internal static JsSymbol CreateSymbol(JsValue description)
  32. {
  33. return new JsSymbol(description);
  34. }
  35. internal bool ContainsCustom(JsValue value)
  36. {
  37. return value is JsSymbol symbol && _customSymbolLookup?.ContainsKey(symbol._value) == true;
  38. }
  39. }