using System.Collections.Generic;
using Jint.Native;
namespace Jint.Runtime.Environments
{
///
/// Represents a declarative environment record
/// http://www.ecma-international.org/ecma-262/5.1/#sec-10.2.1.1
///
public sealed class DeclarativeEnvironmentRecord : EnvironmentRecord
{
private readonly IDictionary _bindings = new Dictionary();
public override bool HasBinding(string name)
{
return _bindings.ContainsKey(name);
}
public override void CreateMutableBinding(string name, bool canBeDeleted = true)
{
_bindings.Add(name, Undefined.Instance);
}
public override void SetMutableBinding(string name, object value, bool strict)
{
_bindings[name] = value;
}
public override object GetBindingValue(string name, bool strict)
{
return _bindings[name];
}
public override bool DeleteBinding(string name)
{
_bindings.Remove(name);
return true;
}
public override object ImplicitThisValue()
{
return Undefined.Instance;
}
///
/// Creates a new but uninitialised immutable binding in an environment record.
///
/// The identifier of the binding.
public void CreateImmutableBinding(string name)
{
CreateMutableBinding(name);
}
///
/// Sets the value of an already existing but uninitialised immutable binding in an environment record.
///
/// The identifier of the binding.
/// The value of the binding.
public void InitializeImmutableBinding(string name, object value)
{
SetMutableBinding(name, value, false);
}
}
}