Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 282105 Details for
Bug 360971
<media-video/gxine-0.5.906 fails to compile with >=dev-lang/spidermonkey-1.8.5
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
migration to spidermonkey-1.8.5
gxine-0.5.905-spidermonkey185-update.patch (text/plain), 77.06 KB, created by
Ian Stakenvicius (RETIRED)
on 2011-08-04 19:01:12 UTC
(
hide
)
Description:
migration to spidermonkey-1.8.5
Filename:
MIME Type:
Creator:
Ian Stakenvicius (RETIRED)
Created:
2011-08-04 19:01:12 UTC
Size:
77.06 KB
patch
obsolete
>--- gxine-0.5.905.orig/m4/_js.m4 >+++ gxine-0.5.905/m4/_js.m4 >@@ -51,11 +51,20 @@ AC_DEFUN([GXINE_PATH_SPIDERMONKEY], > if test x"$JS_CFLAGS" = x; then > AC_MSG_NOTICE([looking for the Spidermonkey Javascript library in various places.]) > >- # Try libmozjs (xulrunner) >+ JSLIB=mozjs185 >+ AC_MSG_NOTICE([trying mozjs via pkgconfig mozjs185]) >+ PKG_CHECK_MODULES([JS],[mozjs185],[],[:]) > >- HAVE_JS=xulrunner >- AC_MSG_NOTICE([trying mozjs via pkgconfig xulrunner-js]) >- PKG_CHECK_MODULES([JS],[xulrunner-js],[],[:]) >+ if test x"$JS_CFLAGS" = x; then >+ JSLIB=mozjs >+ fi >+ >+ # Try libmozjs (xulrunner) >+ if test x"$JS_CFLAGS" = x; then >+ HAVE_JS=xulrunner >+ AC_MSG_NOTICE([trying mozjs via pkgconfig xulrunner-js]) >+ PKG_CHECK_MODULES([JS],[xulrunner-js],[],[:]) >+ fi > > # Try Mozilla > >@@ -125,6 +135,43 @@ AC_DEFUN([GXINE_PATH_SPIDERMONKEY], > [#define XP_UNIX]) > CFLAGS="$saved_CFLAGS" > fi >+ >+ SAVED_LIBS="$LIBS" >+ LIBS="$JS_LIBS $LIBS" >+ SAVED_CFLAGS="$CFLAGS" >+ CFLAGS="$JS_CFLAGS $CFLAGS" >+ AC_CHECK_LIB([$JSLIB], [JS_NewCompartmentAndGlobalObject], >+ AC_DEFINE([HAVE_COMPARTMENTS], [1], [Define whether we have compartments])) >+ >+ AC_CHECK_LIB([$JSLIB], [JS_GetStringBytes], >+ AC_DEFINE([HAVE_JS_GET_STRING_BYTES], [1], [Define whether we have JS_GetStringBytes])) >+ >+ AC_CHECK_LIB([$JSLIB], [JS_NewDouble], >+ AC_DEFINE([HAVE_JS_NEW_DOUBLE], [1], [Define whether we have JS_NewDouble])) >+ >+ AC_CHECK_LIB([$JSLIB], [JS_StrictPropertyStub], >+ AC_DEFINE([HAVE_JS_STRICT_PROPERTY_OP], [1], [Define whether we have the JSStrictPropertyOp prototype])) >+ >+ AC_COMPILE_IFELSE( >+ [AC_LANG_PROGRAM( >+ [[#include <jsapi.h>]], >+ [[jsval v; jsdouble *d = JSVAL_TO_DOUBLE(v);]] >+ )], >+ AC_DEFINE([JSVAL_TO_DOUBLE_RETURNS_POINTER], [1], [Define whether the JSVAL_TO_DOUBLE function or macro returns a pointer to jsdouble]) >+ ) >+ >+ CFLAGS="$JS_CFLAGS -Werror -Wno-attributes" >+ AC_COMPILE_IFELSE( >+ [AC_LANG_PROGRAM( >+ [[#include <jsapi.h> >+ static JSBool op(JSContext* cx, JSObject* obj, jsid id, jsval* vp) {}]], >+ [[JSPropertyOp func = op;]] >+ )], >+ AC_DEFINE([JS_PROPERTY_OP_HAS_ID_AS_JSID], [1], [Define whether the type of id in the prototype for JSPropertyOp is a jsid]) >+ ) >+ LIBS="$SAVED_LIBS" >+ CFLAGS="$SAVED_CFLAGS" >+ > AC_SUBST(JS_CFLAGS) > AC_SUBST(JS_LIBS) > ]) >--- gxine-0.5.905.orig/src/script_engine.c >+++ gxine-0.5.905/src/script_engine.c >@@ -34,7 +34,6 @@ > #include <stdarg.h> > > #include <gdk/gdkkeysyms.h> >-#include <jsstr.h> > > #include "script_engine.h" > #include "ui.h" >@@ -53,6 +52,7 @@ > #include "snapshot.h" > #include "engine.h" > #include "history.h" >+ > /* > #define LOG > */ >@@ -194,7 +194,10 @@ gchar *se_result_str (se_t *se) > return NULL; > > se->str = JS_ValueToString (se->cx, se->rval); >- return JS_GetStringBytes (se->str); >+ char *encoded = SE_JS_ENCODE_STRING(se->cx, se->str); >+ char *res = strdup(encoded); >+ SE_JS_FREE_ENCODED_STRING(se->cx, encoded); >+ return res; > } > > int se_result_int (se_t *se, JSInt32 *num) >@@ -253,8 +256,7 @@ se_js_string_val (JSContext *cx, const c > * methods > */ > >-static JSBool controls_exit (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool controls_exit (JSContext *cx, uintN argc, jsval *vp) > { > gchar *fname; > >@@ -299,8 +301,7 @@ static JSBool controls_exit (JSContext * > exit (0); > } > >-static JSBool show_js_console (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool show_js_console (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall_checkinit ("show_js_console"); > if (GTK_WIDGET_VISIBLE (se_window)) >@@ -311,85 +312,93 @@ static JSBool show_js_console (JSContext > se_prop_set_int (gse, js_icon_obj, "v", 0); > } > >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > static JSBool >-js_callback (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+js_callback (JSContext *cx, uintN argc, jsval *vp) > { >+ jsval *argv = JS_ARGV (cx, vp); > se_t *se = (se_t *) JS_GetContextPrivate (cx); > se_log_fncall ("callback"); > se_argc_check_range (1, 2, "callback"); > se_arg_is_string (0, "callback"); > if (argc > 1) > se_arg_is_object (1, "callback"); >- engine_queue_push (JS_GetStringBytes (JS_ValueToString (cx, argv[0])), >- JS_GetPrivate (cx, argc > 1 ? JSVAL_TO_OBJECT (argv[1]) >- : se->global), >- NULL, NULL, NULL, _("JS callback")); >- *rval = JSVAL_VOID; >+ char *str = SE_JS_ENCODE_STRING (cx, JS_ValueToString (cx, argv[0])); >+ engine_queue_push (str, >+ JS_GetPrivate (cx, argc > 1 ? JSVAL_TO_OBJECT (argv[1]) >+ : se->global), >+ NULL, NULL, NULL, _("JS callback")); >+ SE_JS_FREE_ENCODED_STRING (cx, str); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > static JSBool >-js_xine_cfg_get (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+js_xine_cfg_get (JSContext *cx, uintN argc, jsval *vp) > { >+ jsval *argv = JS_ARGV (cx, vp); > se_log_fncall ("xine_cfg_get"); > se_argc_check (1, "xine_cfg_get"); > se_arg_is_string (0, "xine_cfg_get"); > > xine_cfg_entry_t entry; >- char *cfg = JS_GetStringBytes (JS_ValueToString (cx, argv[0])); >+ char *cfg = SE_JS_ENCODE_STRING (cx, JS_ValueToString (cx, argv[0])); > if (!xine_config_lookup_entry (xine, cfg, &entry)) > { >- *rval = JSVAL_NULL; >+ JS_SET_RVAL (cx, vp, JSVAL_NULL); >+ SE_JS_FREE_ENCODED_STRING (cx, cfg); > return JS_TRUE; > } > >+ SE_JS_FREE_ENCODED_STRING(cx, cfg); >+ > switch (entry.type) > { > case XINE_CONFIG_TYPE_RANGE: > case XINE_CONFIG_TYPE_NUM: >- *rval = INT_TO_JSVAL (entry.num_value); >+ JS_SET_RVAL (cx, vp, INT_TO_JSVAL (entry.num_value)); > return JS_TRUE; > > case XINE_CONFIG_TYPE_BOOL: >- *rval = BOOLEAN_TO_JSVAL (entry.num_value); >+ JS_SET_RVAL (cx, vp, BOOLEAN_TO_JSVAL (entry.num_value)); > return JS_TRUE; > > case XINE_CONFIG_TYPE_STRING: >- *rval = se_js_string_val (cx, entry.str_value ? : entry.str_default); >+ JS_SET_RVAL (cx, vp, se_js_string_val (cx, entry.str_value ? : entry.str_default)); > return JS_TRUE; > > case XINE_CONFIG_TYPE_ENUM: >- *rval = se_js_string_val (cx, entry.enum_values[entry.num_value]); >+ JS_SET_RVAL (cx, vp, se_js_string_val (cx, entry.enum_values[entry.num_value])); > return JS_TRUE; > > default: >- *rval = JSVAL_NULL; >+ JS_SET_RVAL (cx, vp, JSVAL_NULL); > return JS_TRUE; > } > } > > static JSBool >-js_xine_cfg_set (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+js_xine_cfg_set (JSContext *cx, uintN argc, jsval *vp) > { >+ jsval *argv = JS_ARGV (cx, vp); > se_log_fncall ("xine_cfg_set"); > se_argc_check (2, "xine_cfg_set"); > se_arg_is_string (0, "xine_cfg_set"); > > xine_cfg_entry_t entry; >- char *cfg = JS_GetStringBytes (JS_ValueToString (cx, argv[0])); >+ char *cfg = SE_JS_ENCODE_STRING (cx, JS_ValueToString(cx, argv[0])); > if (!xine_config_lookup_entry (xine, cfg, &entry)) > { >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); >+ SE_JS_FREE_ENCODED_STRING (cx, cfg); > return JS_TRUE; > } > >+ SE_JS_FREE_ENCODED_STRING (cx, cfg); >+ > int32 num; > switch (entry.type) > { >@@ -413,28 +422,34 @@ js_xine_cfg_set (JSContext *cx, JSObject > > case XINE_CONFIG_TYPE_STRING: > se_arg_is_string (1, "xine_cfg_set"); >- entry.str_value = JS_GetStringBytes (JS_ValueToString (cx, argv[1])); >+ entry.str_value = SE_JS_ENCODE_STRING (cx, JS_ValueToString (cx, argv[1])); > break; > > case XINE_CONFIG_TYPE_ENUM: > se_arg_is_string (1, "xine_cfg_set"); >- char *v = JS_GetStringBytes (JS_ValueToString (cx, argv[1])); >+ char *v = SE_JS_ENCODE_STRING (cx, JS_ValueToString (cx, argv[1])); > int i; > for (i = 0; entry.enum_values[i]; ++i) >- if (!strcmp (v, entry.enum_values[i])) >+ if (!strcmp (v, entry.enum_values[i])) { >+ SE_JS_FREE_ENCODED_STRING (cx, v); > break; >+ } > if (entry.enum_values[i]) > entry.num_value = i; >+ SE_JS_FREE_ENCODED_STRING (cx, v); > break; > > default: >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > preferences_update_entry (&entry); > >- *rval = JSVAL_VOID; >+ if (entry.type == XINE_CONFIG_TYPE_STRING) >+ SE_JS_FREE_ENCODED_STRING (cx, entry.str_value); >+ >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -476,8 +491,7 @@ static char *show_help_int (se_t *se, se > return help; > } > >-static JSBool show_help (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool show_help (JSContext *cx, uintN argc, jsval *vp) > { > static char *const group_id[] = { > NULL, >@@ -530,7 +544,7 @@ static JSBool show_help (JSContext *cx, > * int get_time (); > * int get_length (); > */ >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -652,8 +666,9 @@ static jsval get_prop_jsval (se_t *se, s > > case SE_TYPE_DOUBLE: > { >- jsdouble *d = JS_NewDouble (se->cx, get_prop_double (se, o, p)); >- return DOUBLE_TO_JSVAL (d); >+ jsval rval; >+ SE_JS_NEW_NUMBER_VAL (se->cx, get_prop_double (se, o, p), rval); >+ return rval; > } > > case SE_TYPE_BOOL: >@@ -692,7 +707,7 @@ static void set_prop_jsval (se_t *se, se > > case SE_TYPE_DOUBLE: > if (JSVAL_IS_NUMBER(*v)) >- se_prop_set_double (se, o, p->id, *JSVAL_TO_DOUBLE(*v)); >+ se_prop_set_double (se, o, p->id, SE_JSVAL_TO_DOUBLE(*v)); > else > se->print_cb (se->print_cb_data, _("\n%s.%s: value must be numeric\n"), > o->id, p->id); >@@ -709,8 +724,9 @@ static void set_prop_jsval (se_t *se, se > case SE_TYPE_STRING: > { > JSString *str = JSVAL_TO_STRING(*v); >- char *string = JS_GetStringBytes (str); >+ char *string = SE_JS_ENCODE_STRING (se->cx, str); > se_prop_set (se, o, p->id, string); >+ SE_JS_FREE_ENCODED_STRING (se->cx, str); > } > return; > >@@ -725,17 +741,17 @@ static void set_prop_jsval (se_t *se, se > * function to create and maintain js objects > */ > >-static JSBool >-generic_JSGetProperty (JSContext *cx, JSObject *obj, jsval id, jsval *vp) >+SE_JS_PROPERTY_GETTER_DECLARE (generic_JSGetProperty) > { >+ SE_JS_PROPERTY_GETTER_INIT_VARIABLES (id_val); > se_t *se = (se_t *) JS_GetContextPrivate(cx); > se_log_fncall ("generic get property"); > se_o_t *o = JS_GetPrivate (cx, obj); > >- if (JSVAL_IS_STRING (id)) >+ if (JSVAL_IS_STRING (id_val)) > { >- JSString *str = JS_ValueToString (cx, id); >- char *prop = str ? JS_GetStringBytes (str) : ""; >+ JSString *str = JS_ValueToString (cx, id_val); >+ char *prop = str ? SE_JS_ENCODE_STRING (cx, str) : ""; > GList *n; > > logprintf ("script_engine: looking for generic property '%s' in '%s'\n", >@@ -749,6 +765,9 @@ generic_JSGetProperty (JSContext *cx, JS > if (!strcasecmp (p->id, prop)) > { > *vp = get_prop_jsval (se, o, p); >+ if (str) >+ SE_JS_FREE_ENCODED_STRING (cx, prop); >+ > return JS_TRUE; > } > } >@@ -760,18 +779,25 @@ generic_JSGetProperty (JSContext *cx, JS > se_o_t *p = (se_o_t *) n->data; > if (!strcasecmp (p->id, prop)) > { >- static jsval prop = 0; >- if (!prop) >- prop = se_js_string_val (cx, "."); >- if (!generic_JSGetProperty (cx, p->obj, prop, vp)) >+ jsval prop_val = se_js_string_val (cx, "."); >+ if (!SE_JS_CALL_PROPERTY_GETTER_WITH_JSVAL (generic_JSGetProperty, cx, p->obj, prop_val, vp)) > *vp = OBJECT_TO_JSVAL (p->obj); >+ if (str) >+ SE_JS_FREE_ENCODED_STRING (cx, prop); >+ > return JS_TRUE; > } > } > >- if (*prop && o->parent) >- return generic_JSGetProperty (cx, o->parent->obj, id, vp); >+ if (*prop && o->parent) { >+ JSBool ret = generic_JSGetProperty (cx, o->parent->obj, id, vp); >+ if (str) >+ SE_JS_FREE_ENCODED_STRING (cx, prop); >+ return ret; >+ } > >+ if (str) >+ SE_JS_FREE_ENCODED_STRING (cx, prop); > return JS_TRUE; > } > >@@ -780,9 +806,9 @@ generic_JSGetProperty (JSContext *cx, JS > return JS_FALSE; > } > >-static JSBool >-generic_JSSetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) >+SE_JS_PROPERTY_SETTER_DECLARE(generic_JSSetProperty) > { >+ SE_JS_PROPERTY_SETTER_INIT_VARIABLES (id_val); > se_t *se = (se_t *) JS_GetContextPrivate(cx); > se_o_t *o; > >@@ -790,10 +816,10 @@ generic_JSSetProperty(JSContext *cx, JSO > > o = JS_GetPrivate (cx, obj); > >- if (JSVAL_IS_STRING (id)) >+ if (JSVAL_IS_STRING (id_val)) > { >- JSString *str = JS_ValueToString (cx, id); >- char *prop = JS_GetStringBytes (str); >+ JSString *str = JS_ValueToString (cx, id_val); >+ char *prop = SE_JS_ENCODE_STRING (cx, str); > GList *n; > > logprintf ("script_engine: looking for generic property '%s' in '%s'\n", >@@ -808,6 +834,7 @@ generic_JSSetProperty(JSContext *cx, JSO > { > if (!p->constant) > set_prop_jsval (se, o, p, vp); >+ SE_JS_FREE_ENCODED_STRING (cx, prop); > return JS_TRUE; > } > } >@@ -819,15 +846,21 @@ generic_JSSetProperty(JSContext *cx, JSO > se_o_t *p = (se_o_t *) n->data; > if (!strcasecmp (p->id, prop)) > { >- if (!generic_JSSetProperty (cx, p->obj, STRING_TO_JSVAL("."), vp)) >+ jsval prop_val = STRING_TO_JSVAL("."); >+ if (!SE_JS_CALL_PROPERTY_SETTER_WITH_JSVAL (generic_JSSetProperty, cx, p->obj, prop_val, vp)) > *vp = OBJECT_TO_JSVAL (p->obj); >+ SE_JS_FREE_ENCODED_STRING (cx, prop); > return JS_TRUE; > } > } > >- if (*prop && o->parent) >- return generic_JSSetProperty (cx, o->parent->obj, id, vp); >+ if (*prop && o->parent) { >+ JSBool ret = SE_JS_CALL_PROPERTY_SETTER_WITH_JSVAL (generic_JSSetProperty, cx, o->parent->obj, id_val, vp); >+ SE_JS_FREE_ENCODED_STRING (cx, prop); >+ return ret; >+ } > >+ SE_JS_FREE_ENCODED_STRING (cx, prop); > return JS_TRUE; > } > >@@ -841,14 +874,35 @@ static void generic_JSDestructor (JSCont > se_log_fncall ("generic destructor"); > } > >+#ifdef JSFUN_CONSTRUCTOR >+static JSBool generic_Constructor (JSContext* cx, uintN argc, jsval* vp) >+{ >+ JSObject* obj = JS_NewObjectForConstructor (cx, vp); >+ if (!obj) { >+ JS_ReportError (cx, "Failed to create 'this' object"); >+ return JS_FALSE; >+ } >+ >+ JS_SET_RVAL (cx, vp, OBJECT_TO_JSVAL (obj)); >+ return JS_TRUE; >+} >+#endif >+ > static JSClass generic_JSClass = > { > "view", JSCLASS_HAS_PRIVATE, > JS_PropertyStub, JS_PropertyStub, > generic_JSGetProperty, generic_JSSetProperty, > JS_EnumerateStub, JS_ResolveStub, >+#ifndef JSFUN_CONSTRUCTOR > JS_ConvertStub, generic_JSDestructor > }; >+#else >+ JS_ConvertStub, generic_JSDestructor, >+ NULL, NULL, NULL, generic_Constructor, >+ NULL, NULL, NULL, NULL >+ }; >+#endif > > se_o_t *se_create_object (se_t *se, se_o_t *parent /* may be NULL */, > const gchar *name, void *user_data, >@@ -1542,7 +1596,7 @@ se_t *se_new (void) > { > se_t *se; > static JSClass global_class = { >- "global", JSCLASS_HAS_PRIVATE, >+ "global", JSCLASS_HAS_PRIVATE | JSCLASS_GLOBAL_FLAGS, > JS_PropertyStub,JS_PropertyStub,JS_PropertyStub,JS_PropertyStub, > JS_EnumerateStub,JS_ResolveStub,JS_ConvertStub,JS_FinalizeStub > }; >@@ -1564,7 +1618,13 @@ se_t *se_new (void) > se = malloc (sizeof (se_t)); > > se->cx = JS_NewContext (rt, 0x1000); >+#ifdef HAVE_COMPARTMENTS >+ se->global = JS_NewCompartmentAndGlobalObject (se->cx, &global_class, NULL); >+ /* Select the compartment our global object is in */ >+ JS_EnterCrossCompartmentCall (se->cx, se->global); >+#else > se->global = JS_NewObject (se->cx, &global_class, NULL, NULL); >+#endif > > pthread_mutexattr_t attr; > pthread_mutexattr_init (&attr); >@@ -1596,12 +1656,12 @@ se_t *se_new (void) > > { > static const se_f_def_t defs[] = { >- { "exit", controls_exit, 0, 0, SE_GROUP_ENGINE, NULL, NULL }, >- { "js_console_show", show_js_console, 0, 0, SE_GROUP_DIALOGUE, NULL, NULL }, >- { "help", show_help, 0, 0, SE_GROUP_HIDDEN, NULL, NULL }, >- { "callback", js_callback, 0, 0, SE_GROUP_ENGINE, N_("Javascript"), NULL }, >- { "xine_cfg_get", js_xine_cfg_get, 0, 0, SE_GROUP_PROPERTIES, NULL, NULL }, >- { "xine_cfg_set", js_xine_cfg_set, 0, 0, SE_GROUP_PROPERTIES, NULL, NULL }, >+ { "exit", controls_exit, 0, JSFUN_FAST_NATIVE, SE_GROUP_ENGINE, NULL, NULL }, >+ { "js_console_show", show_js_console, 0, JSFUN_FAST_NATIVE, SE_GROUP_DIALOGUE, NULL, NULL }, >+ { "help", show_help, 0, JSFUN_FAST_NATIVE, SE_GROUP_HIDDEN, NULL, NULL }, >+ { "callback", js_callback, 0, JSFUN_FAST_NATIVE, SE_GROUP_ENGINE, N_("Javascript"), NULL }, >+ { "xine_cfg_get", js_xine_cfg_get, 0, JSFUN_FAST_NATIVE, SE_GROUP_PROPERTIES, NULL, NULL }, >+ { "xine_cfg_set", js_xine_cfg_set, 0, JSFUN_FAST_NATIVE, SE_GROUP_PROPERTIES, NULL, NULL }, > { NULL } > }; > se_defuns (se, se->g, defs); >--- gxine-0.5.905.orig/src/ui.c >+++ gxine-0.5.905/src/ui.c >@@ -490,14 +490,14 @@ static void set_fs_toolbar_top (int v) > > #ifdef WITH_DEPRECATED > >-static JSBool js_fs_toolbar_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_fs_toolbar_show (JSContext *cx, uintN argc, jsval *vp) > { > JSBool show; > > se_log_fncall_deprecated ("toolbar_show"); > se_argc_check_max (1, "toolbar_show"); > >+ jsval *argv = JS_ARGV (cx, vp); > if (argc == 1) > { > se_arg_is_int_or_bool (0, "toolbar_show"); >@@ -508,19 +508,20 @@ static JSBool js_fs_toolbar_show (JSCont > > window_fs_toolbar_show (show); > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > #ifdef WITH_OBSOLETE > >-static JSBool js_fs_toolbar_position (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_fs_toolbar_position (JSContext *cx, uintN argc, jsval *vp) > { > JSBool top; > > se_log_fncall_obsolete ("set_toolbar_position"); > se_argc_check_max (1, "set_toolbar_position"); > >+ jsval *argv = JS_ARGV (cx, vp); > if (argc == 1) > { > se_arg_is_int_or_bool (0, "set_toolbar_position"); >@@ -532,6 +533,7 @@ static JSBool js_fs_toolbar_position (JS > set_fs_toolbar_top > (gtk_radio_action_get_current_value (action_items.fs_toolbar_pos->data)); > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -549,23 +551,21 @@ static int ui_lookup_js_obj (const JSObj > abort (); /* can't happen */ > } > >-static JSBool js_control_revert (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_control_revert (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall ("<control>.revert"); > se_argc_check (0, "<control>.revert"); >- ui_revert_control_adjustment (ui_lookup_js_obj (obj)); >- *rval = JSVAL_VOID; >+ ui_revert_control_adjustment (ui_lookup_js_obj (JS_THIS_OBJECT (cx, vp))); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_control_reset (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_control_reset (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall ("<control>.reset"); > se_argc_check (0, "<control>.reset"); >- ui_clear_control_adjustment (ui_lookup_js_obj (obj)); >- *rval = JSVAL_VOID; >+ ui_clear_control_adjustment (ui_lookup_js_obj (JS_THIS_OBJECT (cx, vp))); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -654,13 +654,12 @@ static int ui_prop_set_bool (void *data, > return ui_prop_set_internal (data, !!value.i); > } > >-static JSBool ui_prop_toggle_bool (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+static JSBool ui_prop_toggle_bool (JSContext *cx, uintN argc, jsval *vp) > { > se_t *se = (se_t *) JS_GetContextPrivate(cx); >- se_o_t *o = JS_GetPrivate (cx, obj); >+ se_o_t *o = JS_GetPrivate (cx, JS_THIS_OBJECT (cx, vp)); > JSBool v = !se_prop_get_bool (se, o, "v"); >- *rval = BOOLEAN_TO_JSVAL (v); >+ JS_SET_RVAL (cx, vp, BOOLEAN_TO_JSVAL (v)); > se_prop_set_bool (se, o, "v", v); > return JS_TRUE; > } >@@ -699,7 +698,7 @@ void ui_create_properties (const ui_prop > se_prop_create_int (gse, obj, "max", prop[i].max, TRUE); > break; > case SE_TYPE_BOOL: >- se_defun (gse, obj, "toggle", ui_prop_toggle_bool, 0, 0, >+ se_defun (gse, obj, "toggle", ui_prop_toggle_bool, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL); > break; > default:; /* we don't handle string and float */ >@@ -1044,10 +1043,10 @@ void ui_init (void) > > #ifdef WITH_DEPRECATED > static const se_f_def_t defs[] = { >- { "toolbar_show", js_fs_toolbar_show, 0, 0, >+ { "toolbar_show", js_fs_toolbar_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, N_("[bool]"), NULL }, > #ifdef WITH_OBSOLETE >- { "set_toolbar_position", js_fs_toolbar_position, 0, 0, >+ { "set_toolbar_position", js_fs_toolbar_position, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, N_("bool"), N_("at top if true") }, > #endif > { NULL } >@@ -1091,8 +1090,8 @@ void ui_init (void) > if (ranges[i].setting) > { > static const se_f_def_t defs[] = { >- { "revert", js_control_revert, 0, 0, SE_GROUP_HIDDEN, NULL, NULL }, >- { "reset", js_control_reset, 0, 0, SE_GROUP_HIDDEN, NULL, NULL }, >+ { "revert", js_control_revert, 0, JSFUN_FAST_NATIVE, SE_GROUP_HIDDEN, NULL, NULL }, >+ { "reset", js_control_reset, 0, JSFUN_FAST_NATIVE, SE_GROUP_HIDDEN, NULL, NULL }, > { NULL } > }; > jsobjs[i] = >--- gxine-0.5.905.orig/src/player.c >+++ gxine-0.5.905/src/player.c >@@ -302,6 +302,7 @@ void player_stop (void) > play_thread = 0; > if (thread) > pthread_cancel (thread); >+ gtk_video_in_spu_button (gtv, 0); > xine_stop (stream); > } > >@@ -405,37 +406,36 @@ static void update_postproc_chain (const > } > > static JSBool set_postproc_chain (const char *func, const char *pref, >- JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+ JSContext *cx, uintN argc, jsval *vp) > { >+ jsval *argv = JS_ARGV (cx, vp); > se_log_fncall (func); > se_argc_check (1, func); > se_arg_is_string (0, func); >- update_postproc_chain (pref, >- JS_GetStringBytes (JS_ValueToString (cx, argv[0]))); >+ char *value = SE_JS_ENCODE_STRING (cx, JS_ValueToString (cx, argv[0])); >+ update_postproc_chain (pref, value); >+ SE_JS_FREE_ENCODED_STRING(cx, value); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > >-static JSBool set_vo_postproc_chain (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+static JSBool set_vo_postproc_chain (JSContext *cx, uintN argc, jsval *vp) > { > return set_postproc_chain ("vo_postproc.set_chain", "gui.post_plugins.video", >- cx, obj, argc, argv, rval); >+ cx, argc, vp); > } > >-static JSBool set_deint_postproc_chain (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+static JSBool set_deint_postproc_chain (JSContext *cx, uintN argc, jsval *vp) > { > return set_postproc_chain ("vo_deinterlace.set_chain", "gui.post_plugins.deinterlace", >- cx, obj, argc, argv, rval); >+ cx, argc, vp); > } > >-static JSBool set_ao_postproc_chain (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+static JSBool set_ao_postproc_chain (JSContext *cx, uintN argc, jsval *vp) > { > return set_postproc_chain ("ao_postproc.set_chain", "gui.post_plugins.audio", >- cx, obj, argc, argv, rval); >+ cx, argc, vp); > } > > static int listen_postproc_chain (void *pref, se_t *se, se_o_t *obj, >@@ -445,89 +445,82 @@ static int listen_postproc_chain (void * > return 0; > } > >-static JSBool get_time (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool get_time (JSContext *cx, uintN argc, jsval *vp) > { > int pos, pos_time, len; > se_log_fncall ("get_time"); > xine_get_pos_length (stream, &pos, &pos_time, &len); >- *rval = INT_TO_JSVAL (pos_time); >+ JS_SET_RVAL (cx, vp, INT_TO_JSVAL (pos_time)); > return JS_TRUE; > } > >-static JSBool get_pos (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool get_pos (JSContext *cx, uintN argc, jsval *vp) > { > int pos, pos_time, len; > se_log_fncall ("get_pos"); > xine_get_pos_length (stream, &pos, &pos_time, &len); > >- jsdouble *pos_percent = JS_NewDouble (cx, pos / 655.35); >- *rval = DOUBLE_TO_JSVAL (pos_percent); >+ jsval rval = JS_RVAL (cx, vp); >+ SE_JS_NEW_NUMBER_VAL (cx, pos / 655.35, rval); > return JS_TRUE; > } > >-static JSBool has_time (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool has_time (JSContext *cx, uintN argc, jsval *vp) > { > int pos, pos_time, len; > se_log_fncall ("has_time"); > xine_get_pos_length (stream, &pos, &pos_time, &len); >- *rval = BOOLEAN_TO_JSVAL (len != 0); >+ JS_SET_RVAL (cx, vp, BOOLEAN_TO_JSVAL (len != 0)); > return JS_TRUE; > } > > #ifdef WITH_OBSOLETE > >-static JSBool js_get_speed (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_get_speed (JSContext *cx, uintN argc, jsval *vp) > { > se_prop_read_t speed; > se_log_fncall_obsolete ("get_speed"); > get_speed (NULL, &speed); >- *rval = INT_TO_JSVAL (speed.i); >+ JS_SET_RVAL (cx, vp, INT_TO_JSVAL (speed.i)); > return JS_TRUE; > } > >-static JSBool js_get_volume (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_get_volume (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > int volume; > se_log_fncall_obsolete ("get_volume"); > volume = xine_get_param (stream, XINE_PARAM_AUDIO_VOLUME); >- *rval = INT_TO_JSVAL (volume); >+ JS_SET_RVAL (cx, vp, INT_TO_JSVAL (volume)); > return JS_TRUE; > } > >-static JSBool js_get_mute (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_get_mute (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > int mute; > se_log_fncall_obsolete ("get_mute"); > mute = xine_get_param (stream, XINE_PARAM_AUDIO_MUTE); >- *rval = BOOLEAN_TO_JSVAL (mute); >+ JS_SET_RVAL (cx, vp, BOOLEAN_TO_JSVAL (mute)); > return JS_TRUE; > } > >-static JSBool js_get_zoom (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_get_zoom (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > int zoom; > se_log_fncall_obsolete ("get_zoom"); > zoom = xine_get_param (stream, XINE_PARAM_VO_ZOOM_X); >- *rval = INT_TO_JSVAL (zoom); >+ JS_SET_RVAL (cx, vp, INT_TO_JSVAL (zoom)); > return JS_TRUE; > } > > #endif /* WITH_OBSOLETE */ > >-static JSBool controls_pause (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool controls_pause (JSContext *cx, uintN argc, jsval *vp) > { > int32 pause_state=-1; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_checkinit ("pause"); > se_argc_check_max (1, "pause"); >@@ -553,21 +546,21 @@ static JSBool controls_pause (JSContext > set_speed (XINE_SPEED_NORMAL); > } > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool controls_stop (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool controls_stop (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall_checkinit ("stop"); > player_stop (); > playlist_logo (NULL); > ui_set_control_adjustment (Control_SEEKER, 0); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool controls_eject (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool controls_eject (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall_checkinit ("eject"); > if (xine_get_status (stream) == XINE_STATUS_PLAY) >@@ -576,17 +569,18 @@ static JSBool controls_eject (JSContext > playlist_logo (cx); /* doesn't matter so long as it's not NULL */ > gdk_threads_enter (); > ui_set_control_adjustment (Control_SEEKER, 0); >+ gtk_video_in_spu_button (gtv, 0); > int ret = xine_eject (stream); >- *rval = BOOLEAN_TO_JSVAL (ret); >+ JS_SET_RVAL (cx, vp, BOOLEAN_TO_JSVAL (ret)); > return JS_TRUE; > } > > #ifdef WITH_OBSOLETE > >-static JSBool js_set_speed (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_set_speed (JSContext *cx, uintN argc, jsval *vp) > { > int32 speed; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_obsolete ("set_speed"); > >@@ -599,13 +593,14 @@ static JSBool js_set_speed (JSContext *c > speed = 0; > set_speed (calc_speed (speed)); > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_set_volume (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_set_volume (JSContext *cx, uintN argc, jsval *vp) > { > int32 volume; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_obsolete ("set_volume"); > se_argc_check (1, "set_volume"); >@@ -618,13 +613,14 @@ static JSBool js_set_volume (JSContext * > ui_set_control_adjustment (Control_VOLUME, volume); > ui_xine_set_param_from_adjustment (Control_VOLUME); > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_set_mute (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_set_mute (JSContext *cx, uintN argc, jsval *vp) > { > JSBool mute; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_obsolete ("set_mute"); > se_argc_check_max (1, "set_mute"); >@@ -639,13 +635,14 @@ static JSBool js_set_mute (JSContext *cx > > set_mute (mute); > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_set_zoom (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_set_zoom (JSContext *cx, uintN argc, jsval *vp) > { > int32 zoom; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_obsolete ("set_zoom"); > se_argc_check (1, "set_zoom"); >@@ -654,6 +651,7 @@ static JSBool js_set_zoom (JSContext *cx > JS_ValueToInt32 (cx, argv[0], &zoom); > set_zoom (zoom); > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -684,9 +682,9 @@ static gboolean set_video_size_cb (gpoin > return FALSE; > } > >-static JSBool js_set_video_size (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_set_video_size (JSContext *cx, uintN argc, jsval *vp) > { >+ jsval *argv = JS_ARGV (cx, vp); > se_log_fncall ("set_video_size"); > se_argc_check (1, "set_video_size"); > se_arg_is_int (0, "set_video_size"); >@@ -704,15 +702,16 @@ static JSBool js_set_video_size (JSConte > g_source_remove (zoomcb_id); > zoomcb_id = g_idle_add ((GSourceFunc) set_video_size_cb, NULL); > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > #ifdef WITH_DEPRECATED > >-static JSBool js_set_fullscreen (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_set_fullscreen (JSContext *cx, uintN argc, jsval *vp) > { > int32 fs; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_deprecated ("set_fullscreen"); > se_argc_check_max (1, "set_fullscreen"); >@@ -728,15 +727,16 @@ static JSBool js_set_fullscreen (JSConte > if (gtk_toggle_action_get_active (action_items.fullscreen) != fs) > gtk_action_activate (GTK_ACTION (action_items.fullscreen)); > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > #ifdef WITH_OBSOLETE > >-static JSBool js_set_deinterlace (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_set_deinterlace (JSContext *cx, uintN argc, jsval *vp) > { > int32 di; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_obsolete ("set_deinterlace"); > se_argc_check_max (1, "set_deinterlace"); >@@ -750,14 +750,15 @@ static JSBool js_set_deinterlace (JSCont > di = !gtk_video_get_use_post_plugins_deinterlace ((GtkVideo *)gtv); > > set_deinterlace (di); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_set_postproc_video (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+static JSBool js_set_postproc_video (JSContext *cx, uintN argc, jsval *vp) > { > se_t *se = (se_t *) JS_GetContextPrivate(cx); > int32 di; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_obsolete ("set_postproc_video"); > se_argc_check_max (1, "set_postproc_video"); >@@ -767,26 +768,28 @@ static JSBool js_set_postproc_video (JSC > if (JSVAL_IS_INT (argv[0])) > JS_ValueToInt32 (cx, argv[0], &di); > else if (JSVAL_IS_STRING (argv[0])) >- return set_vo_postproc_chain (cx, obj, argc, argv, rval); >+ return set_vo_postproc_chain (cx, argc, vp); > else > { > se->print_cb (se->print_cb_data, > _("error: %s() argument %d is neither int nor string\n"), > "set_postproc_video", 1); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > } else > di = !gtk_video_get_use_post_plugins_video ((GtkVideo *)gtv); > > set_vo_postproc (di); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_set_postproc_audio (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+static JSBool js_set_postproc_audio (JSContext *cx, uintN argc, jsval *vp) > { > se_t *se = (se_t *) JS_GetContextPrivate(cx); > int32 di; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_obsolete ("set_postproc_audio"); > se_argc_check_max (1, "set_postproc_audio"); >@@ -796,25 +799,27 @@ static JSBool js_set_postproc_audio (JSC > if (JSVAL_IS_INT (argv[0])) > JS_ValueToInt32 (cx, argv[0], &di); > else if (JSVAL_IS_STRING (argv[0])) >- return set_ao_postproc_chain (cx, obj, argc, argv, rval); >+ return set_ao_postproc_chain (cx, argc, vp); > else > { > se->print_cb (se->print_cb_data, > _("error: %s() argument %d is neither int nor string\n"), > "set_postproc_audio", 1); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > } else > di = !gtk_video_get_use_post_plugins_audio ((GtkVideo *)gtv); > > set_ao_postproc (di); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_set_auto_resize (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_set_auto_resize (JSContext *cx, uintN argc, jsval *vp) > { > int32 ar; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_obsolete ("set_auto_resize"); > se_argc_check_max (1, "set_auto_resize"); >@@ -828,13 +833,14 @@ static JSBool js_set_auto_resize (JSCont > ar = !gtk_video_get_auto_resize ((GtkVideo *)gtv); > > set_auto_resize (ar); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_set_auto_rescale (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_set_auto_rescale (JSContext *cx, uintN argc, jsval *vp) > { > int32 ar; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_obsolete ("set_auto_rescale"); > se_argc_check_max (1, "set_auto_rescale"); >@@ -848,13 +854,14 @@ static JSBool js_set_auto_rescale (JSCon > ar = !gtk_video_get_auto_rescale ((GtkVideo *)gtv); > > set_auto_rescale (ar); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_set_aspect (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_set_aspect (JSContext *cx, uintN argc, jsval *vp) > { > int32 aspect; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_obsolete ("set_aspect"); > se_argc_check_max (1, "set_aspect"); >@@ -868,18 +875,19 @@ static JSBool js_set_aspect (JSContext * > aspect = xine_get_param (stream, XINE_PARAM_VO_ASPECT_RATIO) + 1; > > set_aspect (aspect); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > #endif /* WITH_OBSOLETE */ > #endif /* WITH_DEPRECATED */ > >-static JSBool js_snapshot (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_snapshot (JSContext *cx, uintN argc, jsval *vp) > { > JSString *str; > char *fname = NULL; > int32 scale = -1, blend = -1; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_checkinit ("snapshot"); > se_argc_check_range (0, 3, "snapshot"); >@@ -895,18 +903,20 @@ static JSBool js_snapshot (JSContext *cx > case 1: > se_arg_is_string (0, "snapshot"); > str = JS_ValueToString (cx, argv[0]); >- fname = JS_GetStringBytes (str); >+ fname = SE_JS_ENCODE_STRING (cx, str); > } > > make_snapshot (fname, scale, blend); > >+ SE_JS_FREE_ENCODED_STRING (cx, fname); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > >-static JSBool controls_play (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool controls_play (JSContext *cx, uintN argc, jsval *vp) > { >+ jsval *argv = JS_ARGV (cx, vp); > se_log_fncall_checkinit ("play"); > se_argc_check_max (3, "play"); > >@@ -925,7 +935,7 @@ static JSBool controls_play (JSContext * > > str = JS_ValueToString (cx, argv[0]); > >- mrl = JS_GetStringBytes (str); >+ mrl = SE_JS_ENCODE_STRING (cx, str); > se_log ("playing '%s' from start\n", mrl); > } > break; >@@ -935,9 +945,10 @@ static JSBool controls_play (JSContext * > se_arg_is_number (0, "play"); > se_arg_is_int (1, "play"); > >- jsdouble *posv = JS_NewDouble (cx, 0); /* when is this freed? */ >- JS_ValueToNumber (cx, argv[0], posv); >- pos = (*posv >= 0 && *posv < 100) ? *posv * 655.35 : -1; >+ jsdouble posv; >+ JS_ValueToNumber (cx, argv[0], &posv); >+ pos = (posv >= 0 && posv < 100) ? posv * 655.35 : -1; >+ > JS_ValueToInt32 (cx, argv[1], &pos_time); > mrl = NULL; > se_log ("playing from %d, %d\n", pos, pos_time); >@@ -951,18 +962,23 @@ static JSBool controls_play (JSContext * > se_arg_is_int (2, "play"); > > JSString *str = JS_ValueToString (cx, argv[0]); >- jsdouble *posv = JS_NewDouble (cx, 0); /* when is this freed? */ >- JS_ValueToNumber (cx, argv[1], posv); >- pos = (*posv >= 0 && *posv < 100) ? *posv * 655.35 : -1; >+ >+ jsdouble posv; >+ JS_ValueToNumber (cx, argv[1], &posv); >+ pos = (posv >= 0 && posv < 100) ? posv * 655.35 : -1; >+ > JS_ValueToInt32 (cx, argv[2], &pos_time); >- mrl = JS_GetStringBytes (str); >+ mrl = SE_JS_ENCODE_STRING (cx, str); > se_log ("playing '%s' from %d, %d\n", mrl, pos, pos_time); > } > break; > } > > if (mrl) >+ { > playlist_play_from (playlist_add_mrl (mrl, -1), pos, pos_time); >+ SE_JS_FREE_ENCODED_STRING (cx, mrl); >+ } > else > { > play_item_t *item = playlist_get_current_item (); >@@ -990,15 +1006,16 @@ static JSBool controls_play (JSContext * > } > set_speed (XINE_SPEED_NORMAL); > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > /* Crude hack to allow combined play/pause function. > * (Useful on some keyboards with CD/DVD control keys.) > */ >-static JSBool controls_play_pause (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool controls_play_pause (JSContext *cx, uintN argc, jsval *vp) > { >+ jsval *argv = JS_ARGV (cx, vp); > se_log_fncall_checkinit ("play_pause"); > se_argc_check_max (1, "play_pause"); > >@@ -1009,22 +1026,21 @@ static JSBool controls_play_pause (JSCon > { > case XINE_STATUS_STOP: > case XINE_STATUS_IDLE: >- return controls_play (cx, obj, 0, 0, rval); >+ return controls_play (cx, argc, vp); > default: >- return controls_pause (cx, obj, argc, argv, rval); >+ return controls_pause (cx, argc, vp); > } > } > >-static JSBool js_is_live_stream (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_is_live_stream (JSContext *cx, uintN argc, jsval *vp) > { >- *rval = JSVAL_FALSE; >+ JS_SET_RVAL(cx, vp, JSVAL_FALSE); > > se_log_fncall ("is_live_stream"); > se_argc_check_max (0, "is_live_stream"); > > if (player_live_stream ()) >- *rval = JSVAL_TRUE; >+ JS_SET_RVAL (cx, vp, JSVAL_TRUE); > > return JS_TRUE; > } >@@ -1087,12 +1103,11 @@ static xine_audio_port_t *load_audio_out > /* Properties */ > > static void add_chain_funcs (const char *prop, const char *config, >- JSBool (*set_chain) (JSContext *, JSObject *, >- uintN, jsval *, jsval *)) >+ JSBool (*set_chain) (JSContext *, uintN, jsval *)) > { > se_o_t *obj = se_find_object (gse, NULL, prop); > if (set_chain) >- se_defun (gse, obj, "set_chain", set_chain, 0, 0, SE_GROUP_HIDDEN, NULL, NULL); >+ se_defun (gse, obj, "set_chain", set_chain, 0, JSFUN_FAST_NATIVE, SE_GROUP_HIDDEN, NULL, NULL); > se_prop_create_xine_id (gse, obj, "chain", config); > se_prop_add_listener (gse, obj, "chain", > listen_postproc_chain, (void *)config); >@@ -1194,69 +1209,69 @@ void player_init (void) > > { > static const se_f_def_t defs[] = { >- { "play", controls_play, 0, 0, >+ { "play", controls_play, 0, JSFUN_FAST_NATIVE, > /* help text describes function parameters */ > SE_GROUP_ENGINE, N_("[mrl] [, pos, time]"), > N_("time in milliseconds") }, >- { "get_time", get_time, 0, 0, >+ { "get_time", get_time, 0, JSFUN_FAST_NATIVE, > SE_GROUP_ENGINE, NULL, N_("stream time index") }, >- { "get_pos", get_pos, 0, 0, >+ { "get_pos", get_pos, 0, JSFUN_FAST_NATIVE, > SE_GROUP_ENGINE, NULL, N_("stream position (%)") }, >- { "has_time", has_time, 0, 0, >+ { "has_time", has_time, 0, JSFUN_FAST_NATIVE, > SE_GROUP_ENGINE, NULL, N_("whether the stream has a time index") }, >- { "pause", controls_pause, 0, 0, >+ { "pause", controls_pause, 0, JSFUN_FAST_NATIVE, > SE_GROUP_ENGINE, N_("[bool]"), NULL }, >- { "stop", controls_stop, 0, 0, >+ { "stop", controls_stop, 0, JSFUN_FAST_NATIVE, > SE_GROUP_ENGINE, NULL, NULL }, >- { "eject", controls_eject, 0, 0, >+ { "eject", controls_eject, 0, JSFUN_FAST_NATIVE, > SE_GROUP_ENGINE, NULL, NULL }, >- { "play_pause", controls_play_pause, 0, 0, >+ { "play_pause", controls_play_pause, 0, JSFUN_FAST_NATIVE, > SE_GROUP_ENGINE, N_("[bool]"), NULL }, >- { "snapshot", js_snapshot, 0, 0, >+ { "snapshot", js_snapshot, 0, JSFUN_FAST_NATIVE, > /* these correspond to the options in the snapshot-save dialogue box */ > SE_GROUP_ENGINE, N_("[file name [, scale, blend]]"), NULL }, > >- { "set_video_size", js_set_video_size, 0, 0, >+ { "set_video_size", js_set_video_size, 0, JSFUN_FAST_NATIVE, > SE_GROUP_PROPERTIES, N_("int"), NULL }, > > #ifdef WITH_DEPRECATED > #ifdef WITH_OBSOLETE >- { "set_speed", js_set_speed, 0, 0, >+ { "set_speed", js_set_speed, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "get_speed", js_get_speed, 0, 0, >+ { "get_speed", js_get_speed, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "set_volume", js_set_volume, 0, 0, >+ { "set_volume", js_set_volume, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "get_volume", js_get_volume, 0, 0, >+ { "get_volume", js_get_volume, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "set_mute", js_set_mute, 0, 0, >+ { "set_mute", js_set_mute, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "get_mute", js_get_mute, 0, 0, >+ { "get_mute", js_get_mute, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "set_zoom", js_set_zoom, 0, 0, >+ { "set_zoom", js_set_zoom, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "get_zoom", js_get_zoom, 0, 0, >+ { "get_zoom", js_get_zoom, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, > #endif /* WITH_OBSOLETE */ >- { "set_fullscreen", js_set_fullscreen, 0, 0, >+ { "set_fullscreen", js_set_fullscreen, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, > #ifdef WITH_OBSOLETE >- { "set_aspect", js_set_aspect, 0, 0, >+ { "set_aspect", js_set_aspect, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "set_deinterlace", js_set_deinterlace, 0, 0, >+ { "set_deinterlace", js_set_deinterlace, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "set_postproc_video", js_set_postproc_video, 0, 0, >+ { "set_postproc_video", js_set_postproc_video, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "set_postproc_audio", js_set_postproc_audio, 0, 0, >+ { "set_postproc_audio", js_set_postproc_audio, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "set_auto_resize", js_set_auto_resize, 0, 0, >+ { "set_auto_resize", js_set_auto_resize, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, >- { "set_auto_rescale", js_set_auto_rescale, 0, 0, >+ { "set_auto_rescale", js_set_auto_rescale, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, > #endif /* WITH_OBSOLETE */ > #endif /* WITH_DEPRECATED */ > >- { "is_live_stream", js_is_live_stream, 0, 0, >+ { "is_live_stream", js_is_live_stream, 0, JSFUN_FAST_NATIVE, > SE_GROUP_PROPERTIES, NULL, NULL }, > { NULL } > }; >--- gxine-0.5.905.orig/src/wizards.c >+++ gxine-0.5.905/src/wizards.c >@@ -414,17 +414,17 @@ void run_wizards (gboolean requested) > } > } > >-static JSBool js_run_wizards (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_run_wizards (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > se_log_fncall_checkinit ("run_wizards"); > run_wizards (TRUE); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > void wizards_init (void) > { >- se_defun (gse, NULL, "run_wizards", js_run_wizards, 0, 0, >+ se_defun (gse, NULL, "run_wizards", js_run_wizards, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL); > } >--- gxine-0.5.905.orig/src/open_mrl.c >+++ gxine-0.5.905/src/open_mrl.c >@@ -88,21 +88,21 @@ static void open_mrl_response_cb (GtkDia > } > } > >-static JSBool js_open_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_open_show (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > se_log_fncall_checkinit ("open_show"); > file_dialog_show (); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_open_mrl_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_open_mrl_show (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > se_log_fncall_checkinit ("open_mrl_show"); > open_mrl_show (); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -142,8 +142,8 @@ void open_mrl_init (void) > > { > static const se_f_def_t defs[] = { >- { "open_show", js_open_show, 0, 0, SE_GROUP_FILE, NULL, NULL }, >- { "open_mrl_show", js_open_mrl_show, 0, 0, SE_GROUP_FILE, NULL, NULL }, >+ { "open_show", js_open_show, 0, JSFUN_FAST_NATIVE, SE_GROUP_FILE, NULL, NULL }, >+ { "open_mrl_show", js_open_mrl_show, 0, JSFUN_FAST_NATIVE, SE_GROUP_FILE, NULL, NULL }, > { NULL } > }; > se_defuns (gse, NULL, defs); >--- gxine-0.5.905.orig/src/key_events.c >+++ gxine-0.5.905/src/key_events.c >@@ -1041,10 +1041,13 @@ static JSBool js_xine_event (int type > #endif > > #define JS_XINE_EVENT(L,T) \ >- static JSBool js_##L (JSContext *cx, JSObject *obj, uintN argc, \ >- jsval *argv, jsval *rval) \ >+ static JSBool js_##L (JSContext *cx, uintN argc, jsval *vp) \ > { \ >- return js_xine_event (XINE_EVENT_##T, #L); \ >+ JSBool ret = js_xine_event (XINE_EVENT_##T, #L); \ >+ if (ret) { \ >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); \ >+ } \ >+ return ret; \ > } > > JS_XINE_EVENT (input_up, INPUT_UP); >@@ -1091,16 +1094,15 @@ JS_XINE_EVENT (input_menu3, INPUT_MENU3) > JS_XINE_EVENT (input_previous, INPUT_PREVIOUS); > JS_XINE_EVENT (input_next, INPUT_NEXT); > >-static JSBool js_keybindings_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_keybindings_show (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall_checkinit ("keybindings_show"); > kb_edit_show (); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_keypad_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_keypad_show (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall_checkinit ("keypad_show"); > if (keypad) >@@ -1110,6 +1112,7 @@ static JSBool js_keypad_show (JSContext > else > window_show (keypad, NULL); > } >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -1247,8 +1250,8 @@ static const kb_xine_event_map_t xine_vd > } > }; > >-JSBool js_event_generic (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, >- jsval *rval, const char *func, const char *const *prefix, >+JSBool js_event_generic (JSContext *cx, uintN argc, jsval *vp, >+ const char *func, const char *const *prefix, > ...) > { > se_t *se = (se_t *) JS_GetContextPrivate(cx); >@@ -1257,8 +1260,9 @@ JSBool js_event_generic (JSContext *cx, > char *evstr; > va_list ap; > const kb_xine_event_map_t *evlist; >+ jsval *argv = JS_ARGV (cx, vp); > >- *rval = JSVAL_TRUE; >+ JS_SET_RVAL (cx, vp, JSVAL_TRUE); > > se_log_fncall (func); > se_argc_check_max (1, func); >@@ -1275,7 +1279,7 @@ JSBool js_event_generic (JSContext *cx, > > se_arg_is_string (0, func); > >- *rval = JSVAL_FALSE; >+ JS_SET_RVAL (cx, vp, JSVAL_FALSE); > > if (prefix) > { >@@ -1294,7 +1298,7 @@ JSBool js_event_generic (JSContext *cx, > } > > str = JS_ValueToString (cx, argv[0]); >- evstr = JS_GetStringBytes (str); >+ evstr = SE_JS_ENCODE_STRING (cx, str); > event.type = 0; > > va_start (ap, prefix); >@@ -1306,8 +1310,10 @@ JSBool js_event_generic (JSContext *cx, > event.type = kb_xine_event_lookup (NULL, evstr); > > if (!event.type) >+ { >+ SE_JS_FREE_ENCODED_STRING (cx, evstr); > return JS_TRUE; >- >+ } > if (event.type != -1) > { > event.data = NULL; >@@ -1316,21 +1322,20 @@ JSBool js_event_generic (JSContext *cx, > xine_event_send (stream, &event); > } > >- *rval = JSVAL_TRUE; >+ SE_JS_FREE_ENCODED_STRING (cx, evstr); >+ JS_SET_RVAL (cx, vp, JSVAL_TRUE); > return JS_TRUE; > } > >-static JSBool js_event (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_event (JSContext *cx, uintN argc, jsval *vp) > { >- return js_event_generic (cx, obj, argc, argv, rval, "event", NULL, NULL); >+ return js_event_generic (cx, argc, vp, "event", NULL, NULL); > } > >-static JSBool js_vdr (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_vdr (JSContext *cx, uintN argc, jsval *vp) > { > const char *const prefixes[] = { "vdr:/", "netvdr:/", NULL }; >- return js_event_generic (cx, obj, argc, argv, rval, "vdr", prefixes, >+ return js_event_generic (cx, argc, vp, "vdr", prefixes, > &xine_vdr, NULL); > } > >@@ -1528,25 +1533,25 @@ void key_events_init (void) > > { > static const se_f_def_t defs[] = { >- { "input_up", js_input_up, 0, 0, SE_GROUP_INPUT, NULL, NULL }, >- { "input_down", js_input_down, 0, 0, SE_GROUP_INPUT, NULL, NULL }, >- { "input_left", js_input_left, 0, 0, SE_GROUP_INPUT, NULL, NULL }, >- { "input_right", js_input_right, 0, 0, SE_GROUP_INPUT, NULL, NULL }, >- { "input_select", js_input_select, 0, 0, SE_GROUP_INPUT, NULL, NULL }, >- { "input_menu", js_input_menu, 0, 0, >+ { "input_up", js_input_up, 0, JSFUN_FAST_NATIVE, SE_GROUP_INPUT, NULL, NULL }, >+ { "input_down", js_input_down, 0, JSFUN_FAST_NATIVE, SE_GROUP_INPUT, NULL, NULL }, >+ { "input_left", js_input_left, 0, JSFUN_FAST_NATIVE, SE_GROUP_INPUT, NULL, NULL }, >+ { "input_right", js_input_right, 0, JSFUN_FAST_NATIVE, SE_GROUP_INPUT, NULL, NULL }, >+ { "input_select", js_input_select, 0, JSFUN_FAST_NATIVE, SE_GROUP_INPUT, NULL, NULL }, >+ { "input_menu", js_input_menu, 0, JSFUN_FAST_NATIVE, > SE_GROUP_INPUT, N_("int"), N_("range is 1 to 7") }, >- { "input_menu1", js_input_menu1, 0, 0, SE_GROUP_INPUT, NULL, NULL }, >- { "input_menu2", js_input_menu2, 0, 0, SE_GROUP_INPUT, NULL, NULL }, >- { "input_menu3", js_input_menu3, 0, 0, SE_GROUP_INPUT, NULL, NULL }, >- { "input_previous", js_input_previous, 0, 0, SE_GROUP_INPUT, NULL, NULL }, >- { "input_next", js_input_next, 0, 0, SE_GROUP_INPUT, NULL, NULL }, >- { "keybindings_show", js_keybindings_show, 0, 0, >+ { "input_menu1", js_input_menu1, 0, JSFUN_FAST_NATIVE, SE_GROUP_INPUT, NULL, NULL }, >+ { "input_menu2", js_input_menu2, 0, JSFUN_FAST_NATIVE, SE_GROUP_INPUT, NULL, NULL }, >+ { "input_menu3", js_input_menu3, 0, JSFUN_FAST_NATIVE, SE_GROUP_INPUT, NULL, NULL }, >+ { "input_previous", js_input_previous, 0, JSFUN_FAST_NATIVE, SE_GROUP_INPUT, NULL, NULL }, >+ { "input_next", js_input_next, 0, JSFUN_FAST_NATIVE, SE_GROUP_INPUT, NULL, NULL }, >+ { "keybindings_show", js_keybindings_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_DIALOGUE, NULL, NULL }, >- { "keypad_show", js_keypad_show, 0, 0, >+ { "keypad_show", js_keypad_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_DIALOGUE, NULL, NULL }, >- { "event", js_event, 0, 0, >+ { "event", js_event, 0, JSFUN_FAST_NATIVE, > SE_GROUP_INPUT, N_("string"), N_("event; returns true if sent") }, >- { "vdr", js_vdr, 0, 0, >+ { "vdr", js_vdr, 0, JSFUN_FAST_NATIVE, > SE_GROUP_EXTERNAL, N_("string"), N_("VDR event; returns true if sent") }, > { NULL } > }; >--- gxine-0.5.905.orig/src/preferences.c >+++ gxine-0.5.905/src/preferences.c >@@ -1106,12 +1106,12 @@ static void response_cb (GtkDialog *dbox > } > } > >-static JSBool js_preferences_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_preferences_show (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > se_log_fncall_checkinit ("preferences_show"); > preferences_show (); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -1171,7 +1171,7 @@ void preferences_init (void) > { > is_visible = FALSE; > /* script engine functions */ >- se_defun (gse, NULL, "preferences_show", js_preferences_show, 0, 0, >+ se_defun (gse, NULL, "preferences_show", js_preferences_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_DIALOGUE, NULL, NULL); > > preferences_init_dbox (); >--- gxine-0.5.905.orig/src/lirc.c >+++ gxine-0.5.905/src/lirc.c >@@ -212,8 +212,7 @@ void gxine_lirc_quit (void) > #endif > } > >-static JSBool js_reload_lirc (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_reload_lirc (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall ("reload_lirc"); > se_argc_check_max (0, "reload_lirc"); >@@ -221,13 +220,13 @@ static JSBool js_reload_lirc (JSContext > if (gxine_lirc_thread) > pthread_join (gxine_lirc_thread, NULL); > gxine_lirc_start (); >- *rval = gxine_lirc_thread ? JSVAL_TRUE : JSVAL_FALSE; >+ JS_SET_RVAL (cx, vp, gxine_lirc_thread ? JSVAL_TRUE : JSVAL_FALSE); > return JS_TRUE; > } > > void gxine_lirc_init (void) > { >- se_defun (gse, NULL, "reload_lirc", js_reload_lirc, 0, 0, >+ se_defun (gse, NULL, "reload_lirc", js_reload_lirc, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL); > gxine_lirc_start (); > } >--- gxine-0.5.905.orig/src/script_engine.h >+++ gxine-0.5.905/src/script_engine.h >@@ -34,6 +34,97 @@ > #include <jsapi.h> > #include <pthread.h> > >+#ifndef JSFUN_FAST_NATIVE >+// All natives are JSFastNative >+#define JSFUN_FAST_NATIVE 0 >+#endif >+ >+#ifdef HAVE_JS_GET_STRING_BYTES >+# define SE_JS_ENCODE_STRING(cx, str) JS_GetStringBytes(str) >+# define SE_JS_FREE_ENCODED_STRING(cx, str) >+#else >+# define SE_JS_ENCODE_STRING(cx, str) JS_EncodeString(cx, str) >+# define SE_JS_FREE_ENCODED_STRING(cx, str) JS_free(cx, str) >+#endif >+ >+#ifdef HAVE_JS_NEW_DOUBLE >+# define SE_JS_NEW_NUMBER_VAL(cx, d, rval) \ >+ jsdouble *new_d = JS_NewDouble (cx, d); \ >+ rval = DOUBLE_TO_JSVAL (new_d) >+#else >+# define SE_JS_NEW_NUMBER_VAL(cx, d, rval) \ >+ JS_NewNumberValue (cx, d, &rval) >+#endif >+ >+#ifdef JS_PROPERTY_OP_HAS_ID_AS_JSID >+# define SE_JS_PROPERTY_GETTER_DECLARE(name) \ >+ static JSBool \ >+ name(JSContext *cx, JSObject *obj, jsid id, jsval *vp) >+# define SE_JS_PROPERTY_GETTER_INIT_VARIABLES(idval) \ >+ jsval idval; \ >+ JS_IdToValue (cx, id, &idval) >+# define SE_JS_CALL_PROPERTY_GETTER_WITH_JSVAL(getter, cx, obj, propval, vp) __extension__ ({ \ >+ jsid propid; \ >+ JS_ValueToId (cx, propval, &propid); \ >+ JSBool ret = getter (cx, obj, propid, vp); \ >+ ret; \ >+}) >+#else >+# define SE_JS_PROPERTY_GETTER_DECLARE(name) \ >+ static JSBool \ >+ name(JSContext *cx, JSObject *obj, jsval id, jsval *vp) >+# define SE_JS_PROPERTY_GETTER_INIT_VARIABLES(idval) \ >+ jsval idval = id >+# define SE_JS_CALL_PROPERTY_GETTER_WITH_JSVAL(getter, cx, obj, propval, vp) __extension__ ({ \ >+ JSBool ret = getter (cx, obj, propval, vp); \ >+ ret; \ >+}) >+#endif >+ >+#ifdef HAVE_JS_STRICT_PROPERTY_OP >+# define SE_JS_PROPERTY_SETTER_DECLARE(name) \ >+ static JSBool \ >+ name(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp) >+# define SE_JS_PROPERTY_SETTER_INIT_VARIABLES(idval) \ >+ jsval idval; \ >+ JS_IdToValue (cx, id, &idval) >+# define SE_JS_CALL_PROPERTY_SETTER_WITH_JSVAL(setter, cx, obj, propval, vp) __extension__ ({ \ >+ jsid propid; \ >+ JS_ValueToId (cx, propval, &propid); \ >+ JSBool ret = setter (cx, obj, propid, JS_FALSE, vp); \ >+ ret; \ >+}) >+#elif JS_PROPERTY_OP_HAS_ID_AS_JSID >+# define SE_JS_PROPERTY_SETTER_DECLARE(name) \ >+ static JSBool \ >+ name(JSContext *cx, JSObject *obj, jsid id, jsval *vp) >+# define SE_JS_PROPERTY_SETTER_INIT_VARIABLES(idval) \ >+ jsval idval; \ >+ JS_IdToValue (cx, id, &idval) >+# define SE_JS_CALL_PROPERTY_SETTER_WITH_JSVAL(setter, cx, obj, propval, vp) __extension__ ({ \ >+ jsid propid; \ >+ JS_ValueToId (cx, propval, &propid); \ >+ JSBool ret = setter (cx, obj, propid, vp); \ >+ ret; \ >+}) >+#else >+# define SE_JS_PROPERTY_SETTER_DECLARE(name) \ >+ static JSBool \ >+ name(JSContext *cx, JSObject *obj, jsval id, jsval *vp) >+# define SE_JS_PROPERTY_SETTER_INIT_VARIABLES(idval) \ >+ jsval idval = id >+# define SE_JS_CALL_PROPERTY_SETTER_WITH_JSVAL(setter, cx, obj, propval, vp) __extension__ ({ \ >+ JSBool ret = setter (cx, obj, propval, vp); \ >+ ret; \ >+}) >+#endif >+ >+#ifdef JSVAL_TO_DOUBLE_RETURNS_POINTER >+# define SE_JSVAL_TO_DOUBLE(v) *JSVAL_TO_DOUBLE(v) >+#else >+# define SE_JSVAL_TO_DOUBLE(v) JSVAL_TO_DOUBLE(v) >+#endif >+ > typedef int (*se_prop_int_cb_t) (void *user_data, char *property, int *num); > typedef void (*se_print_cb_t) (void *user_data, const char *str, ...) > __attribute__ ((format (printf, 2, 3))); >--- gxine-0.5.905.orig/src/systray.c >+++ gxine-0.5.905/src/systray.c >@@ -214,10 +214,10 @@ button_cb (GtkWidget *widget, GdkEventBu > return TRUE; > } > >-static JSBool js_minimise (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_minimise (JSContext *cx, uintN argc, jsval *vp) > { > int32 tray_state=-1; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_checkinit ("set_minimised"); > se_argc_check_max (1, "set_minimised"); >@@ -239,13 +239,14 @@ static JSBool js_minimise (JSContext *cx > app_show (); > } > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > void systray_init (void) > { > static const se_f_def_t defs[] = { >- { "set_minimised", js_minimise, 0, 0, >+ { "set_minimised", js_minimise, 0, JSFUN_FAST_NATIVE, > SE_GROUP_ENGINE, N_("[bool]"), > N_("true to hide, false to show") }, > { NULL } >--- gxine-0.5.905.orig/src/settings.c >+++ gxine-0.5.905/src/settings.c >@@ -129,10 +129,10 @@ get_sliders (const struct slider_window_ > } > > #define JSFUNC(OBJ,FUNC) \ >- static JSBool js_##OBJ##_##FUNC (JSContext *cx, JSObject *obj, uintN argc, \ >- jsval *argv, jsval *rval) \ >+ static JSBool js_##OBJ##_##FUNC (JSContext *cx, uintN argc, jsval *vp) \ > { \ > int page = -1; \ >+ jsval *argv = JS_ARGV (cx, vp); \ > se_log_fncall_checkinit (#OBJ"_"#FUNC); \ > se_argc_check_max (1, #OBJ"_"#FUNC); \ > if (argc) \ >@@ -141,11 +141,14 @@ get_sliders (const struct slider_window_ > JS_ValueToInt32 (cx, argv[0], &page); \ > } \ > sliders_##FUNC (&OBJ##_window, page, TRUE); \ >+ if (vp) { \ >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); \ >+ } \ > return JS_TRUE; \ > } > > #define JSDECL(OBJ,FUNC) \ >- { #OBJ"_"#FUNC, js_##OBJ##_##FUNC, 0, 0,SE_GROUP_DIALOGUE, NULL, NULL } >+ { #OBJ"_"#FUNC, js_##OBJ##_##FUNC, 0, JSFUN_FAST_NATIVE,SE_GROUP_DIALOGUE, NULL, NULL } > > static void sliders_show (struct slider_window_s *window, guint page, > gboolean unused) >@@ -331,5 +334,5 @@ void settings_init (void) > > void settings_clear (void) > { >- js_settings_clear (gse->cx, NULL, 0, NULL, NULL); >+ js_settings_clear (gse->cx, 0, NULL); > } >--- gxine-0.5.905.orig/src/post.c >+++ gxine-0.5.905/src/post.c >@@ -1079,38 +1079,47 @@ post_config_post_chain_window (gxine_cha > } > > static JSBool >-js_deinterlace_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+js_deinterlace_show (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall_checkinit ("deinterlace_show"); >- return post_config_post_chain_window (&chains[POST_CHAIN_DEINTERLACE]); >+ JSBool ret = post_config_post_chain_window (&chains[POST_CHAIN_DEINTERLACE]); >+ if (ret) { >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); >+ } >+ return ret; > } > > static JSBool >-js_pp_video_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+js_pp_video_show (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall_checkinit ("postproc_video_show"); >- return post_config_post_chain_window (&chains[POST_CHAIN_VIDEO]); >+ JSBool ret = post_config_post_chain_window (&chains[POST_CHAIN_VIDEO]); >+ if (ret) { >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); >+ } >+ return ret; > } > > static JSBool >-js_pp_audio_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+js_pp_audio_show (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall_checkinit ("postproc_audio_show"); >- return post_config_post_chain_window (&chains[POST_CHAIN_AUDIO]); >+ JSBool ret = post_config_post_chain_window (&chains[POST_CHAIN_AUDIO]); >+ if (ret) { >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); >+ } >+ return ret; > } > > void > post_init (void) > { > static const se_f_def_t defs[] = { >- { "deinterlace_show", js_deinterlace_show, 0, 0, >+ { "deinterlace_show", js_deinterlace_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_DIALOGUE, NULL, NULL }, >- { "postproc_video_show", js_pp_video_show, 0, 0, >+ { "postproc_video_show", js_pp_video_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_DIALOGUE, NULL, NULL }, >- { "postproc_audio_show", js_pp_audio_show, 0, 0, >+ { "postproc_audio_show", js_pp_audio_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_DIALOGUE, NULL, NULL }, > { NULL } > }; >--- gxine-0.5.905.orig/src/playlist.c >+++ gxine-0.5.905/src/playlist.c >@@ -2123,71 +2123,70 @@ static void drop_cb (GtkTreeView *widget > * js functions > */ > >-static JSBool js_playlist_get_item (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_playlist_get_item (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > se_log_fncall ("playlist_get_item"); >- *rval = INT_TO_JSVAL (playlist_get_list_pos()); >+ JS_SET_RVAL (cx, vp, INT_TO_JSVAL (playlist_get_list_pos())); > return JS_TRUE; > } > >-static JSBool js_playlist_clear (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_playlist_clear (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall_checkinit ("playlist_clear"); > playlist_clear (); >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_playlist_flush (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_playlist_flush (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall_checkinit ("playlist_flush"); > playlist_flush (PLAY_ITEM_NORMAL); >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_playlist_load (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_playlist_load (JSContext *cx, uintN argc, jsval *vp) > { >+ jsval *argv = JS_ARGV (cx, vp); > se_log_fncall_checkinit ("playlist_load"); > > se_argc_check (1, "playlist_load"); > se_arg_is_string_or_null (0, "playlist_load"); > >- char *mrl = JS_GetStringBytes (JS_ValueToString (cx, argv[0])); >+ char *mrl = SE_JS_ENCODE_STRING (cx, JS_ValueToString (cx, argv[0])); > > logprintf ("playlist_load: file=%s\n", mrl); > playlist_load_any (mrl); > >- *rval = JSVAL_VOID; >+ SE_JS_FREE_ENCODED_STRING (cx, mrl); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_playlist_add (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_playlist_add (JSContext *cx, uintN argc, jsval *vp) > { >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_checkinit ("playlist_add"); > > se_argc_check_range (1, 2, "playlist_add"); > se_arg_is_string (0, "playlist_add"); > >- char *mrl = JS_GetStringBytes (JS_ValueToString (cx, argv[0])); >+ char *mrl = SE_JS_ENCODE_STRING (cx, JS_ValueToString (cx, argv[0])); > int item; > > if (argc > 1) > { > se_arg_is_string_or_null (1, "playlist_add"); > char *title = JSVAL_IS_STRING (argv[1]) >- ? JS_GetStringBytes (JS_ValueToString (cx, argv[1])) >+ ? SE_JS_ENCODE_STRING (cx, JS_ValueToString (cx, argv[1])) > : NULL; > logprintf ("playlist_add: MRL=%s title=%s\n", mrl, title); > play_item_t *play_item = play_item_new (title, mrl, 0, 0); > item = playlist_add (play_item, -1); >+ SE_JS_FREE_ENCODED_STRING (cx, title); > } > else > { >@@ -2195,14 +2194,15 @@ static JSBool js_playlist_add (JSContext > item = playlist_add_mrl (mrl, -1); > } > >- *rval = INT_TO_JSVAL (item); >+ SE_JS_FREE_ENCODED_STRING (cx, mrl); >+ JS_SET_RVAL (cx, vp, INT_TO_JSVAL (item)); > > return JS_TRUE; > } > >-static JSBool js_playlist_delete (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_playlist_delete (JSContext *cx, uintN argc, jsval *vp) > { >+ jsval *argv = JS_ARGV (cx, vp); > se_log_fncall_checkinit ("playlist_remove"); > > se_argc_check_range (1, 2, "playlist_remove"); >@@ -2227,14 +2227,14 @@ static JSBool js_playlist_delete (JSCont > gtk_list_store_remove (pl_store, &iter); > } > >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_playlist_play (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_playlist_play (JSContext *cx, uintN argc, jsval *vp) > { > int32 item; >+ jsval *argv = JS_ARGV (cx, vp); > > se_log_fncall_checkinit ("playlist_play"); > >@@ -2245,21 +2245,19 @@ static JSBool js_playlist_play (JSContex > > playlist_play (item); > >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_playlist_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_playlist_show (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall_checkinit ("playlist_show"); > playlist_show (); >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_mrl_browser_refresh (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_mrl_browser_refresh (JSContext *cx, uintN argc, jsval *vp) > { > GtkTreeIter iter; > se_log_fncall_checkinit ("mrl_browser_refresh"); >@@ -2270,14 +2268,14 @@ static JSBool js_mrl_browser_refresh (JS > || !item_marked_current (&iter)) > { > playlist_flush (PLAY_ITEM_BROWSER); >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > CUR_ITEM_LOCK (); > playlist_browse_set (cur_item ? : playlist_get_item (cur_list_pos)); > CUR_ITEM_UNLOCK (); >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -2604,23 +2602,23 @@ void playlist_init (void) > > { > static const se_f_def_t defs[] = { >- { "playlist_show", js_playlist_show, 0, 0, >+ { "playlist_show", js_playlist_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_DIALOGUE, NULL, NULL }, >- { "playlist_clear", js_playlist_clear, 0, 0, >+ { "playlist_clear", js_playlist_clear, 0, JSFUN_FAST_NATIVE, > SE_GROUP_PLAYLIST, NULL, NULL }, >- { "playlist_flush", js_playlist_flush, 0, 0, >+ { "playlist_flush", js_playlist_flush, 0, JSFUN_FAST_NATIVE, > SE_GROUP_PLAYLIST, NULL, NULL }, >- { "playlist_load", js_playlist_load, 0, 0, >+ { "playlist_load", js_playlist_load, 0, JSFUN_FAST_NATIVE, > SE_GROUP_PLAYLIST, N_("file"), NULL }, >- { "playlist_add", js_playlist_add, 0, 0, >+ { "playlist_add", js_playlist_add, 0, JSFUN_FAST_NATIVE, > SE_GROUP_PLAYLIST, N_("MRL[, title]"), NULL }, >- { "playlist_delete", js_playlist_delete, 0, 0, >+ { "playlist_delete", js_playlist_delete, 0, JSFUN_FAST_NATIVE, > SE_GROUP_PLAYLIST, N_("int"), NULL }, >- { "playlist_play", js_playlist_play, 0, 0, >+ { "playlist_play", js_playlist_play, 0, JSFUN_FAST_NATIVE, > SE_GROUP_PLAYLIST, N_("int"), N_("playlist entry number") }, >- { "playlist_get_item", js_playlist_get_item, 0, 0, >+ { "playlist_get_item", js_playlist_get_item, 0, JSFUN_FAST_NATIVE, > SE_GROUP_PLAYLIST, NULL, NULL }, >- { "mrl_browser_refresh", js_mrl_browser_refresh, 0, 0, >+ { "mrl_browser_refresh", js_mrl_browser_refresh, 0, JSFUN_FAST_NATIVE, > SE_GROUP_HIDDEN, NULL, NULL }, > { NULL } > }; >--- gxine-0.5.905.orig/src/key_events.h >+++ gxine-0.5.905/src/key_events.h >@@ -52,8 +52,7 @@ void save_key_bindings (void); > /* returns xine event number (XINE_EVENT_*) or 0 on failure */ > int kb_xine_event_lookup (const kb_xine_event_map_t *, const char *); > >-JSBool js_event_generic (JSContext *, JSObject *, uintN argc, jsval *argv, >- jsval *rval, const char *func, >+JSBool js_event_generic (JSContext *, uintN argc, jsval *vp, const char *func, > const char *const *mrlprefix, ...) > __attribute__ ((sentinel)); > >--- gxine-0.5.905.orig/src/xml_widgets.c >+++ gxine-0.5.905/src/xml_widgets.c >@@ -186,13 +186,13 @@ stock_toggle_cb (GtkToggleButton *button > ui_set_status (UI_CURRENT_STATE); > } > >-#define JS_WIDGET() ((se_o_t *)JS_GetPrivate (cx, obj))->user_data >+#define JS_WIDGET() ((se_o_t *)JS_GetPrivate (cx, JS_THIS_OBJECT (cx, vp)))->user_data > > static JSBool >-js_set_show (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+js_set_show (JSContext *cx, uintN argc, jsval *vp) > { > int v, all = 0; >+ jsval *argv = JS_ARGV (cx, vp); > se_log_fncall ("<widget>.set_show"); > se_argc_check_range (1, 2, "<widget>.set_show"); > se_arg_is_int_or_bool (0, "<widget>.set_show"); >@@ -210,28 +210,30 @@ js_set_show (JSContext *cx, JSObject *ob > gtk_widget_show (JS_WIDGET ()); > else > gtk_widget_hide (JS_WIDGET ()); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > static JSBool >-js_set_sensitive (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+js_set_sensitive (JSContext *cx, uintN argc, jsval *vp) > { > int v; >+ jsval *argv = JS_ARGV (cx, vp); > se_log_fncall ("<widget>.set_sensitive"); > se_argc_check (1, "<widget>.set_sensitive"); > se_arg_is_int_or_bool (0, "<widget>.set_sensitive"); > JS_ValueToBoolean (cx, argv[0], &v); > gtk_widget_set_sensitive (JS_WIDGET (), v); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > static JSBool >-js_activate (JSContext *cx, JSObject *obj, >- uintN argc, jsval *argv, jsval *rval) >+js_activate (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall ("<widget>.activate"); > gtk_widget_activate (JS_WIDGET ()); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -1257,9 +1259,9 @@ widget_parse (xml_node_t *node) > se_o_t *se_widget; > char *se_name, *se_dot; > static const se_f_def_t defs[] = { >- { "set_show", js_set_show, 0, 0, SE_GROUP_HIDDEN, NULL, NULL }, >- { "set_sensitive", js_set_sensitive, 0, 0, SE_GROUP_HIDDEN, NULL, NULL }, >- { "activate", js_activate, 0, 0, SE_GROUP_HIDDEN, NULL, NULL }, >+ { "set_show", js_set_show, 0, JSFUN_FAST_NATIVE, SE_GROUP_HIDDEN, NULL, NULL }, >+ { "set_sensitive", js_set_sensitive, 0, JSFUN_FAST_NATIVE, SE_GROUP_HIDDEN, NULL, NULL }, >+ { "activate", js_activate, 0, JSFUN_FAST_NATIVE, SE_GROUP_HIDDEN, NULL, NULL }, > { NULL } > }; > if (!se_widget_space) >--- gxine-0.5.905.orig/src/mediamarks.c >+++ gxine-0.5.905/src/mediamarks.c >@@ -680,30 +680,30 @@ void mm_save (void) > g_free(fname); > } > >-static JSBool js_mm_add_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_mm_add_show (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > se_log_fncall_checkinit ("mm_add_show"); > mm_add_show (NULL); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_mm_manage_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_mm_manage_show (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > se_log_fncall_checkinit ("mm_manage_show"); > mm_manage_show (); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >-static JSBool js_import_mediamarks (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_import_mediamarks (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > se_log_fncall_checkinit ("import_mediamarks"); > mm_import (); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -950,11 +950,11 @@ void mediamarks_init (void) > > { > static const se_f_def_t defs[] = { >- { "mm_add_show", js_mm_add_show, 0, 0, >+ { "mm_add_show", js_mm_add_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_DIALOGUE, NULL, NULL }, >- { "mm_manage_show", js_mm_manage_show, 0, 0, >+ { "mm_manage_show", js_mm_manage_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_DIALOGUE, NULL, NULL }, >- { "import_mediamarks", js_import_mediamarks, 0, 0, >+ { "import_mediamarks", js_import_mediamarks, 0, JSFUN_FAST_NATIVE, > SE_GROUP_FILE, NULL, NULL }, > { NULL } > }; >--- gxine-0.5.905.orig/src/engine.c >+++ gxine-0.5.905/src/engine.c >@@ -56,7 +56,7 @@ GAsyncQueue *js_queue; > static gboolean queue_available = FALSE; > > static JSBool >-show_about (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) >+show_about (JSContext *cx, uintN argc, jsval *vp) > { > static const gchar *const authors[] = { > "Darren Salt <dsalt@users.sourceforge.net>", >@@ -126,7 +126,7 @@ show_about (JSContext *cx, JSObject *obj > } > > window_show (about, NULL); >- *rval = JSVAL_VOID; >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -184,8 +184,10 @@ int engine_exec_obj (const char *cmd, se > if ((str = se_result_str (gse))) > { > /* JS output. Could end up in a terminal or the JS console. */ >+ char *free_str = str; > str = g_strdup_printf (_("result: %s"), str); > cb (cb_data, "%s", str); >+ free (free_str); > free (str); > } > else if (se_result_double (gse, &num.d)) >@@ -405,12 +407,12 @@ se_startup_response_cb (GtkWidget *widge > } > > static JSBool >-show_startup (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+show_startup (JSContext *cx, uintN argc, jsval *vp) > { > if (!GTK_WIDGET_VISIBLE (se_startup_window)) > reset_startup_buffer (se_startup_cmds); > window_show (se_startup_window, NULL); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -439,8 +441,8 @@ void engine_init (void) > gse = se_new (); > > static const se_f_def_t defs[] = { >- { "about_show", show_about, 0, 0, SE_GROUP_DIALOGUE, NULL, NULL }, >- { "startup_cmds_show", show_startup, 0, 0, SE_GROUP_DIALOGUE, NULL, NULL }, >+ { "about_show", show_about, 0, JSFUN_FAST_NATIVE, SE_GROUP_DIALOGUE, NULL, NULL }, >+ { "startup_cmds_show", show_startup, 0, JSFUN_FAST_NATIVE, SE_GROUP_DIALOGUE, NULL, NULL }, > { NULL } > }; > se_defuns (gse, gse->g, defs); >--- gxine-0.5.905.orig/src/log_window.c >+++ gxine-0.5.905/src/log_window.c >@@ -220,11 +220,11 @@ static void switch_cb (GtkNotebook *note > gtk_dialog_set_response_sensitive ((GtkDialog *) win, GTK_RESPONSE_YES, !is_cp); > } > >-static JSBool js_log_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_log_show (JSContext *cx, uintN argc, jsval *vp) > { > se_log_fncall ("log_show"); > log_window_show (); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -379,7 +379,7 @@ void log_window_init (void) > > /* script engine functions */ > >- se_defun (gse, NULL, "log_show", js_log_show, 0, 0, >+ se_defun (gse, NULL, "log_show", js_log_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_DIALOGUE, NULL, NULL); > } > >--- gxine-0.5.905.orig/src/vis.c >+++ gxine-0.5.905/src/vis.c >@@ -66,23 +66,26 @@ void vis_set (const char *str) > gtk_action_activate (action->data); > } > >-static JSBool js_set_vis (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_set_vis (JSContext *cx, uintN argc, jsval *vp) > { >+ jsval *argv = JS_ARGV (cx, vp); > se_log_fncall ("js_set_vis"); > se_argc_check (1, "set_vis"); > se_arg_is_string (0, "set_vis"); > > JSString *str = JS_ValueToString (cx, argv[0]); >- vis_set (JS_GetStringBytes (str)); >+ char *cstr = SE_JS_ENCODE_STRING (cx, str); >+ vis_set (cstr); >+ SE_JS_FREE_ENCODED_STRING (cx, cstr); > >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > > void vis_init (void) > { > xine_cfg_entry_t entry; >- se_defun (gse, NULL, "set_vis", js_set_vis, 0, 0, >+ se_defun (gse, NULL, "set_vis", js_set_vis, 0, JSFUN_FAST_NATIVE, > SE_GROUP_ENGINE, N_("string"), N_("visualisation name")); > if (xine_config_lookup_entry (xine, "post_audio_plugin", &entry)) > gtk_video_select_vis ((GtkVideo *)gtv, entry.str_value, &audio_port); >--- gxine-0.5.905.orig/src/stream_info.c >+++ gxine-0.5.905/src/stream_info.c >@@ -180,12 +180,12 @@ static void response_cb (GtkDialog *dbox > } > } > >-static JSBool js_stream_info_show (JSContext *cx, JSObject *obj, uintN argc, >- jsval *argv, jsval *rval) >+static JSBool js_stream_info_show (JSContext *cx, uintN argc, jsval *vp) > { > /* se_t *se = (se_t *) JS_GetContextPrivate(cx); */ > se_log_fncall_checkinit ("stream_info_show"); > stream_info_show (); >+ JS_SET_RVAL (cx, vp, JSVAL_VOID); > return JS_TRUE; > } > >@@ -235,6 +235,6 @@ void stream_info_init (void) > > is_visible = FALSE; > >- se_defun (gse, NULL, "stream_info_show", js_stream_info_show, 0, 0, >+ se_defun (gse, NULL, "stream_info_show", js_stream_info_show, 0, JSFUN_FAST_NATIVE, > SE_GROUP_DIALOGUE, N_("[bool]"), NULL); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 360971
:
267567
| 282105 |
282107