private static bool InterceptArrayIndex(object target, string funcName, object[] args, out object result)
{
if (target is Array)
{
if (funcName == IndexerGetterName)
{
if (args.Length != 1)
throw ErrorFactory.CreateClrError("Invalid number of indexer arguments");
int index = args[0] is BikeNumber
? (int) ((BikeNumber) args[0]).Value
: (int) (decimal) args[0];
result = ((Array)target).GetValue(index);
return true;
}
if (funcName == IndexerSetterName)
{
if (args.Length != 2)
throw ErrorFactory.CreateClrError("Invalid number of indexer arguments");
int index = args[0] is BikeNumber
? (int)((BikeNumber)args[0]).Value
: (int)(decimal)args[0];
object value = InterpretationContext.Instance.Interpreter.MarshallToClr(args[1]);
((Array)target).SetValue(value, index);
result = null;
return true;
}
}
result = null;
return false;
}