public static bool duk_get_var(IntPtr ctx, int idx, out object o)
        {
            var jstype = DuktapeDLL.duk_get_type(ctx, idx);

            switch (jstype)
            {
            case duk_type_t.DUK_TYPE_BOOLEAN:     /* ECMAScript boolean: 0 or 1 */
                {
                    o = DuktapeDLL.duk_get_boolean(ctx, idx);
                    return(true);
                }

            case duk_type_t.DUK_TYPE_NUMBER:     /* ECMAScript number: double */
            {
                o = DuktapeDLL.duk_get_number(ctx, idx);
                return(true);
            }

            case duk_type_t.DUK_TYPE_STRING:     /* ECMAScript string: CESU-8 / extended UTF-8 encoded */
            {
                o = DuktapeDLL.duk_get_string(ctx, idx);
                return(true);
            }

            case duk_type_t.DUK_TYPE_OBJECT:     /* ECMAScript object: includes objects, arrays, functions, threads */
            {
                return(duk_get_cached_object(ctx, idx, out o));
            }

            case duk_type_t.DUK_TYPE_BUFFER:     /* fixed or dynamic, garbage collected byte buffer */
            {
                uint length;
                var  pointer = DuktapeDLL.duk_unity_get_buffer_data(ctx, idx, out length);
                var  buffer  = new byte[length];
                o = buffer;
                Marshal.Copy(pointer, buffer, 0, (int)length);
                return(true);
            }

            case duk_type_t.DUK_TYPE_POINTER:        /* raw void pointer */
            case duk_type_t.DUK_TYPE_LIGHTFUNC:      /* lightweight function pointer */
                throw new NotImplementedException();

            case duk_type_t.DUK_TYPE_NONE:        /* no value, e.g. invalid index */
                o = null;
                return(false);

            case duk_type_t.DUK_TYPE_UNDEFINED:   /* ECMAScript undefined */
            case duk_type_t.DUK_TYPE_NULL:        /* ECMAScript null */
                o = null;
                return(true);
            }

            o = null;
            return(false);
        }
Example #2
0
        public static int SetTimeout(IntPtr ctx)
        {
            DuktapeFunction fn;
            var             idx = _GetTimerFunction(ctx, out fn);

            if (idx < 0)
            {
                var id = DuktapeRunner.SetTimeout(fn, (float)DuktapeDLL.duk_get_number(ctx, 1));
                DuktapeDLL.duk_push_int(ctx, id);
                return(1);
            }
            return(DuktapeDLL.duk_generic_error(ctx, "invalid arg " + idx));
        }
Example #3
0
        public double GetDoubleValue(int index)
        {
            var ctx = _context.rawValue;

            this.Push(ctx);
            DuktapeDLL.duk_get_prop_index(ctx, -1, (uint)index);
            var res = 0.0;

            if (DuktapeDLL.duk_is_number(ctx, -1))
            {
                res = DuktapeDLL.duk_get_number(ctx, -1);
            }
            DuktapeDLL.duk_pop_2(ctx);
            return(res);
        }
Example #4
0
        public float GetFloatValue(int index)
        {
            var ctx = _context.rawValue;

            this.Push(ctx);
            DuktapeDLL.duk_get_prop_index(ctx, -1, (uint)index);
            var res = 0f;

            if (DuktapeDLL.duk_is_number(ctx, -1))
            {
                res = (float)DuktapeDLL.duk_get_number(ctx, -1);
            }
            DuktapeDLL.duk_pop_2(ctx);
            return(res);
        }
Example #5
0
 public static bool duk_get_primitive_array(IntPtr ctx, int idx, out double[] o)
 {
     if (DuktapeDLL.duk_is_array(ctx, idx))
     {
         var length = DuktapeDLL.duk_unity_get_length(ctx, idx);
         var nidx   = DuktapeDLL.duk_normalize_index(ctx, idx);
         o = new double[length];
         for (var i = 0U; i < length; i++)
         {
             DuktapeDLL.duk_get_prop_index(ctx, idx, i);
             double e;
             e    = DuktapeDLL.duk_get_number(ctx, -1); // duk_get_primitive(ctx, -1, out e);
             o[i] = e;
             DuktapeDLL.duk_pop(ctx);
         }
         return(true);
     }
     duk_get_classvalue <double[]>(ctx, idx, out o);
     return(true);
 }
Example #6
0
 public static bool duk_get_primitive(IntPtr ctx, int idx, out double o)
 {
     o = DuktapeDLL.duk_get_number(ctx, idx); // no check
     return(true);
 }
Example #7
0
 public static bool duk_get_primitive(IntPtr ctx, int idx, out ulong o)
 {
     o = (ulong)DuktapeDLL.duk_get_number(ctx, idx); // no check, dangerous
     return(true);
 }