in ClearScript/HostItem.cs [1003:1134]
private object InvokePropertyBagMember(string name, BindingFlags invokeFlags, object[] args, object[] bindArgs)
{
if (invokeFlags.HasFlag(BindingFlags.InvokeMethod))
{
object value;
if (name == SpecialMemberNames.Default)
{
if (invokeFlags.HasFlag(BindingFlags.GetField))
{
if (args.Length < 1)
{
return TargetPropertyBag;
}
if (args.Length == 1)
{
return TargetPropertyBag.TryGetValue(Convert.ToString(args[0]), out value) ? value : Nonexistent.Value;
}
}
throw new NotSupportedException("The object does not support the requested invocation operation");
}
if (name == SpecialMemberNames.NewEnum)
{
return CreateEnumerator(TargetPropertyBag);
}
if (name == SpecialMemberNames.NewAsyncEnum)
{
return CreateAsyncEnumerator(TargetPropertyBag);
}
if (!TargetPropertyBag.TryGetValue(name, out value))
{
throw new MissingMemberException(MiscHelpers.FormatInvariant("The object has no property named '{0}'", name));
}
if (InvokeHelpers.TryInvokeObject(this, value, invokeFlags, args, bindArgs, true, out var result))
{
return result;
}
if (invokeFlags.HasFlag(BindingFlags.GetField))
{
if (args.Length < 1)
{
return value;
}
if (args.Length == 1)
{
if (value == null)
{
throw new InvalidOperationException("Cannot invoke a null property value");
}
return ((HostItem)Wrap(Engine, value)).InvokeMember(SpecialMemberNames.Default, invokeFlags, args, bindArgs, null, true);
}
}
throw new NotSupportedException("The object does not support the requested invocation operation");
}
if (invokeFlags.HasFlag(BindingFlags.GetField))
{
if (name == SpecialMemberNames.Default)
{
if (args.Length == 1)
{
return TargetPropertyBag[Convert.ToString(args[0])];
}
throw new InvalidOperationException("Invalid argument count");
}
if (name == SpecialMemberNames.NewEnum)
{
return CreateEnumerator(TargetPropertyBag);
}
if (name == SpecialMemberNames.NewAsyncEnum)
{
return CreateAsyncEnumerator(TargetPropertyBag);
}
if (args.Length < 1)
{
return TargetPropertyBag.TryGetValue(name, out var value) ? value : Nonexistent.Value;
}
throw new InvalidOperationException("Invalid argument count");
}
if (invokeFlags.HasFlag(BindingFlags.SetField))
{
if (name == SpecialMemberNames.Default)
{
if (args.Length == 2)
{
return TargetPropertyBag[Convert.ToString(args[0])] = args[1];
}
throw new InvalidOperationException("Invalid argument count");
}
if (args.Length == 1)
{
return TargetPropertyBag[name] = args[0];
}
if (args.Length == 2)
{
if (TargetPropertyBag.TryGetValue(name, out var value))
{
if (value == null)
{
throw new InvalidOperationException("Cannot invoke a null property value");
}
return ((HostItem)Wrap(Engine, value)).InvokeMember(SpecialMemberNames.Default, invokeFlags, args, bindArgs, null, true);
}
throw new MissingMemberException(MiscHelpers.FormatInvariant("The object has no property named '{0}'", name));
}
throw new InvalidOperationException("Invalid argument count");
}
throw new InvalidOperationException("Invalid member invocation mode");
}