Exemplo n.º 1
0
        public override bool HasOwnProperty(string propertyName)
        {
            uint index;

            if (ArrayInstance.IsArrayIndex(propertyName, out index))
            {
                return(index < Length);
            }
            return(base.HasOwnProperty(propertyName));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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);
            }
        }