PrivateEnvironmentRecord.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using System.Collections.Generic;
  2. namespace Jint.Runtime.Environments
  3. {
  4. /// <summary>
  5. /// https://tc39.es/ecma262/#sec-privateenvironment-records
  6. /// </summary>
  7. internal sealed class PrivateEnvironmentRecord
  8. {
  9. private readonly PrivateEnvironmentRecord _outerPrivateEnvironment;
  10. private readonly List<PrivateName> _names = new();
  11. private readonly record struct PrivateName(string Name, string Description);
  12. public PrivateEnvironmentRecord(PrivateEnvironmentRecord outerPrivEnv)
  13. {
  14. _outerPrivateEnvironment = outerPrivEnv;
  15. }
  16. /// <summary>
  17. /// https://tc39.es/ecma262/#sec-resolve-private-identifier
  18. /// </summary>
  19. public string ResolvePrivateIdentifier(string identifier)
  20. {
  21. var names = _names;
  22. foreach (var privateName in names)
  23. {
  24. if (privateName.Description == identifier)
  25. {
  26. return privateName.Name;
  27. }
  28. }
  29. return _outerPrivateEnvironment.ResolvePrivateIdentifier(identifier);
  30. }
  31. }
  32. }