// 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); }
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); }
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] }