PrivateEnvironmentRecord.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 List<PrivateName> _names = new List<PrivateName>();
  11. private readonly struct PrivateName
  12. {
  13. public PrivateName(string name, string description)
  14. {
  15. Name = name;
  16. Description = description;
  17. }
  18. public readonly string Name;
  19. public readonly string Description;
  20. }
  21. public PrivateEnvironmentRecord(PrivateEnvironmentRecord outerPrivEnv)
  22. {
  23. _outerPrivateEnvironment = outerPrivEnv;
  24. }
  25. /// <summary>
  26. /// https://tc39.es/ecma262/#sec-resolve-private-identifier
  27. /// </summary>
  28. public string ResolvePrivateIdentifier(string identifier)
  29. {
  30. var names = _names;
  31. foreach (var privateName in names)
  32. {
  33. if (privateName.Description == identifier)
  34. {
  35. return privateName.Name;
  36. }
  37. }
  38. return _outerPrivateEnvironment.ResolvePrivateIdentifier(identifier);
  39. }
  40. }
  41. }