PrivateEnvironment.cs 926 B

123456789101112131415161718192021222324252627282930313233
  1. using Jint.Native;
  2. namespace Jint.Runtime.Environments;
  3. /// <summary>
  4. /// https://tc39.es/ecma262/#sec-privateenvironment-records
  5. /// </summary>
  6. internal sealed class PrivateEnvironment
  7. {
  8. public PrivateEnvironment(PrivateEnvironment? outerPrivEnv)
  9. {
  10. OuterPrivateEnvironment = outerPrivEnv;
  11. }
  12. public PrivateEnvironment? OuterPrivateEnvironment { get; }
  13. public Dictionary<PrivateIdentifier, PrivateName> Names { get; } = new();
  14. /// <summary>
  15. /// https://tc39.es/ecma262/#sec-resolve-private-identifier
  16. /// </summary>
  17. public PrivateName? ResolvePrivateIdentifier(string identifier)
  18. {
  19. foreach (var pn in Names)
  20. {
  21. if (string.Equals(pn.Value.Description, identifier, StringComparison.Ordinal))
  22. {
  23. return pn.Value;
  24. }
  25. }
  26. return OuterPrivateEnvironment?.ResolvePrivateIdentifier(identifier);
  27. }
  28. }