Пример #1
0
        private static int _GetTimerFunction(IntPtr ctx, out DuktapeFunction fn)
        {
            if (!DuktapeDLL.duk_is_function(ctx, 0))
            {
                fn = null;
                return(0);
            }
            if (!DuktapeDLL.duk_is_number(ctx, 1))
            {
                fn = null;
                return(1);
            }
            var top_index = DuktapeDLL.duk_get_top_index(ctx);

            // Debug.Log($"_GetTimerFunction {top} ?? {DuktapeDLL.duk_get_top(ctx)}");
            DuktapeValue[] argv = null;
            if (top_index > 1)
            {
                argv = new DuktapeValue[top_index - 1];
                for (var i = 2; i <= top_index; i++)
                {
                    DuktapeDLL.duk_dup(ctx, i);
                    var argPtr = DuktapeDLL.duk_get_heapptr(ctx, -1);
                    argv[i - 2] = new DuktapeValue(ctx, DuktapeDLL.duk_unity_ref(ctx), argPtr);
                }
            }
            DuktapeDLL.duk_dup(ctx, 0);
            var fnPtr = DuktapeDLL.duk_get_heapptr(ctx, -1);

            fn = new DuktapeFunction(ctx, DuktapeDLL.duk_unity_ref(ctx), fnPtr, argv);
            return(-1);
        }
Пример #2
0
        public static int Array_Create(IntPtr ctx)
        {
            Type type;
            int  size;

            if (duk_get_type(ctx, 0, out type))
            {
                if (type != null)
                {
                    if (DuktapeDLL.duk_is_number(ctx, 1) && duk_get_primitive(ctx, 1, out size))
                    {
                        var o = Array.CreateInstance(type, size);
                        duk_push_classvalue(ctx, o);
                        return(1);
                    }
                    else
                    {
                        return(DuktapeDLL.duk_generic_error(ctx, "invalid size"));
                    }
                }
                else
                {
                    return(DuktapeDLL.duk_generic_error(ctx, "invalid type"));
                }
            }
            return(DuktapeDLL.duk_generic_error(ctx, "invalid args"));
        }
Пример #3
0
 public static int ClearTimer(IntPtr ctx)
 {
     if (DuktapeDLL.duk_is_number(ctx, 0))
     {
         var id = DuktapeDLL.duk_get_uint(ctx, 0);
         DuktapeDLL.duk_push_boolean(ctx, DuktapeRunner.Clear(id));
         return(1);
     }
     return(0);
 }
Пример #4
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);
        }
Пример #5
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);
        }