Пример #1
0
 // always static
 protected static void duk_add_const(IntPtr ctx, string name, string v, int idx)
 {
     idx = DuktapeDLL.duk_normalize_index(ctx, idx);
     DuktapeDLL.duk_push_string(ctx, name);
     DuktapeDLL.duk_push_string(ctx, v);
     DuktapeDLL.duk_def_prop(ctx, idx, DuktapeDLL.DUK_DEFPROP_SET_ENUMERABLE
                             | DuktapeDLL.DUK_DEFPROP_CLEAR_CONFIGURABLE
                             | DuktapeDLL.DUK_DEFPROP_HAVE_VALUE
                             | DuktapeDLL.DUK_DEFPROP_CLEAR_WRITABLE);
 }
Пример #2
0
        protected static void duk_add_property(IntPtr ctx, string name, DuktapeDLL.duk_c_function getter, DuktapeDLL.duk_c_function setter, int idx)
        {
            // [ctor, prototype]
            idx = DuktapeDLL.duk_normalize_index(ctx, idx);
            var flags = 0U;

            DuktapeDLL.duk_push_string(ctx, name);
            if (getter != null)
            {
                flags |= DuktapeDLL.DUK_DEFPROP_HAVE_GETTER;
                DuktapeDLL.duk_push_c_function(ctx, getter, 0);
            }
            if (setter != null)
            {
                flags |= DuktapeDLL.DUK_DEFPROP_HAVE_SETTER;
                DuktapeDLL.duk_push_c_function(ctx, setter, 1);
            }
            // [ctor, prototype, name, ?getter, ?setter]
            DuktapeDLL.duk_def_prop(ctx, idx, flags
                                    | DuktapeDLL.DUK_DEFPROP_SET_ENUMERABLE
                                    | DuktapeDLL.DUK_DEFPROP_CLEAR_CONFIGURABLE);
        }
Пример #3
0
        protected static void duk_add_event_instanced(IntPtr ctx, string name, DuktapeDLL.duk_c_function add_op, DuktapeDLL.duk_c_function remove_op, int idx)
        {
            idx = DuktapeDLL.duk_normalize_index(ctx, idx);

            int refid;

            DuktapeDLL.duk_unity_get_refid(ctx, idx, out refid); // 直接在 event object 上复制主对象的引用id

            DuktapeDLL.duk_push_object(ctx);                     // [evtobj]
            DuktapeDLL.duk_unity_set_refid(ctx, -1, refid);
            DuktapeDLL.duk_push_string(ctx, name);               // [evtobj, name]
            DuktapeDLL.duk_dup(ctx, -2);                         // [evtobj, name, evtobj]
            DuktapeDLL.duk_push_c_function(ctx, add_op, 1);
            DuktapeDLL.duk_put_prop_string(ctx, -2, "on");
            DuktapeDLL.duk_push_c_function(ctx, remove_op, 1);
            DuktapeDLL.duk_put_prop_string(ctx, -2, "off");
            // [evtobj, name, evtobj]
            DuktapeDLL.duk_def_prop(ctx, idx, DuktapeDLL.DUK_DEFPROP_HAVE_VALUE
                                    | DuktapeDLL.DUK_DEFPROP_SET_ENUMERABLE
                                    | DuktapeDLL.DUK_DEFPROP_CLEAR_CONFIGURABLE);
            // [evtobj]
        }