public override bool HasOwnProperty(string propertyName) { uint index; if (ArrayInstance.IsArrayIndex(propertyName, out index)) { return(index < Length); } return(base.HasOwnProperty(propertyName)); }
public override PropertyDescriptor GetOwnProperty(string propertyName) { uint index; if (ArrayInstance.IsArrayIndex(propertyName, out index) && index < Length) { return(new PropertyDescriptor(Wrap(Get((int)index)), false, true, false)); } return(base.GetOwnProperty(propertyName)); }
internal JToken ConvertBack(JTokenType type, JsValue value) { switch (type) { case JTokenType.Array: if (value.IsArray()) { var array = value.AsArray(); return(new JArray(array.Properties.Where(k => ArrayInstance.IsArrayIndex(new JsValue(k.Key))).Select(kvp => ConvertBack(kvp.Value.Value ?? JsValue.Null)))); } break; case JTokenType.Boolean: if (value.IsBoolean()) { return(new JValue(value.AsBoolean())); } break; case JTokenType.Date: if (value.IsDate()) { return(new JValue(value.AsDate())); } break; case JTokenType.Float: if (value.IsNumber()) { return(new JValue((float)value.AsNumber())); } break; case JTokenType.Integer: if (value.IsNumber()) { return(new JValue((int)value.AsNumber())); } break; case JTokenType.String: if (value.IsString()) { return(JValue.CreateString(value.AsString())); } break; } return(ConvertBack(value)); }
public ValueTask <IObject[]> EvaluateArray(IExecutionContext executionContext, CancellationToken token) { var array = executionContext.Engine().Eval(_program, startNewScope: true).AsArray(); var result = new IObject[array.GetLength()]; foreach (var pair in array.GetOwnProperties()) { if (ArrayInstance.IsArrayIndex(pair.Key, out var index)) { result[index] = new EcmaScriptObject(array.Get(pair.Key)); } } return(new ValueTask <IObject[]>(result)); }
protected override void SetOwnProperty(string propertyName, PropertyDescriptor desc) { uint index; if (ArrayInstance.IsArrayIndex(propertyName, out index) && index < Length) { TWrapper wrapper = null; if (desc.Value.HasValue && !desc.Value.Value.IsNullOrUndefined()) { wrapper = (TWrapper)desc.Value.Value.AsObject(); } Set((int)index, wrapper); } else { base.SetOwnProperty(propertyName, desc); } }