public new ArrayObject CreateInstance(params Object[] args){
ArrayObject arrayObj = new ArrayObject(this.originalPrototype, typeof(ArrayObject));
if (args.Length != 0){
if (args.Length == 1){
Object arg0 = args[0];
IConvertible ic = Convert.GetIConvertible(arg0);
switch (Convert.GetTypeCode(arg0, ic)){
case TypeCode.Char:
case TypeCode.SByte:
case TypeCode.Byte:
case TypeCode.Int16:
case TypeCode.UInt16:
case TypeCode.Int32:
case TypeCode.UInt32:
case TypeCode.Int64:
case TypeCode.UInt64:
case TypeCode.Single:
case TypeCode.Double:
case TypeCode.Decimal:
double d = Convert.ToNumber(arg0, ic);
uint len = Convert.ToUint32(arg0, ic);
if (d != (double)len)
throw new JScriptException(JSError.ArrayLengthConstructIncorrect);
arrayObj.length = len;
return arrayObj;
}
}
if (args.Length == 1 && args[0] is Array){
Array array = (Array)args[0];
if (array.Rank != 1)
throw new JScriptException(JSError.TypeMismatch);
arrayObj.length = array.Length;
for (int i = 0; i < array.Length; i++)
arrayObj.SetValueAtIndex((uint)i, array.GetValue(i));
} else {
arrayObj.length = args.Length;
for (int i = 0; i < args.Length; i++)
arrayObj.SetValueAtIndex((uint)i, args[i]);
}
}
return arrayObj;
}