namespace Jint.Runtime.Environments
{
///
/// https://tc39.es/ecma262/#sec-privateenvironment-records
///
internal sealed class PrivateEnvironmentRecord
{
private readonly PrivateEnvironmentRecord? _outerPrivateEnvironment;
private readonly List _names = new();
private readonly record struct PrivateName(string Name, string Description);
public PrivateEnvironmentRecord(PrivateEnvironmentRecord? outerPrivEnv)
{
_outerPrivateEnvironment = outerPrivEnv;
}
///
/// https://tc39.es/ecma262/#sec-resolve-private-identifier
///
public string? ResolvePrivateIdentifier(string identifier)
{
var names = _names;
foreach (var privateName in names)
{
if (privateName.Description == identifier)
{
return privateName.Name;
}
}
return _outerPrivateEnvironment?.ResolvePrivateIdentifier(identifier);
}
}
}