public static bool hasOwnProperty(object thisob, object name) { string str = Microsoft.JScript.Convert.ToString(name); if (thisob is ArrayObject) { long num = ArrayObject.Array_index_for(str); if (num >= 0L) { object valueAtIndex = ((ArrayObject)thisob).GetValueAtIndex((uint)num); return((valueAtIndex != null) && (valueAtIndex != Microsoft.JScript.Missing.Value)); } } if (!(thisob is JSObject)) { return(!(LateBinding.GetMemberValue(thisob, str) is Microsoft.JScript.Missing)); } MemberInfo[] member = ((JSObject)thisob).GetMember(str, BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly); int length = member.Length; if (length <= 1) { if (length < 1) { return(false); } if (member[0] is JSPrototypeField) { return(!(((JSPrototypeField)member[0]).value is Microsoft.JScript.Missing)); } } return(true); }
public static object unshift(object thisob, params object[] args) { if ((args != null) && (args.Length != 0)) { if (thisob is ArrayObject) { return(((ArrayObject)thisob).Unshift(args)); } uint num = Microsoft.JScript.Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); long num2 = num + args.Length; LateBinding.SetMemberValue(thisob, "length", num2); for (long i = num - 1; i >= 0L; i -= 1L) { object valueAtIndex = LateBinding.GetValueAtIndex(thisob, (ulong)i); if (valueAtIndex is Missing) { LateBinding.DeleteValueAtIndex(thisob, (ulong)(i + args.Length)); } else { LateBinding.SetValueAtIndex(thisob, (ulong)(i + args.Length), valueAtIndex); } } for (uint j = 0; j < args.Length; j++) { LateBinding.SetValueAtIndex(thisob, (ulong)j, args[j]); } } return(thisob); }
internal static string Join(object thisob, string separator, bool localize) { StringBuilder builder = new StringBuilder(); uint num = Microsoft.JScript.Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); if (num > 0x7fffffff) { throw new JScriptException(JSError.OutOfMemory); } if (num > builder.Capacity) { builder.Capacity = (int)num; } for (uint i = 0; i < num; i++) { object valueAtIndex = LateBinding.GetValueAtIndex(thisob, (ulong)i); if ((valueAtIndex != null) && !(valueAtIndex is Missing)) { if (localize) { builder.Append(Microsoft.JScript.Convert.ToLocaleString(valueAtIndex)); } else { builder.Append(Microsoft.JScript.Convert.ToString(valueAtIndex)); } } if (i < (num - 1)) { builder.Append(separator); } } return(builder.ToString()); }
public static Object shift(Object thisob) { Object res = null; if (thisob is ArrayObject) { return(((ArrayObject)thisob).Shift()); } uint length = Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); if (length == 0) { LateBinding.SetMemberValue(thisob, "length", 0); return(res); } res = LateBinding.GetValueAtIndex(thisob, 0); for (uint i = 1; i < length; i++) { Object val = LateBinding.GetValueAtIndex(thisob, i); if (val is Missing) { LateBinding.DeleteValueAtIndex(thisob, i - 1); } else { LateBinding.SetValueAtIndex(thisob, i - 1, val); } } LateBinding.DeleteValueAtIndex(thisob, length - 1); LateBinding.SetMemberValue(thisob, "length", length - 1); return(res); }
internal static String Join(Object thisob, String separator, bool localize) { StringBuilder str = new StringBuilder(); uint thisLength = Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); for (uint i = 0; i < thisLength; i++) { Object value = LateBinding.GetValueAtIndex(thisob, i); if (value != null && !(value is Missing)) { if (localize) { str.Append(Convert.ToLocaleString(value)); } else { str.Append(Convert.ToString(value)); } } if (i < thisLength - 1) { str.Append(separator); } } return(str.ToString()); }
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); }
public static object shift(object thisob) { object valueAtIndex = null; if (thisob is ArrayObject) { return(((ArrayObject)thisob).Shift()); } uint num = Microsoft.JScript.Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); if (num == 0) { LateBinding.SetMemberValue(thisob, "length", 0); return(valueAtIndex); } valueAtIndex = LateBinding.GetValueAtIndex(thisob, 0L); for (uint i = 1; i < num; i++) { object obj3 = LateBinding.GetValueAtIndex(thisob, (ulong)i); if (obj3 is Missing) { LateBinding.DeleteValueAtIndex(thisob, (ulong)(i - 1)); } else { LateBinding.SetValueAtIndex(thisob, (ulong)(i - 1), obj3); } } LateBinding.DeleteValueAtIndex(thisob, (ulong)(num - 1)); LateBinding.SetMemberValue(thisob, "length", num - 1); return(valueAtIndex); }
internal static String Join(Object thisob, String separator, bool localize) { StringBuilder str = new StringBuilder(); uint thisLength = Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); if (thisLength > int.MaxValue) { throw new JScriptException(JSError.OutOfMemory); } // Small optimization so we're not doing a bunch of reallocs for large arrays. if (thisLength > str.Capacity) { str.Capacity = (int)thisLength; } for (uint i = 0; i < thisLength; i++) { Object value = LateBinding.GetValueAtIndex(thisob, i); if (value != null && !(value is Missing)) { if (localize) { str.Append(Convert.ToLocaleString(value)); } else { str.Append(Convert.ToString(value)); } } if (i < thisLength - 1) { str.Append(separator); } } return(str.ToString()); }
public static bool hasOwnProperty(Object thisob, Object name) { String nameStr = Convert.ToString(name); if (thisob is ArrayObject) { long index = ArrayObject.Array_index_for(nameStr); if (index >= 0) { Object ob = ((ArrayObject)thisob).GetValueAtIndex((uint)index); return(ob != null && ob != Missing.Value); } } if (thisob is JSObject) { MemberInfo[] members = ((JSObject)thisob).GetMember(nameStr, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly); int n = members.Length; if (n > 1) { return(true); } if (n < 1) { return(false); } if (members[0] is JSPrototypeField) { //Do not count it as an "own" property unless it has been written to return(!(((JSPrototypeField)members[0]).value is Missing)); } return(true); } return(!(LateBinding.GetMemberValue(thisob, nameStr) is Missing)); }
internal virtual Object GetMemberValue(String name) { MemberInfo[] members = this.GetMember(name, BindingFlags.Instance | BindingFlags.Public); if (members.Length == 0) { return(Missing.Value); } return(LateBinding.GetMemberValue(this, name, LateBinding.SelectMember(members), members)); }
internal virtual object GetMemberValue(string name) { MemberInfo[] member = this.GetMember(name, BindingFlags.Public | BindingFlags.Instance); if (member.Length == 0) { return(Microsoft.JScript.Missing.Value); } return(LateBinding.GetMemberValue(this, name, LateBinding.SelectMember(member), member)); }
public static Object reverse(Object thisob) { uint thisLength = Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); uint halfSize = thisLength / 2; for (uint low = 0, high = thisLength - 1; low < halfSize; low++, high--) { LateBinding.SwapValues(thisob, low, high); } return(thisob); }
public static ArrayObject slice(Object thisob, VsaEngine engine, double start, Object end) { ArrayObject array = engine.GetOriginalArrayConstructor().Construct(); uint length = Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); // compute the start index long startIndex = Runtime.DoubleToInt64(Convert.ToInteger(start)); if (startIndex < 0) { startIndex = length + startIndex; if (startIndex < 0) { startIndex = 0; } } else if (startIndex > length) { startIndex = length; } // compute the end index long endIndex = length; if (end != null && !(end is Missing)) { endIndex = Runtime.DoubleToInt64(Convert.ToInteger(end)); if (endIndex < 0) { endIndex = length + endIndex; if (endIndex < 0) { endIndex = 0; } } else if (endIndex > length) { endIndex = length; } } // slice if (endIndex > startIndex) { array.length = endIndex - startIndex; for (ulong i = (ulong)startIndex, j = 0; i < (ulong)endIndex; i++, j++) { Object val = LateBinding.GetValueAtIndex(thisob, i); if (!(val is Missing)) { LateBinding.SetValueAtIndex(array, j, val); } } } return(array); }
public static ArrayObject slice(object thisob, VsaEngine engine, double start, object end) { ArrayObject obj2 = engine.GetOriginalArrayConstructor().Construct(); uint num = Microsoft.JScript.Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); long num2 = Runtime.DoubleToInt64(Microsoft.JScript.Convert.ToInteger(start)); if (num2 < 0L) { num2 = num + num2; if (num2 < 0L) { num2 = 0L; } } else if (num2 > num) { num2 = num; } long num3 = num; if ((end != null) && !(end is Missing)) { num3 = Runtime.DoubleToInt64(Microsoft.JScript.Convert.ToInteger(end)); if (num3 < 0L) { num3 = num + num3; if (num3 < 0L) { num3 = 0L; } } else if (num3 > num) { num3 = num; } } if (num3 > num2) { obj2.length = num3 - num2; ulong index = (ulong)num2; for (ulong i = 0L; index < num3; i += (ulong)1L) { object valueAtIndex = LateBinding.GetValueAtIndex(thisob, index); if (!(valueAtIndex is Missing)) { LateBinding.SetValueAtIndex(obj2, i, valueAtIndex); } index += (ulong)1L; } } return(obj2); }
public static long push(Object thisob, params Object[] args) { uint length = Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); for (uint i = 0; i < args.Length; i++) { LateBinding.SetValueAtIndex(thisob, i + (ulong)length, args[i]); } long newLength = length + args.Length; LateBinding.SetMemberValue(thisob, "length", newLength); return(newLength); }
public static object reverse(object thisob) { uint num = Microsoft.JScript.Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); uint num2 = num / 2; uint left = 0; for (uint i = num - 1; left < num2; i--) { LateBinding.SwapValues(thisob, left, i); left++; } return(thisob); }
public static long push(object thisob, params object[] args) { uint num = Microsoft.JScript.Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); for (uint i = 0; i < args.Length; i++) { LateBinding.SetValueAtIndex(thisob, i + num, args[i]); } long num3 = num + args.Length; LateBinding.SetMemberValue(thisob, "length", num3); return(num3); }
public static string toString(object thisob) { if (!(thisob is ErrorObject)) { return(thisob.ToString()); } string message = ((ErrorObject)thisob).Message; if (message.Length == 0) { return(LateBinding.GetMemberValue(thisob, "name").ToString()); } return(LateBinding.GetMemberValue(thisob, "name").ToString() + ": " + message); }
public Object GetMemberValue(String name, int lexlevel) { if (lexlevel <= 0) { return(Missing.Value); } Object result = LateBinding.GetMemberValue(this.namedItem, name); if (!(result is Missing)) { return(result); } return(((IActivationObject)parent).GetMemberValue(name, lexlevel - 1)); }
public object GetMemberValue(string name, int lexlevel) { if (lexlevel <= 0) { return(Microsoft.JScript.Missing.Value); } object memberValue = LateBinding.GetMemberValue(this.namedItem, name); if (memberValue is Microsoft.JScript.Missing) { return(((IActivationObject)base.parent).GetMemberValue(name, lexlevel - 1)); } return(memberValue); }
public static Object pop(Object thisob) { uint thisLength = Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); if (thisLength == 0) { LateBinding.SetMemberValue(thisob, "length", 0); return(null); } Object result = LateBinding.GetValueAtIndex(thisob, thisLength - 1); LateBinding.DeleteValueAtIndex(thisob, thisLength - 1); LateBinding.SetMemberValue(thisob, "length", thisLength - 1); return(result); }
public static object pop(object thisob) { uint num = Microsoft.JScript.Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); if (num == 0) { LateBinding.SetMemberValue(thisob, "length", 0); return(null); } object valueAtIndex = LateBinding.GetValueAtIndex(thisob, (ulong)(num - 1)); LateBinding.DeleteValueAtIndex(thisob, (ulong)(num - 1)); LateBinding.SetMemberValue(thisob, "length", num - 1); return(valueAtIndex); }
public static Object sort(Object thisob, Object function) { ScriptFunction func = null; if (function is ScriptFunction) { func = (ScriptFunction)function; } uint length = Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); if (thisob is ArrayObject) { ((ArrayObject)thisob).Sort(func); } else if (length <= Int32.MaxValue) { QuickSort qs = new QuickSort(thisob, func); qs.SortObject(0, length); } return(thisob); }
public static object sort(object thisob, object function) { ScriptFunction compareFn = null; if (function is ScriptFunction) { compareFn = (ScriptFunction)function; } uint num = Microsoft.JScript.Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); if (thisob is ArrayObject) { ((ArrayObject)thisob).Sort(compareFn); return(thisob); } if (num <= 0x7fffffff) { new QuickSort(thisob, compareFn).SortObject(0L, (long)num); } return(thisob); }
private MemberInfo[] GetMember(string name, BindingFlags bindingAttr, bool wrapMembers) { MemberInfo[] members = this.GetLocalMember(name, bindingAttr, wrapMembers); if (members.Length <= 0) { if (base.parent == null) { return(new MemberInfo[0]); } if (base.parent is JSObject) { members = ((JSObject)base.parent).GetMember(name, bindingAttr, true); wrapMembers = false; } else { members = base.parent.GetMember(name, bindingAttr); } foreach (MemberInfo info in members) { if (info.MemberType == MemberTypes.Field) { FieldInfo info2 = (FieldInfo)info; JSMemberField field = info as JSMemberField; if (field != null) { if (!field.IsStatic) { JSGlobalField field2 = new JSGlobalField(this, name, field.value, FieldAttributes.Public); this.NameTable[name] = field2; this.field_table.Add(field2); info2 = field; } } else { info2 = new JSPrototypeField(base.parent, (FieldInfo)info); if (!this.noExpando) { this.NameTable[name] = info2; this.field_table.Add(info2); } } return(new MemberInfo[] { info2 }); } if (!this.noExpando && (info.MemberType == MemberTypes.Method)) { FieldInfo info3 = new JSPrototypeField(base.parent, new JSGlobalField(this, name, LateBinding.GetMemberValue(base.parent, name, null, members), FieldAttributes.InitOnly | FieldAttributes.Public)); this.NameTable[name] = info3; this.field_table.Add(info3); return(new MemberInfo[] { info3 }); } } if (wrapMembers) { return(ScriptObject.WrapMembers(members, base.parent)); } } return(members); }
private MemberInfo[] GetMember(String name, BindingFlags bindingAttr, bool wrapMembers) { MemberInfo[] members = this.GetLocalMember(name, bindingAttr, wrapMembers); if (members.Length > 0) { return(members); } if (this.parent != null) { if (this.parent is JSObject) { members = ((JSObject)this.parent).GetMember(name, bindingAttr, true); wrapMembers = false; } else { members = this.parent.GetMember(name, bindingAttr); } foreach (MemberInfo mem in members) { if (mem.MemberType == MemberTypes.Field) { FieldInfo field = (FieldInfo)mem; JSMemberField mfield = mem as JSMemberField; if (mfield != null) //This can only happen when running in the Evaluator { if (!mfield.IsStatic) { JSGlobalField gfield = new JSGlobalField(this, name, mfield.value, FieldAttributes.Public); this.NameTable[name] = gfield; this.field_table.Add(gfield); field = mfield; } } else { field = new JSPrototypeField(this.parent, (FieldInfo)mem); if (!this.noExpando) { this.NameTable[name] = field; this.field_table.Add(field); } } return(new MemberInfo[] { field }); } if (!this.noExpando) { if (mem.MemberType == MemberTypes.Method) { FieldInfo field = new JSPrototypeField(this.parent, new JSGlobalField(this, name, LateBinding.GetMemberValue(this.parent, name, null, members), FieldAttributes.Public | FieldAttributes.InitOnly)); this.NameTable[name] = field; this.field_table.Add(field); return(new MemberInfo[] { field }); } } } if (wrapMembers) { return(ScriptObject.WrapMembers(members, this.parent)); } else { return(members); } } return(new MemberInfo[0]); }
public static ArrayObject splice(object thisob, VsaEngine engine, double start, double deleteCnt, params object[] args) { uint oldLength = Microsoft.JScript.Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); long num2 = Runtime.DoubleToInt64(Microsoft.JScript.Convert.ToInteger(start)); if (num2 < 0L) { num2 = oldLength + num2; if (num2 < 0L) { num2 = 0L; } } else if (num2 > oldLength) { num2 = oldLength; } long num3 = Runtime.DoubleToInt64(Microsoft.JScript.Convert.ToInteger(deleteCnt)); if (num3 < 0L) { num3 = 0L; } else if (num3 > (oldLength - num2)) { num3 = oldLength - num2; } long num4 = (oldLength + args.Length) - num3; ArrayObject outArray = engine.GetOriginalArrayConstructor().Construct(); outArray.length = num3; if (thisob is ArrayObject) { ((ArrayObject)thisob).Splice((uint)num2, (uint)num3, args, outArray, oldLength, (uint)num4); return(outArray); } for (ulong i = 0L; i < num3; i += (ulong)1L) { outArray.SetValueAtIndex((uint)i, LateBinding.GetValueAtIndex(thisob, i + ((ulong)num2))); } long num6 = (oldLength - num2) - num3; if (num4 < oldLength) { for (long k = 0L; k < num6; k += 1L) { LateBinding.SetValueAtIndex(thisob, (ulong)((k + num2) + args.Length), LateBinding.GetValueAtIndex(thisob, (ulong)((k + num2) + num3))); } LateBinding.SetMemberValue(thisob, "length", num4); } else { LateBinding.SetMemberValue(thisob, "length", num4); for (long m = num6 - 1L; m >= 0L; m -= 1L) { LateBinding.SetValueAtIndex(thisob, (ulong)((m + num2) + args.Length), LateBinding.GetValueAtIndex(thisob, (ulong)((m + num2) + num3))); } } int num9 = (args == null) ? 0 : args.Length; for (uint j = 0; j < num9; j++) { LateBinding.SetValueAtIndex(thisob, (ulong)(j + num2), args[j]); } return(outArray); }
public static ArrayObject splice(Object thisob, VsaEngine engine, double start, double deleteCnt, params Object[] args) { uint oldLength = Convert.ToUint32(LateBinding.GetMemberValue(thisob, "length")); // compute the start index long startIndex = Runtime.DoubleToInt64(Convert.ToInteger(start)); if (startIndex < 0) { startIndex = oldLength + startIndex; if (startIndex < 0) { startIndex = 0; } } else if (startIndex > oldLength) { startIndex = oldLength; } // compute the number of items to delete long deleteCount = Runtime.DoubleToInt64(Convert.ToInteger(deleteCnt)); if (deleteCount < 0) { deleteCount = 0; } else if (deleteCount > oldLength - startIndex) { deleteCount = oldLength - startIndex; } long newLength = oldLength + args.Length - deleteCount; // create an array for the result ArrayObject result = engine.GetOriginalArrayConstructor().Construct(); result.length = deleteCount; // special case array objects (nice speedup if dense) if (thisob is ArrayObject) { ((ArrayObject)thisob).Splice((uint)startIndex, (uint)deleteCount, args, result, (uint)oldLength, (uint)newLength); return(result); } // copy the deleted items to the result array for (ulong i = 0; i < (ulong)deleteCount; i++) { result.SetValueAtIndex((uint)i, LateBinding.GetValueAtIndex(thisob, i + (ulong)startIndex)); } // shift the remaining elements left or right long n = oldLength - startIndex - deleteCount; if (newLength < oldLength) { for (long i = 0; i < n; i++) { LateBinding.SetValueAtIndex(thisob, (ulong)(i + startIndex + args.Length), LateBinding.GetValueAtIndex(thisob, (ulong)(i + startIndex + deleteCount))); } LateBinding.SetMemberValue(thisob, "length", newLength); } else { LateBinding.SetMemberValue(thisob, "length", newLength); for (long i = n - 1; i >= 0; i--) { LateBinding.SetValueAtIndex(thisob, (ulong)(i + startIndex + args.Length), LateBinding.GetValueAtIndex(thisob, (ulong)(i + startIndex + deleteCount))); } } // splice in the arguments int m = args == null ? 0 : args.Length; for (uint i = 0; i < m; i++) { LateBinding.SetValueAtIndex(thisob, i + (ulong)startIndex, args[i]); } return(result); }