DeclarativeEnvironmentRecord.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System.Collections.Generic;
  2. using Jint.Native;
  3. namespace Jint.Runtime.Environments
  4. {
  5. /// <summary>
  6. /// Represents a declarative environment record
  7. /// http://www.ecma-international.org/ecma-262/5.1/#sec-10.2.1.1
  8. /// </summary>
  9. public sealed class DeclarativeEnvironmentRecord : EnvironmentRecord
  10. {
  11. private readonly IDictionary<string, object> _bindings = new Dictionary<string, object>();
  12. public override bool HasBinding(string name)
  13. {
  14. return _bindings.ContainsKey(name);
  15. }
  16. public override void CreateMutableBinding(string name, bool canBeDeleted = true)
  17. {
  18. _bindings.Add(name, Undefined.Instance);
  19. }
  20. public override void SetMutableBinding(string name, object value, bool strict)
  21. {
  22. _bindings[name] = value;
  23. }
  24. public override object GetBindingValue(string name, bool strict)
  25. {
  26. return _bindings[name];
  27. }
  28. public override bool DeleteBinding(string name)
  29. {
  30. _bindings.Remove(name);
  31. return true;
  32. }
  33. public override object ImplicitThisValue()
  34. {
  35. return Undefined.Instance;
  36. }
  37. /// <summary>
  38. /// Creates a new but uninitialised immutable binding in an environment record.
  39. /// </summary>
  40. /// <param name="name">The identifier of the binding.</param>
  41. public void CreateImmutableBinding(string name)
  42. {
  43. CreateMutableBinding(name);
  44. }
  45. /// <summary>
  46. /// Sets the value of an already existing but uninitialised immutable binding in an environment record.
  47. /// </summary>
  48. /// <param name="name">The identifier of the binding.</param>
  49. /// <param name="value">The value of the binding.</param>
  50. public void InitializeImmutableBinding(string name, object value)
  51. {
  52. SetMutableBinding(name, value, false);
  53. }
  54. }
  55. }