123456789101112131415161718192021222324252627282930313233343536373839404142 |
- using Jint.Native;
- using Jint.Runtime.Environments;
- using Jint.Runtime.Interop;
- namespace Jint.Runtime.Descriptors.Specialized
- {
- internal sealed class ClrAccessDescriptor : PropertyDescriptor
- {
- private readonly DeclarativeEnvironmentRecord _env;
- private readonly Engine _engine;
- private readonly EnvironmentRecord.BindingName _name;
- private GetterFunctionInstance _get;
- private SetterFunctionInstance _set;
- public ClrAccessDescriptor(
- DeclarativeEnvironmentRecord env,
- Engine engine,
- string name)
- : base(value: null, PropertyFlag.Configurable)
- {
- _env = env;
- _engine = engine;
- _name = new EnvironmentRecord.BindingName(name);
- }
- public override JsValue Get => _get ??= new GetterFunctionInstance(_engine, DoGet);
- public override JsValue Set => _set ??= new SetterFunctionInstance(_engine, DoSet);
- private JsValue DoGet(JsValue n)
- {
- return _env.TryGetBinding(_name, false, out var binding, out _)
- ? binding.Value
- : JsValue.Undefined;
- }
- private void DoSet(JsValue n, JsValue o)
- {
- _env.SetMutableBinding(_name.Key.Name, o, true);
- }
- }
- }
|