public static Object unshift(Object thisob, params Object[] args)
{
if (args == null || args.Length == 0)
{
return(thisob);
}
if (thisob is ArrayObject)
{
return(((ArrayObject)thisob).Unshift(args));
}
uint oldLength = Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length"));
long newLength = oldLength + args.Length;
LateBinding.SetMemberValue(thisob, "length", newLength);
// shift the array
for (long i = oldLength - 1; i >= 0; i--)
{
Object val = LateBinding.GetValueAtIndex(thisob, (ulong)i);
if (val is Missing)
{
LateBinding.DeleteValueAtIndex(thisob, (ulong)(i + args.Length));
}
else
{
LateBinding.SetValueAtIndex(thisob, (ulong)(i + args.Length), val);
}
}
// copy the input args
for (uint i = 0; i < args.Length; i++)
{
LateBinding.SetValueAtIndex(thisob, i, args[i]);
}
return(thisob);
}