PrivateEnvironmentRecord.cs 1.1 KB

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