示例#1
0
        public static JS.Value ManagedToNative(JSContextPtr cx, object value)
        {
            if (value == null)
            {
                return(JS.Value.Null);
            }

            var s = value as string;

            if (s != null)
            {
                var pString = JSAPI.NewStringCopy(cx, s);
                return(new JS.Value(pString));
            }

            var a = value as Array;

            if (a != null)
            {
                var va = new JS.ValueArray((uint)a.Length);
                for (int i = 0, l = a.Length; i < l; i++)
                {
                    va.Elements[i] = ManagedToNative(cx, a.GetValue(i));
                }

                JS.ValueArrayPtr vaPtr = va;
                var pArray             = JSAPI.NewArrayObject(cx, ref vaPtr);
                return(new JS.Value(pArray));
            }

            return((JS.Value)Activator.CreateInstance(typeof(JS.Value), value));
        }
示例#2
0
        private unsafe static JSObjectPtr CreateArrayImpl(
            JSContextPtr context, JS.Value[] contents, uint offset, uint count
            )
        {
            if (count == 0xFFFFFFFF)
            {
                count = (uint)(contents.Length - offset);
            }

            if (
                (count > (contents.Length - offset)) ||
                (offset >= contents.Length)
                )
                throw new ArgumentException("offset/count out of range");

            fixed(JS.Value *pContents = &contents[offset])
            {
                var valueArray = new JS.ValueArrayPtr(count, (IntPtr)pContents);

                return(JSAPI.NewArrayObject(context, ref valueArray));
            }
        }
示例#3
0
 public JSArray(JSContextPtr context, ref JS.ValueArrayPtr contents)
     : this(context, JSAPI.NewArrayObject(context, ref contents))
 {
 }
示例#4
0
 public JSArray(JSContextPtr context, uint length)
     : this(context, JSAPI.NewArrayObject(context, length))
 {
 }