PrivateEnvironment.cs 945 B

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