1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-12-04 14:46:47 -05:00

[mozjs45] Code is unstable, but at least compiles.

This commit is contained in:
Witold Filipczyk 2020-10-23 22:34:58 +02:00
parent 01c511f52d
commit a5b68a25a1
26 changed files with 882 additions and 822 deletions

View File

@ -612,11 +612,11 @@ case "$with_spidermonkey" in
;; ;;
esac esac
for package in mozjs-38; do for package in mozjs-45; do
if test -n "$CONFIG_SPIDERMONKEY"; then if test -n "$CONFIG_SPIDERMONKEY"; then
break break
else else
AC_MSG_CHECKING([for SpiderMonkey (mozjs-38) in pkg-config $package]) AC_MSG_CHECKING([for SpiderMonkey (mozjs-45) in pkg-config $package])
if $PKG_CONFIG --cflags --libs $package > /dev/null 2>&AS_MESSAGE_LOG_FD; then if $PKG_CONFIG --cflags --libs $package > /dev/null 2>&AS_MESSAGE_LOG_FD; then
SPIDERMONKEY_LIBS="$($PKG_CONFIG --libs $package)" SPIDERMONKEY_LIBS="$($PKG_CONFIG --libs $package)"
SPIDERMONKEY_CFLAGS="$($PKG_CONFIG --cflags $package)" SPIDERMONKEY_CFLAGS="$($PKG_CONFIG --cflags $package)"

View File

@ -271,7 +271,7 @@ if conf_data.get('CONFIG_BZIP2')
endif endif
if conf_data.get('CONFIG_ECMASCRIPT') if conf_data.get('CONFIG_ECMASCRIPT')
mozjsdeps = dependency('mozjs-38') mozjsdeps = dependency('mozjs-45')
deps += mozjsdeps deps += mozjsdeps
endif endif

View File

@ -8,6 +8,7 @@
#include "elinks.h" #include "elinks.h"
#include "ecmascript/spidermonkey-shared.h" #include "ecmascript/spidermonkey-shared.h"
#include <js/Initialization.h>
/** A shared runtime used for both user scripts (scripting/smjs/) and /** A shared runtime used for both user scripts (scripting/smjs/) and
* scripts on web pages (ecmascript/spidermonkey/). * scripts on web pages (ecmascript/spidermonkey/).

View File

@ -53,20 +53,20 @@ JSObject *spidermonkey_InitClass(JSContext *cx, JSObject *obj,
JSPropertySpec *static_ps, JSPropertySpec *static_ps,
const spidermonkeyFunctionSpec *static_fs); const spidermonkeyFunctionSpec *static_fs);
static void undef_to_jsval(JSContext *ctx, jsval *vp); static void undef_to_jsval(JSContext *ctx, JS::Value *vp);
static unsigned char *jsval_to_string(JSContext *ctx, jsval *vp); static unsigned char *jsval_to_string(JSContext *ctx, JS::Value *vp);
static unsigned char *jsid_to_string(JSContext *ctx, jsid *id); static unsigned char *jsid_to_string(JSContext *ctx, jsid *id);
/* Inline functions */ /* Inline functions */
static inline void static inline void
undef_to_jsval(JSContext *ctx, jsval *vp) undef_to_jsval(JSContext *ctx, JS::Value *vp)
{ {
*vp = JSVAL_NULL; *vp = JS::NullValue();
} }
static inline unsigned char * static inline unsigned char *
jsval_to_string(JSContext *ctx, jsval *vp) jsval_to_string(JSContext *ctx, JS::Value *vp)
{ {
JS::RootedValue r_vp(ctx, *vp); JS::RootedValue r_vp(ctx, *vp);
JSString *str = r_vp.toString(); JSString *str = r_vp.toString();
@ -85,6 +85,6 @@ jsid_to_string(JSContext *ctx, jsid *id)
} }
#define ELINKS_CAST_PROP_PARAMS JSObject *obj = (hobj.get()); \ #define ELINKS_CAST_PROP_PARAMS JSObject *obj = (hobj.get()); \
jsval *vp = (hvp.address()); JS::Value *vp = (hvp.address());
#endif #endif

View File

@ -11,6 +11,7 @@
#include "elinks.h" #include "elinks.h"
#include "ecmascript/spidermonkey/util.h" #include "ecmascript/spidermonkey/util.h"
#include <jsprf.h>
#include "bfu/dialog.h" #include "bfu/dialog.h"
#include "cache/cache.h" #include "cache/cache.h"
@ -66,6 +67,8 @@ error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
unsigned char *strict, *exception, *warning, *error; unsigned char *strict, *exception, *warning, *error;
struct string msg; struct string msg;
char *prefix = nullptr;
assert(interpreter && interpreter->vs && interpreter->vs->doc_view assert(interpreter && interpreter->vs && interpreter->vs->doc_view
&& ses && ses->tab); && ses && ses->tab);
if_assert_failed goto reported; if_assert_failed goto reported;
@ -92,6 +95,20 @@ error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
add_to_string(&msg, ":\n\n"); add_to_string(&msg, ":\n\n");
add_to_string(&msg, message); add_to_string(&msg, message);
if (report->filename) {
prefix = JS_smprintf("%s:", report->filename);
}
if (report->lineno) {
char* tmp = prefix;
prefix = JS_smprintf("%s%u:%u ", tmp ? tmp : "", report->lineno, report->column);
JS_free(ctx, tmp);
}
if (prefix) {
add_to_string(&msg, prefix);
}
#if 0
if (report->linebuf && report->tokenptr) { if (report->linebuf && report->tokenptr) {
int pos = report->tokenptr - report->linebuf; int pos = report->tokenptr - report->linebuf;
@ -100,6 +117,7 @@ error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
pos - 2, " ", pos - 2, " ",
strlen(report->linebuf) - pos - 1, " "); strlen(report->linebuf) - pos - 1, " ");
} }
#endif
info_box(term, MSGBOX_FREE_TEXT, N_("JavaScript Error"), ALIGN_CENTER, info_box(term, MSGBOX_FREE_TEXT, N_("JavaScript Error"), ALIGN_CENTER,
msg.source); msg.source);
@ -182,6 +200,7 @@ spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter)
if (!forms_obj) { if (!forms_obj) {
goto release_and_fail; goto release_and_fail;
} }
// JS_SetPrivate(forms_obj, interpreter->vs);
history_obj = spidermonkey_InitClass(ctx, window_obj, NULL, history_obj = spidermonkey_InitClass(ctx, window_obj, NULL,
&history_class, NULL, 0, &history_class, NULL, 0,
@ -191,6 +210,8 @@ spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter)
if (!history_obj) { if (!history_obj) {
goto release_and_fail; goto release_and_fail;
} }
// JS_SetPrivate(history_obj, interpreter->vs);
location_obj = spidermonkey_InitClass(ctx, window_obj, NULL, location_obj = spidermonkey_InitClass(ctx, window_obj, NULL,
&location_class, NULL, 0, &location_class, NULL, 0,
@ -200,8 +221,10 @@ spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter)
if (!location_obj) { if (!location_obj) {
goto release_and_fail; goto release_and_fail;
} }
// JS_SetPrivate(location_obj, interpreter->vs);
menubar_obj = JS_InitClass(ctx, window_obj, JS::NullPtr(),
menubar_obj = JS_InitClass(ctx, window_obj, nullptr,
&menubar_class, NULL, 0, &menubar_class, NULL, 0,
unibar_props, NULL, unibar_props, NULL,
NULL, NULL); NULL, NULL);
@ -210,7 +233,7 @@ spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter)
} }
JS_SetPrivate(menubar_obj, "t"); /* to @menubar_class */ JS_SetPrivate(menubar_obj, "t"); /* to @menubar_class */
statusbar_obj = JS_InitClass(ctx, window_obj, JS::NullPtr(), statusbar_obj = JS_InitClass(ctx, window_obj, nullptr,
&statusbar_class, NULL, 0, &statusbar_class, NULL, 0,
unibar_props, NULL, unibar_props, NULL,
NULL, NULL); NULL, NULL);
@ -219,13 +242,14 @@ spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter)
} }
JS_SetPrivate(statusbar_obj, "s"); /* to @statusbar_class */ JS_SetPrivate(statusbar_obj, "s"); /* to @statusbar_class */
navigator_obj = JS_InitClass(ctx, window_obj, JS::NullPtr(), navigator_obj = JS_InitClass(ctx, window_obj, nullptr,
&navigator_class, NULL, 0, &navigator_class, NULL, 0,
navigator_props, NULL, navigator_props, NULL,
NULL, NULL); NULL, NULL);
if (!navigator_obj) { if (!navigator_obj) {
goto release_and_fail; goto release_and_fail;
} }
// JS_SetPrivate(navigator_obj, interpreter->vs);
return ctx; return ctx;
@ -252,7 +276,7 @@ spidermonkey_eval(struct ecmascript_interpreter *interpreter,
struct string *code, struct string *ret) struct string *code, struct string *ret)
{ {
JSContext *ctx; JSContext *ctx;
jsval rval; JS::Value rval;
assert(interpreter); assert(interpreter);
if (!js_module_init_ok) { if (!js_module_init_ok) {
@ -267,7 +291,7 @@ spidermonkey_eval(struct ecmascript_interpreter *interpreter,
JS::RootedValue r_val(ctx, rval); JS::RootedValue r_val(ctx, rval);
JS::CompileOptions options(ctx); JS::CompileOptions options(ctx);
JS::Evaluate(ctx, cg, options, code->source, code->length, &r_val); JS::Evaluate(ctx, options, code->source, code->length, &r_val);
done_heartbeat(interpreter->heartbeat); done_heartbeat(interpreter->heartbeat);
} }
@ -278,7 +302,7 @@ spidermonkey_eval_stringback(struct ecmascript_interpreter *interpreter,
{ {
bool ret; bool ret;
JSContext *ctx; JSContext *ctx;
jsval rval; JS::Value rval;
assert(interpreter); assert(interpreter);
if (!js_module_init_ok) return NULL; if (!js_module_init_ok) return NULL;
@ -295,7 +319,7 @@ spidermonkey_eval_stringback(struct ecmascript_interpreter *interpreter,
// .setCompileAndGo(true) // .setCompileAndGo(true)
// .setNoScriptRval(true); // .setNoScriptRval(true);
ret = JS::Evaluate(ctx, cg, options, code->source, code->length, &r_rval); ret = JS::Evaluate(ctx, options, code->source, code->length, &r_rval);
done_heartbeat(interpreter->heartbeat); done_heartbeat(interpreter->heartbeat);
if (ret == false) { if (ret == false) {
@ -315,8 +339,7 @@ spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter,
struct string *code) struct string *code)
{ {
JSContext *ctx; JSContext *ctx;
JS::RootedFunction fun(ctx); JS::Value rval;
jsval rval;
int ret; int ret;
assert(interpreter); assert(interpreter);
@ -324,9 +347,11 @@ spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter,
ctx = interpreter->backend_data; ctx = interpreter->backend_data;
interpreter->ret = NULL; interpreter->ret = NULL;
JS::RootedFunction fun(ctx);
JS::CompileOptions options(ctx); JS::CompileOptions options(ctx);
JS::AutoObjectVector ag(ctx); JS::AutoObjectVector ag(ctx);
if (!JS::CompileFunction(ctx, ag, options, "", 0, nullptr, code->source, if (!JS::CompileFunction(ctx, ag, options, "aaa", 0, nullptr, code->source,
code->length, &fun)) { code->length, &fun)) {
return -1; return -1;
}; };

View File

@ -11,6 +11,7 @@
#include "elinks.h" #include "elinks.h"
#include "ecmascript/spidermonkey/util.h" #include "ecmascript/spidermonkey/util.h"
#include <jsfriendapi.h>
#include "bfu/dialog.h" #include "bfu/dialog.h"
#include "cache/cache.h" #include "cache/cache.h"
@ -60,11 +61,11 @@ JSClass document_class = {
#ifdef CONFIG_COOKIES #ifdef CONFIG_COOKIES
static bool static bool
document_get_property_cookie(JSContext *ctx, unsigned int argc, jsval *vp) document_get_property_cookie(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, js::GetGlobalForObjectCrossCompartment(hobj));
struct view_state *vs; struct view_state *vs;
struct string *cookies; struct string *cookies;
@ -92,15 +93,14 @@ document_get_property_cookie(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
document_set_property_cookie(JSContext *ctx, unsigned int argc, jsval *vp) document_set_property_cookie(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, js::GetGlobalForObjectCrossCompartment(hobj));
struct view_state *vs; struct view_state *vs;
struct string *cookies; struct string *cookies;
parent_win = JS_GetParent(hobj);
assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL)); assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL));
if_assert_failed return false; if_assert_failed return false;
@ -117,11 +117,11 @@ document_set_property_cookie(JSContext *ctx, unsigned int argc, jsval *vp)
#endif #endif
static bool static bool
document_get_property_location(JSContext *ctx, unsigned int argc, jsval *vp) document_get_property_location(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, js::GetGlobalForObjectCrossCompartment(hobj));
assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL)); assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL));
if_assert_failed return false; if_assert_failed return false;
@ -132,11 +132,11 @@ document_get_property_location(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
document_set_property_location(JSContext *ctx, unsigned int argc, jsval *vp) document_set_property_location(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, js::GetGlobalForObjectCrossCompartment(hobj));
struct view_state *vs; struct view_state *vs;
struct document_view *doc_view; struct document_view *doc_view;
@ -156,11 +156,11 @@ document_set_property_location(JSContext *ctx, unsigned int argc, jsval *vp)
static bool static bool
document_get_property_referrer(JSContext *ctx, unsigned int argc, jsval *vp) document_get_property_referrer(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, js::GetGlobalForObjectCrossCompartment(hobj));
struct view_state *vs; struct view_state *vs;
struct document_view *doc_view; struct document_view *doc_view;
struct document *document; struct document *document;
@ -220,11 +220,11 @@ document_get_property_referrer(JSContext *ctx, unsigned int argc, jsval *vp)
static bool static bool
document_get_property_title(JSContext *ctx, unsigned int argc, jsval *vp) document_get_property_title(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, js::GetGlobalForObjectCrossCompartment(hobj));
struct view_state *vs; struct view_state *vs;
struct document_view *doc_view; struct document_view *doc_view;
struct document *document; struct document *document;
@ -245,11 +245,11 @@ document_get_property_title(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
document_set_property_title(JSContext *ctx, int argc, jsval *vp) document_set_property_title(JSContext *ctx, int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, js::GetGlobalForObjectCrossCompartment(hobj));
struct view_state *vs; struct view_state *vs;
struct document_view *doc_view; struct document_view *doc_view;
struct document *document; struct document *document;
@ -271,11 +271,11 @@ document_set_property_title(JSContext *ctx, int argc, jsval *vp)
} }
static bool static bool
document_get_property_url(JSContext *ctx, unsigned int argc, jsval *vp) document_get_property_url(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, js::GetGlobalForObjectCrossCompartment(hobj));
struct view_state *vs; struct view_state *vs;
struct document_view *doc_view; struct document_view *doc_view;
struct document *document; struct document *document;
@ -303,11 +303,11 @@ document_get_property_url(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
document_set_property_url(JSContext *ctx, int argc, jsval *vp) document_set_property_url(JSContext *ctx, int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, js::GetGlobalForObjectCrossCompartment(hobj));
struct view_state *vs; struct view_state *vs;
struct document_view *doc_view; struct document_view *doc_view;
struct document *document; struct document *document;
@ -360,7 +360,7 @@ document_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, J
if (classPtr != &document_class) if (classPtr != &document_class)
return false; return false;
parent_win = JS_GetParent(obj); parent_win = js::GetGlobalForObjectCrossCompartment(hobj);
assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL)); assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL));
if_assert_failed return false; if_assert_failed return false;
@ -381,8 +381,8 @@ document_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, J
return true; return true;
} }
static bool document_write(JSContext *ctx, unsigned int argc, jsval *rval); static bool document_write(JSContext *ctx, unsigned int argc, JS::Value *rval);
static bool document_writeln(JSContext *ctx, unsigned int argc, jsval *rval); static bool document_writeln(JSContext *ctx, unsigned int argc, JS::Value *rval);
const spidermonkeyFunctionSpec document_funcs[] = { const spidermonkeyFunctionSpec document_funcs[] = {
{ "write", document_write, 1 }, { "write", document_write, 1 },
@ -391,9 +391,9 @@ const spidermonkeyFunctionSpec document_funcs[] = {
}; };
static bool static bool
document_write_do(JSContext *ctx, unsigned int argc, jsval *rval, int newline) document_write_do(JSContext *ctx, unsigned int argc, JS::Value *rval, int newline)
{ {
jsval val; JS::Value val;
struct ecmascript_interpreter *interpreter = JS_GetContextPrivate(ctx); struct ecmascript_interpreter *interpreter = JS_GetContextPrivate(ctx);
struct string *ret = interpreter->ret; struct string *ret = interpreter->ret;
JS::CallArgs args = JS::CallArgsFromVp(argc, rval); JS::CallArgs args = JS::CallArgsFromVp(argc, rval);
@ -428,7 +428,7 @@ document_write_do(JSContext *ctx, unsigned int argc, jsval *rval, int newline)
/* @document_funcs{"write"} */ /* @document_funcs{"write"} */
static bool static bool
document_write(JSContext *ctx, unsigned int argc, jsval *rval) document_write(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
return document_write_do(ctx, argc, rval, 0); return document_write_do(ctx, argc, rval, 0);
@ -436,7 +436,7 @@ document_write(JSContext *ctx, unsigned int argc, jsval *rval)
/* @document_funcs{"writeln"} */ /* @document_funcs{"writeln"} */
static bool static bool
document_writeln(JSContext *ctx, unsigned int argc, jsval *rval) document_writeln(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
return document_write_do(ctx, argc, rval, 1); return document_write_do(ctx, argc, rval, 1);
} }

File diff suppressed because it is too large Load Diff

View File

@ -11,6 +11,7 @@
#include "elinks.h" #include "elinks.h"
#include "ecmascript/spidermonkey/util.h" #include "ecmascript/spidermonkey/util.h"
#include <jsfriendapi.h>
#include "bfu/dialog.h" #include "bfu/dialog.h"
#include "cache/cache.h" #include "cache/cache.h"
@ -45,9 +46,9 @@
#include "viewer/text/vs.h" #include "viewer/text/vs.h"
static bool history_back(JSContext *ctx, unsigned int argc, jsval *rval); static bool history_back(JSContext *ctx, unsigned int argc, JS::Value *rval);
static bool history_forward(JSContext *ctx, unsigned int argc, jsval *rval); static bool history_forward(JSContext *ctx, unsigned int argc, JS::Value *rval);
static bool history_go(JSContext *ctx, unsigned int argc, jsval *rval); static bool history_go(JSContext *ctx, unsigned int argc, JS::Value *rval);
JSClass history_class = { JSClass history_class = {
"history", "history",
@ -66,7 +67,7 @@ const spidermonkeyFunctionSpec history_funcs[] = {
/* @history_funcs{"back"} */ /* @history_funcs{"back"} */
static bool static bool
history_back(JSContext *ctx, unsigned int argc, jsval *rval) history_back(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
struct ecmascript_interpreter *interpreter = JS_GetContextPrivate(ctx); struct ecmascript_interpreter *interpreter = JS_GetContextPrivate(ctx);
struct document_view *doc_view = interpreter->vs->doc_view; struct document_view *doc_view = interpreter->vs->doc_view;
@ -85,7 +86,7 @@ history_back(JSContext *ctx, unsigned int argc, jsval *rval)
/* @history_funcs{"forward"} */ /* @history_funcs{"forward"} */
static bool static bool
history_forward(JSContext *ctx, unsigned int argc, jsval *rval) history_forward(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
struct ecmascript_interpreter *interpreter = JS_GetContextPrivate(ctx); struct ecmascript_interpreter *interpreter = JS_GetContextPrivate(ctx);
struct document_view *doc_view = interpreter->vs->doc_view; struct document_view *doc_view = interpreter->vs->doc_view;
@ -100,7 +101,7 @@ history_forward(JSContext *ctx, unsigned int argc, jsval *rval)
/* @history_funcs{"go"} */ /* @history_funcs{"go"} */
static bool static bool
history_go(JSContext *ctx, unsigned int argc, jsval *rval) history_go(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
struct ecmascript_interpreter *interpreter = JS_GetContextPrivate(ctx); struct ecmascript_interpreter *interpreter = JS_GetContextPrivate(ctx);
struct document_view *doc_view = interpreter->vs->doc_view; struct document_view *doc_view = interpreter->vs->doc_view;
@ -130,8 +131,8 @@ history_go(JSContext *ctx, unsigned int argc, jsval *rval)
} }
static bool location_get_property_href(JSContext *ctx, unsigned int argc, jsval *vp); static bool location_get_property_href(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool location_set_property_href(JSContext *ctx, unsigned int argc, jsval *vp); static bool location_set_property_href(JSContext *ctx, unsigned int argc, JS::Value *vp);
/* Each @location_class object must have a @window_class parent. */ /* Each @location_class object must have a @window_class parent. */
JSClass location_class = { JSClass location_class = {
@ -156,7 +157,7 @@ JSPropertySpec location_props[] = {
static bool static bool
location_get_property_href(JSContext *ctx, unsigned int argc, jsval *vp) location_get_property_href(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -169,7 +170,7 @@ location_get_property_href(JSContext *ctx, unsigned int argc, jsval *vp)
if (!JS_InstanceOf(ctx, hobj, &location_class, NULL)) if (!JS_InstanceOf(ctx, hobj, &location_class, NULL))
return false; return false;
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, GetGlobalForObjectCrossCompartment(hobj));
assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL)); assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL));
if_assert_failed return false; if_assert_failed return false;
@ -192,7 +193,7 @@ location_get_property_href(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
location_set_property_href(JSContext *ctx, unsigned int argc, jsval *vp) location_set_property_href(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -206,7 +207,7 @@ location_set_property_href(JSContext *ctx, unsigned int argc, jsval *vp)
if (!JS_InstanceOf(ctx, hobj, &location_class, NULL)) if (!JS_InstanceOf(ctx, hobj, &location_class, NULL))
return false; return false;
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, GetGlobalForObjectCrossCompartment(hobj));
assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL)); assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL));
if_assert_failed return false; if_assert_failed return false;
@ -222,7 +223,7 @@ location_set_property_href(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool location_toString(JSContext *ctx, unsigned int argc, jsval *rval); static bool location_toString(JSContext *ctx, unsigned int argc, JS::Value *rval);
const spidermonkeyFunctionSpec location_funcs[] = { const spidermonkeyFunctionSpec location_funcs[] = {
{ "toString", location_toString, 0 }, { "toString", location_toString, 0 },
@ -232,9 +233,9 @@ const spidermonkeyFunctionSpec location_funcs[] = {
/* @location_funcs{"toString"}, @location_funcs{"toLocaleString"} */ /* @location_funcs{"toString"}, @location_funcs{"toLocaleString"} */
static bool static bool
location_toString(JSContext *ctx, unsigned int argc, jsval *rval) location_toString(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
jsval val; JS::Value val;
JSObject *obj = JS_THIS_OBJECT(ctx, rval); JSObject *obj = JS_THIS_OBJECT(ctx, rval);
JS::CallArgs args = JS::CallArgsFromVp(argc, rval); JS::CallArgs args = JS::CallArgsFromVp(argc, rval);
JS::RootedObject hobj(ctx, obj); JS::RootedObject hobj(ctx, obj);

View File

@ -44,12 +44,12 @@
#include "viewer/text/vs.h" #include "viewer/text/vs.h"
static bool navigator_get_property_appCodeName(JSContext *ctx, unsigned int argc, jsval *vp); static bool navigator_get_property_appCodeName(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool navigator_get_property_appName(JSContext *ctx, unsigned int argc, jsval *vp); static bool navigator_get_property_appName(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool navigator_get_property_appVersion(JSContext *ctx, unsigned int argc, jsval *vp); static bool navigator_get_property_appVersion(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool navigator_get_property_language(JSContext *ctx, unsigned int argc, jsval *vp); static bool navigator_get_property_language(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool navigator_get_property_platform(JSContext *ctx, unsigned int argc, jsval *vp); static bool navigator_get_property_platform(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool navigator_get_property_userAgent(JSContext *ctx, unsigned int argc, jsval *vp); static bool navigator_get_property_userAgent(JSContext *ctx, unsigned int argc, JS::Value *vp);
JSClass navigator_class = { JSClass navigator_class = {
"navigator", "navigator",
@ -87,7 +87,7 @@ JSPropertySpec navigator_props[] = {
/* @navigator_class.getProperty */ /* @navigator_class.getProperty */
static bool static bool
navigator_get_property_appCodeName(JSContext *ctx, unsigned int argc, jsval *vp) navigator_get_property_appCodeName(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
args.rval().setString(JS_NewStringCopyZ(ctx, "Mozilla")); /* More like a constant nowadays. */ args.rval().setString(JS_NewStringCopyZ(ctx, "Mozilla")); /* More like a constant nowadays. */
@ -96,7 +96,7 @@ navigator_get_property_appCodeName(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
navigator_get_property_appName(JSContext *ctx, unsigned int argc, jsval *vp) navigator_get_property_appName(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
args.rval().setString(JS_NewStringCopyZ(ctx, args.rval().setString(JS_NewStringCopyZ(ctx,
@ -106,7 +106,7 @@ navigator_get_property_appName(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
navigator_get_property_appVersion(JSContext *ctx, unsigned int argc, jsval *vp) navigator_get_property_appVersion(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
args.rval().setString(JS_NewStringCopyZ(ctx, VERSION)); args.rval().setString(JS_NewStringCopyZ(ctx, VERSION));
@ -115,7 +115,7 @@ navigator_get_property_appVersion(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
navigator_get_property_language(JSContext *ctx, unsigned int argc, jsval *vp) navigator_get_property_language(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
@ -131,7 +131,7 @@ navigator_get_property_language(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
navigator_get_property_platform(JSContext *ctx, unsigned int argc, jsval *vp) navigator_get_property_platform(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
args.rval().setString(JS_NewStringCopyZ(ctx, system_name)); args.rval().setString(JS_NewStringCopyZ(ctx, system_name));
@ -140,7 +140,7 @@ navigator_get_property_platform(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
navigator_get_property_userAgent(JSContext *ctx, unsigned int argc, jsval *vp) navigator_get_property_userAgent(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
unsigned char *optstr; unsigned char *optstr;

View File

@ -11,6 +11,7 @@
#include "elinks.h" #include "elinks.h"
#include "ecmascript/spidermonkey/util.h" #include "ecmascript/spidermonkey/util.h"
#include <jsfriendapi.h>
#include "bfu/dialog.h" #include "bfu/dialog.h"
#include "cache/cache.h" #include "cache/cache.h"
@ -44,8 +45,8 @@
#include "viewer/text/link.h" #include "viewer/text/link.h"
#include "viewer/text/vs.h" #include "viewer/text/vs.h"
static bool unibar_get_property_visible(JSContext *ctx, unsigned int argc, jsval *vp); static bool unibar_get_property_visible(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool unibar_set_property_visible(JSContext *ctx, unsigned int argc, jsval *vp); static bool unibar_set_property_visible(JSContext *ctx, unsigned int argc, JS::Value *vp);
/* Each @menubar_class object must have a @window_class parent. */ /* Each @menubar_class object must have a @window_class parent. */
JSClass menubar_class = { JSClass menubar_class = {
@ -79,7 +80,7 @@ JSPropertySpec unibar_props[] = {
static bool static bool
unibar_get_property_visible(JSContext *ctx, unsigned int argc, jsval *vp) unibar_get_property_visible(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -96,7 +97,7 @@ unibar_get_property_visible(JSContext *ctx, unsigned int argc, jsval *vp)
&& !JS_InstanceOf(ctx, hobj, &statusbar_class, NULL)) && !JS_InstanceOf(ctx, hobj, &statusbar_class, NULL))
return false; return false;
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, js::GetGlobalForObjectCrossCompartment(hobj));
assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL)); assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL));
if_assert_failed return false; if_assert_failed return false;
@ -130,7 +131,7 @@ unibar_get_property_visible(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
unibar_set_property_visible(JSContext *ctx, unsigned int argc, jsval *vp) unibar_set_property_visible(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -147,7 +148,7 @@ unibar_set_property_visible(JSContext *ctx, unsigned int argc, jsval *vp)
&& !JS_InstanceOf(ctx, hobj, &statusbar_class, NULL)) && !JS_InstanceOf(ctx, hobj, &statusbar_class, NULL))
return false; return false;
JS::RootedObject parent_win(ctx, JS_GetParent(hobj)); JS::RootedObject parent_win(ctx, js::GetGlobalForObjectCrossCompartment(hobj));
assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL)); assert(JS_InstanceOf(ctx, parent_win, &window_class, NULL));
if_assert_failed return false; if_assert_failed return false;

View File

@ -5,56 +5,56 @@
#include "ecmascript/spidermonkey-shared.h" #include "ecmascript/spidermonkey-shared.h"
#include "util/memory.h" #include "util/memory.h"
static void string_to_jsval(JSContext *ctx, jsval *vp, unsigned char *string); static void string_to_jsval(JSContext *ctx, JS::Value *vp, unsigned char *string);
static void astring_to_jsval(JSContext *ctx, jsval *vp, unsigned char *string); static void astring_to_jsval(JSContext *ctx, JS::Value *vp, unsigned char *string);
static void int_to_jsval(JSContext *ctx, jsval *vp, int number); static void int_to_jsval(JSContext *ctx, JS::Value *vp, int number);
static void object_to_jsval(JSContext *ctx, jsval *vp, JSObject *object); static void object_to_jsval(JSContext *ctx, JS::Value *vp, JSObject *object);
static void boolean_to_jsval(JSContext *ctx, jsval *vp, int boolean); static void boolean_to_jsval(JSContext *ctx, JS::Value *vp, int boolean);
static int jsval_to_boolean(JSContext *ctx, jsval *vp); static int jsval_to_boolean(JSContext *ctx, JS::Value *vp);
/** Inline functions */ /** Inline functions */
static inline void static inline void
string_to_jsval(JSContext *ctx, jsval *vp, unsigned char *string) string_to_jsval(JSContext *ctx, JS::Value *vp, unsigned char *string)
{ {
if (!string) { if (!string) {
*vp = JSVAL_NULL; *vp = JS::NullValue();
} else { } else {
*vp = STRING_TO_JSVAL(JS_NewStringCopyZ(ctx, string)); *vp = JS::StringValue(JS_NewStringCopyZ(ctx, string));
} }
} }
static inline void static inline void
astring_to_jsval(JSContext *ctx, jsval *vp, unsigned char *string) astring_to_jsval(JSContext *ctx, JS::Value *vp, unsigned char *string)
{ {
string_to_jsval(ctx, vp, string); string_to_jsval(ctx, vp, string);
mem_free_if(string); mem_free_if(string);
} }
static inline void static inline void
int_to_jsval(JSContext *ctx, jsval *vp, int number) int_to_jsval(JSContext *ctx, JS::Value *vp, int number)
{ {
*vp = INT_TO_JSVAL(number); *vp = JS::Int32Value(number);
} }
static inline void static inline void
object_to_jsval(JSContext *ctx, jsval *vp, JSObject *object) object_to_jsval(JSContext *ctx, JS::Value *vp, JSObject *object)
{ {
*vp = OBJECT_TO_JSVAL(object); *vp = JS::ObjectValue(*object);
} }
static inline void static inline void
boolean_to_jsval(JSContext *ctx, jsval *vp, int boolean) boolean_to_jsval(JSContext *ctx, JS::Value *vp, int boolean)
{ {
*vp = BOOLEAN_TO_JSVAL(boolean); *vp = JS::BooleanValue(boolean);
} }
static inline int static inline int
jsval_to_boolean(JSContext *ctx, jsval *vp) jsval_to_boolean(JSContext *ctx, JS::Value *vp)
{ {
JS::RootedValue r_vp(ctx, *vp); JS::RootedValue r_vp(ctx, *vp);
return (int)r_vp.toBoolean(); return (int)r_vp.toBoolean();

View File

@ -11,6 +11,7 @@
#include "elinks.h" #include "elinks.h"
#include "ecmascript/spidermonkey/util.h" #include "ecmascript/spidermonkey/util.h"
#include <js/Conversions.h>
#include "bfu/dialog.h" #include "bfu/dialog.h"
#include "cache/cache.h" #include "cache/cache.h"
@ -45,12 +46,12 @@
static bool window_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp); static bool window_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp);
static bool window_get_property_closed(JSContext *cx, unsigned int argc, jsval *vp); static bool window_get_property_closed(JSContext *cx, unsigned int argc, JS::Value *vp);
static bool window_get_property_parent(JSContext *ctx, unsigned int argc, jsval *vp); static bool window_get_property_parent(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool window_get_property_self(JSContext *ctx, unsigned int argc, jsval *vp); static bool window_get_property_self(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool window_get_property_status(JSContext *ctx, unsigned int argc, jsval *vp); static bool window_get_property_status(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool window_set_property_status(JSContext *ctx, unsigned int argc, jsval *vp); static bool window_set_property_status(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool window_get_property_top(JSContext *ctx, unsigned int argc, jsval *vp); static bool window_get_property_top(JSContext *ctx, unsigned int argc, JS::Value *vp);
JSClass window_class = { JSClass window_class = {
"window", "window",
@ -129,7 +130,6 @@ find_child_frame(struct document_view *doc_view, struct frame_desc *tframe)
static bool static bool
window_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp) window_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp)
{ {
ELINKS_CAST_PROP_PARAMS
jsid id = hid.get(); jsid id = hid.get();
struct view_state *vs; struct view_state *vs;
@ -152,7 +152,7 @@ window_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS:
/* TODO: Try other lookups (mainly element lookup) until /* TODO: Try other lookups (mainly element lookup) until
* something yields data. */ * something yields data. */
if (obj) { if (obj) {
object_to_jsval(ctx, vp, obj); hvp.setObject(*obj);
} }
return true; return true;
} }
@ -160,17 +160,17 @@ window_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS:
if (!JSID_IS_INT(id)) if (!JSID_IS_INT(id))
return true; return true;
undef_to_jsval(ctx, vp); hvp.setUndefined();
switch (JSID_TO_INT(id)) { switch (JSID_TO_INT(id)) {
case JSP_WIN_CLOSED: case JSP_WIN_CLOSED:
/* TODO: It will be a major PITA to implement this properly. /* TODO: It will be a major PITA to implement this properly.
* Well, perhaps not so much if we introduce reference tracking * Well, perhaps not so much if we introduce reference tracking
* for (struct session)? Still... --pasky */ * for (struct session)? Still... --pasky */
boolean_to_jsval(ctx, vp, 0); hvp.setBoolean(false);
break; break;
case JSP_WIN_SELF: case JSP_WIN_SELF:
object_to_jsval(ctx, vp, obj); hvp.setObject(*hobj.get());
break; break;
case JSP_WIN_PARENT: case JSP_WIN_PARENT:
/* XXX: It would be nice if the following worked, yes. /* XXX: It would be nice if the following worked, yes.
@ -235,8 +235,9 @@ found_parent:
* is alien but some other child window is not, we should still * is alien but some other child window is not, we should still
* let the script walk thru. That'd mean moving the check to * let the script walk thru. That'd mean moving the check to
* other individual properties in this switch. */ * other individual properties in this switch. */
if (compare_uri(vs->uri, top_view->vs->uri, URI_HOST)) if (compare_uri(vs->uri, top_view->vs->uri, URI_HOST)) {
object_to_jsval(ctx, vp, newjsframe); hvp.setObject(*newjsframe);
}
/* else */ /* else */
/****X*X*X*** SECURITY VIOLATION! RED ALERT, SHIELDS UP! ***X*X*X****\ /****X*X*X*** SECURITY VIOLATION! RED ALERT, SHIELDS UP! ***X*X*X****\
|* (Pasky was apparently looking at the Links2 JS code . ___ ^.^ *| |* (Pasky was apparently looking at the Links2 JS code . ___ ^.^ *|
@ -258,9 +259,9 @@ found_parent:
void location_goto(struct document_view *doc_view, unsigned char *url); void location_goto(struct document_view *doc_view, unsigned char *url);
static bool window_alert(JSContext *ctx, unsigned int argc, jsval *rval); static bool window_alert(JSContext *ctx, unsigned int argc, JS::Value *rval);
static bool window_open(JSContext *ctx, unsigned int argc, jsval *rval); static bool window_open(JSContext *ctx, unsigned int argc, JS::Value *rval);
static bool window_setTimeout(JSContext *ctx, unsigned int argc, jsval *rval); static bool window_setTimeout(JSContext *ctx, unsigned int argc, JS::Value *rval);
const spidermonkeyFunctionSpec window_funcs[] = { const spidermonkeyFunctionSpec window_funcs[] = {
{ "alert", window_alert, 1 }, { "alert", window_alert, 1 },
@ -271,24 +272,30 @@ const spidermonkeyFunctionSpec window_funcs[] = {
/* @window_funcs{"alert"} */ /* @window_funcs{"alert"} */
static bool static bool
window_alert(JSContext *ctx, unsigned int argc, jsval *rval) window_alert(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
jsval val; JS::Value val;
JSObject *obj = JS_THIS_OBJECT(ctx, rval); JSObject *obj = JS_THIS_OBJECT(ctx, rval);
JS::RootedObject hobj(ctx, obj); JS::RootedObject hobj(ctx, obj);
JS::CallArgs args = JS::CallArgsFromVp(argc, rval); JS::CallArgs args = JS::CallArgsFromVp(argc, rval);
// jsval *argv = JS_ARGV(ctx, rval);
// JS::Value *argv = JS_ARGV(ctx, rval);
struct view_state *vs; struct view_state *vs;
unsigned char *string; unsigned char *string;
if (!JS_InstanceOf(ctx, hobj, &window_class, &args)) return false; if (!JS_InstanceOf(ctx, hobj, &window_class, nullptr)) {
return false;
}
vs = JS_GetInstancePrivate(ctx, hobj, &window_class, &args); vs = JS_GetInstancePrivate(ctx, hobj, &window_class, nullptr);
if (argc != 1) if (argc != 1)
return true; return true;
string = jsval_to_string(ctx, args[0].address()); JSString *str = JS::ToString(ctx, args[0]);
string = JS_EncodeString(ctx, str);
if (!*string) if (!*string)
return true; return true;
@ -301,13 +308,13 @@ window_alert(JSContext *ctx, unsigned int argc, jsval *rval)
/* @window_funcs{"open"} */ /* @window_funcs{"open"} */
static bool static bool
window_open(JSContext *ctx, unsigned int argc, jsval *rval) window_open(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
jsval val; JS::Value val;
JSObject *obj = JS_THIS_OBJECT(ctx, rval); JSObject *obj = JS_THIS_OBJECT(ctx, rval);
JS::RootedObject hobj(ctx, obj); JS::RootedObject hobj(ctx, obj);
JS::CallArgs args = JS::CallArgsFromVp(argc, rval); JS::CallArgs args = JS::CallArgsFromVp(argc, rval);
// jsval *argv = JS_ARGV(ctx, rval); // JS::Value *argv = JS_ARGV(ctx, rval);
struct view_state *vs; struct view_state *vs;
struct document_view *doc_view; struct document_view *doc_view;
struct session *ses; struct session *ses;
@ -414,10 +421,10 @@ end:
/* @window_funcs{"setTimeout"} */ /* @window_funcs{"setTimeout"} */
static bool static bool
window_setTimeout(JSContext *ctx, unsigned int argc, jsval *rval) window_setTimeout(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
JS::CallArgs args = JS::CallArgsFromVp(argc, rval); JS::CallArgs args = JS::CallArgsFromVp(argc, rval);
// jsval *argv = JS_ARGV(ctx, rval); // JS::Value *argv = JS_ARGV(ctx, rval);
struct ecmascript_interpreter *interpreter = JS_GetContextPrivate(ctx); struct ecmascript_interpreter *interpreter = JS_GetContextPrivate(ctx);
unsigned char *code; unsigned char *code;
int timeout; int timeout;
@ -460,7 +467,7 @@ window_get_property_closed(JSContext *ctx, JS::HandleObject hobj, JS::HandleId h
#endif #endif
static bool static bool
window_get_property_closed(JSContext *ctx, unsigned int argc, jsval *vp) window_get_property_closed(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
args.rval().setBoolean(false); args.rval().setBoolean(false);
@ -469,7 +476,7 @@ window_get_property_closed(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
window_get_property_parent(JSContext *ctx, unsigned int argc, jsval *vp) window_get_property_parent(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
@ -489,7 +496,7 @@ window_get_property_parent(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
window_get_property_self(JSContext *ctx, unsigned int argc, jsval *vp) window_get_property_self(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
args.rval().setObject(args.thisv().toObject()); args.rval().setObject(args.thisv().toObject());
@ -498,7 +505,7 @@ window_get_property_self(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
window_get_property_status(JSContext *ctx, unsigned int argc, jsval *vp) window_get_property_status(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
args.rval().setUndefined(); args.rval().setUndefined();
@ -507,7 +514,7 @@ window_get_property_status(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
window_set_property_status(JSContext *ctx, unsigned int argc, jsval *vp) window_set_property_status(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
if (args.length() != 1) { if (args.length() != 1) {
@ -529,7 +536,7 @@ window_set_property_status(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
window_get_property_top(JSContext *ctx, unsigned int argc, jsval *vp) window_get_property_top(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);

View File

@ -24,7 +24,7 @@ struct smjs_action_fn_callback_hop {
}; };
static void smjs_action_fn_finalize(JSFreeOp *op, JSObject *obj); static void smjs_action_fn_finalize(JSFreeOp *op, JSObject *obj);
static bool smjs_action_fn_callback(JSContext *ctx, unsigned int argc, jsval *rval); static bool smjs_action_fn_callback(JSContext *ctx, unsigned int argc, JS::Value *rval);
static const JSClass action_fn_class = { static const JSClass action_fn_class = {
"action_fn", "action_fn",
@ -58,9 +58,9 @@ smjs_action_fn_finalize(JSFreeOp *op, JSObject *obj)
/* @action_fn_class.call */ /* @action_fn_class.call */
static bool static bool
smjs_action_fn_callback(JSContext *ctx, unsigned int argc, jsval *rval) smjs_action_fn_callback(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
jsval value; JS::Value value;
JS::CallArgs args = CallArgsFromVp(argc, rval); JS::CallArgs args = CallArgsFromVp(argc, rval);
struct smjs_action_fn_callback_hop *hop; struct smjs_action_fn_callback_hop *hop;
@ -164,7 +164,7 @@ action_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS:
{ {
jsid id = hid.get(); jsid id = hid.get();
jsval val; JS::Value val;
JS::RootedValue rval(ctx, val); JS::RootedValue rval(ctx, val);
JSObject *action_fn; JSObject *action_fn;
unsigned char *action_str; unsigned char *action_str;
@ -206,7 +206,7 @@ smjs_get_action_object(void)
void void
smjs_init_action_interface(void) smjs_init_action_interface(void)
{ {
jsval val; JS::Value val;
struct JSObject *action_object; struct JSObject *action_object;
if (!smjs_ctx || !smjs_elinks_object) if (!smjs_ctx || !smjs_elinks_object)

View File

@ -84,11 +84,11 @@ enum bookmark_prop {
BOOKMARK_CHILDREN = -3, BOOKMARK_CHILDREN = -3,
}; };
static bool bookmark_get_property_title(JSContext *ctx, unsigned int argc, jsval *vp); static bool bookmark_get_property_title(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool bookmark_set_property_title(JSContext *ctx, unsigned int argc, jsval *vp); static bool bookmark_set_property_title(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool bookmark_get_property_url(JSContext *ctx, unsigned int argc, jsval *vp); static bool bookmark_get_property_url(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool bookmark_set_property_url(JSContext *ctx, unsigned int argc, jsval *vp); static bool bookmark_set_property_url(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool bookmark_get_property_children(JSContext *ctx, unsigned int argc, jsval *vp); static bool bookmark_get_property_children(JSContext *ctx, unsigned int argc, JS::Value *vp);
static const JSPropertySpec bookmark_props[] = { static const JSPropertySpec bookmark_props[] = {
JS_PSGS("title", bookmark_get_property_title, bookmark_set_property_title, JSPROP_ENUMERATE), JS_PSGS("title", bookmark_get_property_title, bookmark_set_property_title, JSPROP_ENUMERATE),
@ -104,22 +104,22 @@ static JSObject *smjs_get_bookmark_folder_object(struct bookmark *bookmark);
* @return true if successful. On error, report the error and * @return true if successful. On error, report the error and
* return false. */ * return false. */
static bool static bool
bookmark_string_to_jsval(JSContext *ctx, const unsigned char *str, jsval *vp) bookmark_string_to_jsval(JSContext *ctx, const unsigned char *str, JS::Value *vp)
{ {
JSString *jsstr = utf8_to_jsstring(ctx, str, -1); JSString *jsstr = utf8_to_jsstring(ctx, str, -1);
if (jsstr == NULL) if (jsstr == NULL)
return false; return false;
*vp = STRING_TO_JSVAL(jsstr); *vp = JS::StringValue(jsstr);
return true; return true;
} }
/** Convert a jsval to a string and store it in struct bookmark. /** Convert a JS::Value to a string and store it in struct bookmark.
* *
* @param ctx * @param ctx
* Context for memory allocations and error reports. * Context for memory allocations and error reports.
* @param val * @param val
* The @c jsval that should be converted. * The @c JS::Value that should be converted.
* @param[in,out] result * @param[in,out] result
* A string allocated with mem_alloc(). * A string allocated with mem_alloc().
* On success, this function frees the original string, if any. * On success, this function frees the original string, if any.
@ -149,7 +149,7 @@ jsval_to_bookmark_string(JSContext *ctx, JS::HandleValue val, unsigned char **re
} }
static bool static bool
bookmark_get_property_title(JSContext *ctx, unsigned int argc, jsval *vp) bookmark_get_property_title(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -177,7 +177,7 @@ bookmark_get_property_title(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
bookmark_set_property_title(JSContext *ctx, unsigned int argc, jsval *vp) bookmark_set_property_title(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -208,7 +208,7 @@ bookmark_set_property_title(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
bookmark_get_property_url(JSContext *ctx, unsigned int argc, jsval *vp) bookmark_get_property_url(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -236,7 +236,7 @@ bookmark_get_property_url(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
bookmark_set_property_url(JSContext *ctx, unsigned int argc, jsval *vp) bookmark_set_property_url(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -267,7 +267,7 @@ bookmark_set_property_url(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
bookmark_get_property_children(JSContext *ctx, unsigned int argc, jsval *vp) bookmark_get_property_children(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -319,7 +319,7 @@ bookmark_folder_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId
struct bookmark *bookmark; struct bookmark *bookmark;
struct bookmark *folder; struct bookmark *folder;
jsval val; JS::Value val;
JS::RootedValue title_jsval(ctx, val); JS::RootedValue title_jsval(ctx, val);
unsigned char *title = NULL; unsigned char *title = NULL;
@ -360,7 +360,7 @@ smjs_get_bookmark_folder_object(struct bookmark *bookmark)
void void
smjs_init_bookmarks_interface(void) smjs_init_bookmarks_interface(void)
{ {
jsval val; JS::Value val;
struct JSObject *bookmarks_object; struct JSObject *bookmarks_object;
if (!smjs_ctx || !smjs_elinks_object) if (!smjs_ctx || !smjs_elinks_object)

View File

@ -37,14 +37,14 @@ enum cache_entry_prop {
CACHE_ENTRY_URI = -5, CACHE_ENTRY_URI = -5,
}; };
static bool cache_entry_get_property_content(JSContext *ctx, unsigned int argc, jsval *vp); static bool cache_entry_get_property_content(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool cache_entry_set_property_content(JSContext *ctx, unsigned int argc, jsval *vp); static bool cache_entry_set_property_content(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool cache_entry_get_property_type(JSContext *ctx, unsigned int argc, jsval *vp); static bool cache_entry_get_property_type(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool cache_entry_set_property_type(JSContext *ctx, unsigned int argc, jsval *vp); static bool cache_entry_set_property_type(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool cache_entry_get_property_length(JSContext *ctx, unsigned int argc, jsval *vp); static bool cache_entry_get_property_length(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool cache_entry_get_property_head(JSContext *ctx, unsigned int argc, jsval *vp); static bool cache_entry_get_property_head(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool cache_entry_set_property_head(JSContext *ctx, unsigned int argc, jsval *vp); static bool cache_entry_set_property_head(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool cache_entry_get_property_uri(JSContext *ctx, unsigned int argc, jsval *vp); static bool cache_entry_get_property_uri(JSContext *ctx, unsigned int argc, JS::Value *vp);
static const JSPropertySpec cache_entry_props[] = { static const JSPropertySpec cache_entry_props[] = {
JS_PSGS("content", cache_entry_get_property_content, cache_entry_set_property_content, JSPROP_ENUMERATE), JS_PSGS("content", cache_entry_get_property_content, cache_entry_set_property_content, JSPROP_ENUMERATE),
@ -56,7 +56,7 @@ static const JSPropertySpec cache_entry_props[] = {
}; };
static bool static bool
cache_entry_get_property_content(JSContext *ctx, unsigned int argc, jsval *vp) cache_entry_get_property_content(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -100,7 +100,7 @@ cache_entry_get_property_content(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
cache_entry_set_property_content(JSContext *ctx, unsigned int argc, jsval *vp) cache_entry_set_property_content(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -140,7 +140,7 @@ cache_entry_set_property_content(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
cache_entry_get_property_type(JSContext *ctx, unsigned int argc, jsval *vp) cache_entry_get_property_type(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -172,7 +172,7 @@ cache_entry_get_property_type(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
cache_entry_set_property_type(JSContext *ctx, unsigned int argc, jsval *vp) cache_entry_set_property_type(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -297,7 +297,7 @@ smjs_detach_cache_entry_object(struct cache_entry *cached)
} }
static bool static bool
cache_entry_get_property_length(JSContext *ctx, unsigned int argc, jsval *vp) cache_entry_get_property_length(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -329,7 +329,7 @@ cache_entry_get_property_length(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
cache_entry_get_property_head(JSContext *ctx, unsigned int argc, jsval *vp) cache_entry_get_property_head(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -361,7 +361,7 @@ cache_entry_get_property_head(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
cache_entry_set_property_head(JSContext *ctx, unsigned int argc, jsval *vp) cache_entry_set_property_head(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -399,7 +399,7 @@ cache_entry_set_property_head(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
cache_entry_get_property_uri(JSContext *ctx, unsigned int argc, jsval *vp) cache_entry_get_property_uri(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());

View File

@ -10,6 +10,7 @@
#include "config/home.h" #include "config/home.h"
#include "ecmascript/spidermonkey-shared.h" #include "ecmascript/spidermonkey-shared.h"
#include <jsprf.h>
#include "intl/charsets.h" #include "intl/charsets.h"
#include "main/module.h" #include "main/module.h"
#include "osdep/osdep.h" #include "osdep/osdep.h"
@ -41,6 +42,7 @@ error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
{ {
unsigned char *strict, *exception, *warning, *error; unsigned char *strict, *exception, *warning, *error;
struct string msg; struct string msg;
char *prefix = nullptr;
if (!init_string(&msg)) goto reported; if (!init_string(&msg)) goto reported;
@ -55,14 +57,32 @@ error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
add_to_string(&msg, ":\n\n"); add_to_string(&msg, ":\n\n");
add_to_string(&msg, message); add_to_string(&msg, message);
if (report->linebuf && report->tokenptr) { add_format_to_string(&msg, "\n\n%d:%d ", report->lineno, report->column);
int pos = report->tokenptr - report->linebuf;
if (report->filename) {
prefix = JS_smprintf("%s:", report->filename);
}
if (report->lineno) {
char* tmp = prefix;
prefix = JS_smprintf("%s%u:%u ", tmp ? tmp : "", report->lineno, report->column);
JS_free(ctx, tmp);
}
if (prefix) {
add_to_string(&msg, prefix);
}
#if 0
if (report->linebuf) {
int pos = report->offset;
add_format_to_string(&msg, "\n\n%s\n.%*s^%*s.", add_format_to_string(&msg, "\n\n%s\n.%*s^%*s.",
report->linebuf, report->linebuf,
pos - 2, " ", pos - 2, " ",
strlen(report->linebuf) - pos - 1, " "); strlen(report->linebuf) - pos - 1, " ");
} }
#endif
alert_smjs_error(msg.source); alert_smjs_error(msg.source);
done_string(&msg); done_string(&msg);
@ -79,14 +99,12 @@ smjs_do_file(unsigned char *path)
if (!init_string(&script)) return 0; if (!init_string(&script)) return 0;
jsval val; JS::CompileOptions opts(smjs_ctx);
JS::RootedValue rval(smjs_ctx, val); opts.setNoScriptRval(true);
JS::RootedObject cg(smjs_ctx, JS::CurrentGlobalOrNull(smjs_ctx)); JS::RootedValue rval(smjs_ctx);
JS::CompileOptions options(smjs_ctx);
if (!add_file_to_string(&script, path) if (!add_file_to_string(&script, path)
|| false == JS::Evaluate(smjs_ctx, cg, options, || false == JS::Evaluate(smjs_ctx, opts,
script.source, script.length, &rval)) { script.source, script.length, &rval)) {
alert_smjs_error("error loading script file"); alert_smjs_error("error loading script file");
ret = 0; ret = 0;
@ -98,7 +116,7 @@ smjs_do_file(unsigned char *path)
} }
static bool static bool
smjs_do_file_wrapper(JSContext *ctx, unsigned int argc, jsval *rval) smjs_do_file_wrapper(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
JS::CallArgs args = CallArgsFromVp(argc, rval); JS::CallArgs args = CallArgsFromVp(argc, rval);

View File

@ -33,7 +33,7 @@
/* @elinks_funcs{"alert"} */ /* @elinks_funcs{"alert"} */
static bool static bool
elinks_alert(JSContext *ctx, unsigned int argc, jsval *rval) elinks_alert(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
JS::CallArgs args = CallArgsFromVp(argc, rval); JS::CallArgs args = CallArgsFromVp(argc, rval);
@ -69,7 +69,7 @@ elinks_alert(JSContext *ctx, unsigned int argc, jsval *rval)
/* @elinks_funcs{"execute"} */ /* @elinks_funcs{"execute"} */
static bool static bool
elinks_execute(JSContext *ctx, unsigned int argc, jsval *rval) elinks_execute(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
JS::CallArgs args = CallArgsFromVp(argc, rval); JS::CallArgs args = CallArgsFromVp(argc, rval);
@ -94,10 +94,10 @@ enum elinks_prop {
ELINKS_SESSION, ELINKS_SESSION,
}; };
static bool elinks_get_property_home(JSContext *ctx, unsigned int argc, jsval *vp); static bool elinks_get_property_home(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool elinks_get_property_location(JSContext *ctx, unsigned int argc, jsval *vp); static bool elinks_get_property_location(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool elinks_set_property_location(JSContext *ctx, unsigned int argc, jsval *vp); static bool elinks_set_property_location(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool elinks_get_property_session(JSContext *ctx, unsigned int argc, jsval *vp); static bool elinks_get_property_session(JSContext *ctx, unsigned int argc, JS::Value *vp);
static const JSPropertySpec elinks_props[] = { static const JSPropertySpec elinks_props[] = {
JS_PSG("home", elinks_get_property_home, JSPROP_ENUMERATE), JS_PSG("home", elinks_get_property_home, JSPROP_ENUMERATE),
JS_PSGS("location", elinks_get_property_location, elinks_set_property_location, JSPROP_ENUMERATE), JS_PSGS("location", elinks_get_property_location, elinks_set_property_location, JSPROP_ENUMERATE),
@ -106,7 +106,7 @@ static const JSPropertySpec elinks_props[] = {
}; };
static bool elinks_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp); static bool elinks_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp);
static bool elinks_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, bool strict, JS::MutableHandleValue hvp); static bool elinks_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp);
static const JSClass elinks_class = { static const JSClass elinks_class = {
"elinks", "elinks",
@ -176,7 +176,7 @@ elinks_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS:
} }
static bool static bool
elinks_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, bool strict, JS::MutableHandleValue hvp) elinks_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp)
{ {
jsid id = hid.get(); jsid id = hid.get();
@ -254,7 +254,7 @@ smjs_init_elinks_object(void)
/* If elinks.<method> is defined, call it with the given arguments, /* If elinks.<method> is defined, call it with the given arguments,
* store the return value in rval, and return true. Else return false. */ * store the return value in rval, and return true. Else return false. */
bool bool
smjs_invoke_elinks_object_method(unsigned char *method, int argc, jsval *argv, JS::MutableHandleValue rval) smjs_invoke_elinks_object_method(unsigned char *method, int argc, JS::Value *argv, JS::MutableHandleValue rval)
{ {
JS::CallArgs args = CallArgsFromVp(argc, argv); JS::CallArgs args = CallArgsFromVp(argc, argv);
@ -263,7 +263,7 @@ smjs_invoke_elinks_object_method(unsigned char *method, int argc, jsval *argv, J
assert(argv); assert(argv);
JS::RootedObject r_smjs_elinks_object(smjs_ctx, smjs_elinks_object); JS::RootedObject r_smjs_elinks_object(smjs_ctx, smjs_elinks_object);
jsval val; JS::Value val;
JS::RootedValue fun(smjs_ctx, val); JS::RootedValue fun(smjs_ctx, val);
if (false == JS_GetProperty(smjs_ctx, r_smjs_elinks_object, if (false == JS_GetProperty(smjs_ctx, r_smjs_elinks_object,
@ -277,7 +277,7 @@ smjs_invoke_elinks_object_method(unsigned char *method, int argc, jsval *argv, J
} }
static bool static bool
elinks_get_property_home(JSContext *ctx, unsigned int argc, jsval *vp) elinks_get_property_home(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -294,7 +294,7 @@ elinks_get_property_home(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
elinks_get_property_location(JSContext *ctx, unsigned int argc, jsval *vp) elinks_get_property_location(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -316,7 +316,7 @@ elinks_get_property_location(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
elinks_set_property_location(JSContext *ctx, unsigned int argc, jsval *vp) elinks_set_property_location(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -344,7 +344,7 @@ elinks_set_property_location(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
elinks_get_property_session(JSContext *ctx, unsigned int argc, jsval *vp) elinks_get_property_session(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());

View File

@ -12,6 +12,6 @@ void smjs_init_elinks_object(void);
/* Invoke elinks.<method> with the given arguments and put the return value /* Invoke elinks.<method> with the given arguments and put the return value
* into *rval. */ * into *rval. */
bool smjs_invoke_elinks_object_method(unsigned char *method, int argc, jsval *argv, JS::MutableHandleValue rval); bool smjs_invoke_elinks_object_method(unsigned char *method, int argc, JS::Value *argv, JS::MutableHandleValue rval);
#endif #endif

View File

@ -13,7 +13,7 @@
#include "util/memory.h" #include "util/memory.h"
static bool smjs_globhist_item_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp); static bool smjs_globhist_item_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp);
static bool smjs_globhist_item_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, bool strict, JS::MutableHandleValue hvp); static bool smjs_globhist_item_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp);
static void smjs_globhist_item_finalize(JSFreeOp *op, JSObject *obj); static void smjs_globhist_item_finalize(JSFreeOp *op, JSObject *obj);
@ -51,12 +51,12 @@ enum smjs_globhist_item_prop {
GLOBHIST_LAST_VISIT = -3, GLOBHIST_LAST_VISIT = -3,
}; };
static bool smjs_globhist_item_get_property_title(JSContext *ctx, unsigned int argc, jsval *vp); static bool smjs_globhist_item_get_property_title(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool smjs_globhist_item_set_property_title(JSContext *ctx, unsigned int argc, jsval *vp); static bool smjs_globhist_item_set_property_title(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool smjs_globhist_item_get_property_url(JSContext *ctx, unsigned int argc, jsval *vp); static bool smjs_globhist_item_get_property_url(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool smjs_globhist_item_set_property_url(JSContext *ctx, unsigned int argc, jsval *vp); static bool smjs_globhist_item_set_property_url(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool smjs_globhist_item_get_property_last_visit(JSContext *ctx, unsigned int argc, jsval *vp); static bool smjs_globhist_item_get_property_last_visit(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool smjs_globhist_item_set_property_last_visit(JSContext *ctx, unsigned int argc, jsval *vp); static bool smjs_globhist_item_set_property_last_visit(JSContext *ctx, unsigned int argc, JS::Value *vp);
static const JSPropertySpec smjs_globhist_item_props[] = { static const JSPropertySpec smjs_globhist_item_props[] = {
JS_PSGS("title", smjs_globhist_item_get_property_title, smjs_globhist_item_set_property_title, JSPROP_ENUMERATE), JS_PSGS("title", smjs_globhist_item_get_property_title, smjs_globhist_item_set_property_title, JSPROP_ENUMERATE),
@ -133,7 +133,7 @@ smjs_globhist_item_get_property(JSContext *ctx, JS::HandleObject hobj, JS::Handl
/* @smjs_globhist_item_class.setProperty */ /* @smjs_globhist_item_class.setProperty */
static bool static bool
smjs_globhist_item_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, bool strict, JS::MutableHandleValue hvp) smjs_globhist_item_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp)
{ {
jsid id = hid.get(); jsid id = hid.get();
@ -217,7 +217,7 @@ smjs_globhist_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId h
JSObject *jsobj; JSObject *jsobj;
unsigned char *uri_string; unsigned char *uri_string;
struct global_history_item *history_item; struct global_history_item *history_item;
jsval tmp; JS::Value tmp;
JS::RootedValue r_tmp(ctx, tmp); JS::RootedValue r_tmp(ctx, tmp);
@ -264,7 +264,7 @@ smjs_get_globhist_object(void)
void void
smjs_init_globhist_interface(void) smjs_init_globhist_interface(void)
{ {
jsval val; JS::Value val;
struct JSObject *globhist; struct JSObject *globhist;
if (!smjs_ctx || !smjs_elinks_object) if (!smjs_ctx || !smjs_elinks_object)
@ -281,7 +281,7 @@ smjs_init_globhist_interface(void)
} }
static bool static bool
smjs_globhist_item_get_property_title(JSContext *ctx, unsigned int argc, jsval *vp) smjs_globhist_item_get_property_title(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -306,7 +306,7 @@ smjs_globhist_item_get_property_title(JSContext *ctx, unsigned int argc, jsval *
} }
static bool static bool
smjs_globhist_item_set_property_title(JSContext *ctx, unsigned int argc, jsval *vp) smjs_globhist_item_set_property_title(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -335,7 +335,7 @@ smjs_globhist_item_set_property_title(JSContext *ctx, unsigned int argc, jsval *
} }
static bool static bool
smjs_globhist_item_get_property_url(JSContext *ctx, unsigned int argc, jsval *vp) smjs_globhist_item_get_property_url(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -360,7 +360,7 @@ smjs_globhist_item_get_property_url(JSContext *ctx, unsigned int argc, jsval *vp
} }
static bool static bool
smjs_globhist_item_set_property_url(JSContext *ctx, unsigned int argc, jsval *vp) smjs_globhist_item_set_property_url(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -389,7 +389,7 @@ smjs_globhist_item_set_property_url(JSContext *ctx, unsigned int argc, jsval *vp
} }
static bool static bool
smjs_globhist_item_get_property_last_visit(JSContext *ctx, unsigned int argc, jsval *vp) smjs_globhist_item_get_property_last_visit(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -431,7 +431,7 @@ smjs_globhist_item_get_property_last_visit(JSContext *ctx, unsigned int argc, js
/* @smjs_globhist_item_class.setProperty */ /* @smjs_globhist_item_class.setProperty */
static bool static bool
smjs_globhist_item_set_property_last_visit(JSContext *ctx, unsigned int argc, jsval *vp) smjs_globhist_item_set_property_last_visit(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());

View File

@ -27,7 +27,7 @@ script_hook_url(va_list ap, void *data)
unsigned char **url = va_arg(ap, unsigned char **); unsigned char **url = va_arg(ap, unsigned char **);
struct session *ses = va_arg(ap, struct session *); struct session *ses = va_arg(ap, struct session *);
enum evhook_status ret = EVENT_HOOK_STATUS_NEXT; enum evhook_status ret = EVENT_HOOK_STATUS_NEXT;
jsval args[3], rval; JS::Value args[3], rval;
JS::RootedValue r_rval(smjs_ctx, rval); JS::RootedValue r_rval(smjs_ctx, rval);
if (*url == NULL) return EVENT_HOOK_STATUS_NEXT; if (*url == NULL) return EVENT_HOOK_STATUS_NEXT;
@ -59,7 +59,7 @@ script_hook_pre_format_html(va_list ap, void *data)
struct cache_entry *cached = va_arg(ap, struct cache_entry *); struct cache_entry *cached = va_arg(ap, struct cache_entry *);
enum evhook_status ret = EVENT_HOOK_STATUS_NEXT; enum evhook_status ret = EVENT_HOOK_STATUS_NEXT;
JSObject *cache_entry_object, *view_state_object = NULL; JSObject *cache_entry_object, *view_state_object = NULL;
jsval args[4], rval; JS::Value args[4], rval;
JS::RootedValue r_rval(smjs_ctx, rval); JS::RootedValue r_rval(smjs_ctx, rval);
evhook_use_params(ses && cached); evhook_use_params(ses && cached);

View File

@ -14,7 +14,7 @@
#include "util/memory.h" #include "util/memory.h"
static bool keymap_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp); static bool keymap_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp);
static bool keymap_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, bool strict, JS::MutableHandleValue hvp); static bool keymap_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp);
static void keymap_finalize(JSFreeOp *op, JSObject *obj); static void keymap_finalize(JSFreeOp *op, JSObject *obj);
static const JSClass keymap_class = { static const JSClass keymap_class = {
@ -34,7 +34,7 @@ keymap_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS:
unsigned char *action_str; unsigned char *action_str;
const unsigned char *keystroke_str; const unsigned char *keystroke_str;
int *data; int *data;
jsval tmp; JS::Value tmp;
JS::RootedValue r_tmp(ctx, tmp); JS::RootedValue r_tmp(ctx, tmp);
/* This can be called if @obj if not itself an instance of the /* This can be called if @obj if not itself an instance of the
@ -46,6 +46,8 @@ keymap_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS:
data = JS_GetInstancePrivate(ctx, hobj, data = JS_GetInstancePrivate(ctx, hobj,
(JSClass *) &keymap_class, NULL); (JSClass *) &keymap_class, NULL);
if (!JS_IdToValue(ctx, id, &r_tmp)) if (!JS_IdToValue(ctx, id, &r_tmp))
goto ret_null; goto ret_null;
@ -71,7 +73,7 @@ smjs_keybinding_action_callback(va_list ap, void *data)
{ {
JS::CallArgs args; JS::CallArgs args;
jsval rval; JS::Value rval;
JS::RootedValue r_rval(smjs_ctx, rval); JS::RootedValue r_rval(smjs_ctx, rval);
struct session *ses = va_arg(ap, struct session *); struct session *ses = va_arg(ap, struct session *);
JSObject *jsobj = data; JSObject *jsobj = data;
@ -80,11 +82,11 @@ smjs_keybinding_action_callback(va_list ap, void *data)
smjs_ses = ses; smjs_ses = ses;
jsval r2; JS::Value r2;
JS::RootedValue r_jsobject(smjs_ctx, r2); JS::RootedValue r_jsobject(smjs_ctx, r2);
r_jsobject.setObject(*jsobj); r_jsobject.setObject(*jsobj);
JS_CallFunctionValue(smjs_ctx, JS::NullPtr(), r_jsobject, JS_CallFunctionValue(smjs_ctx, nullptr, r_jsobject,
args, &r_rval); args, &r_rval);
smjs_ses = NULL; smjs_ses = NULL;
@ -94,20 +96,20 @@ smjs_keybinding_action_callback(va_list ap, void *data)
/* @keymap_class.setProperty */ /* @keymap_class.setProperty */
static bool static bool
keymap_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, bool strict, JS::MutableHandleValue hvp) keymap_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp)
{ {
jsid id = hid.get(); jsid id = hid.get();
int *data; int *data;
unsigned char *keymap_str; unsigned char *keymap_str;
jsval val;
const unsigned char *keystroke_str; const unsigned char *keystroke_str;
/* This can be called if @obj if not itself an instance of the /* This can be called if @obj if not itself an instance of the
* appropriate class but has one in its prototype chain. Fail * appropriate class but has one in its prototype chain. Fail
* such calls. */ * such calls. */
if (!JS_InstanceOf(ctx, hobj, (JSClass *) &keymap_class, NULL)) if (!JS_InstanceOf(ctx, hobj, (JSClass *) &keymap_class, NULL)) {
return false; return false;
}
data = JS_GetInstancePrivate(ctx, hobj, data = JS_GetInstancePrivate(ctx, hobj,
(JSClass *) &keymap_class, NULL); (JSClass *) &keymap_class, NULL);
@ -115,11 +117,13 @@ keymap_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, boo
/* Ugly fact: we need to get the string from the id to give to bind_do, /* Ugly fact: we need to get the string from the id to give to bind_do,
* which will of course then convert the string back to an id... */ * which will of course then convert the string back to an id... */
keymap_str = get_keymap_name((enum keymap_id) *data); keymap_str = get_keymap_name((enum keymap_id) *data);
if (!keymap_str) return false; if (!keymap_str) return false;
JS::RootedValue rval(ctx, val); JS::RootedValue rval(ctx);
JS_IdToValue(ctx, id, &rval); JS_IdToValue(ctx, id, &rval);
keystroke_str = JS_EncodeString(ctx, rval.toString()); keystroke_str = JS_EncodeString(ctx, rval.toString());
if (!keystroke_str) return false; if (!keystroke_str) return false;
if (hvp.isString()) { if (hvp.isString()) {
@ -134,6 +138,7 @@ keymap_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, boo
return true; return true;
} else if (hvp.isNull()) { /* before JSVAL_IS_OBJECT */ } else if (hvp.isNull()) { /* before JSVAL_IS_OBJECT */
if (bind_do(keymap_str, keystroke_str, "none", 0)) if (bind_do(keymap_str, keystroke_str, "none", 0))
return false; return false;
@ -226,7 +231,6 @@ static const JSClass keymaps_hash_class = {
static JSObject * static JSObject *
smjs_get_keymap_hash_object(void) smjs_get_keymap_hash_object(void)
{ {
jsval val;
int keymap_id; int keymap_id;
JSObject *keymaps_hash; JSObject *keymaps_hash;
@ -234,7 +238,7 @@ smjs_get_keymap_hash_object(void)
if (!keymaps_hash) return NULL; if (!keymaps_hash) return NULL;
JS::RootedObject r_keymaps_hash(smjs_ctx, keymaps_hash); JS::RootedObject r_keymaps_hash(smjs_ctx, keymaps_hash);
JS::RootedValue r_val(smjs_ctx, val); JS::RootedValue r_val(smjs_ctx);
for (keymap_id = 0; keymap_id < KEYMAP_MAX; ++keymap_id) { for (keymap_id = 0; keymap_id < KEYMAP_MAX; ++keymap_id) {
unsigned char *keymap_str = get_keymap_name(keymap_id); unsigned char *keymap_str = get_keymap_name(keymap_id);
@ -245,7 +249,6 @@ smjs_get_keymap_hash_object(void)
if (!map) return NULL; if (!map) return NULL;
r_val.setObject(*map); r_val.setObject(*map);
JS_SetProperty(smjs_ctx, r_keymaps_hash, keymap_str, r_val); JS_SetProperty(smjs_ctx, r_keymaps_hash, keymap_str, r_val);
} }
@ -255,7 +258,6 @@ smjs_get_keymap_hash_object(void)
void void
smjs_init_keybinding_interface(void) smjs_init_keybinding_interface(void)
{ {
jsval val;
struct JSObject *keymaps_hash; struct JSObject *keymaps_hash;
if (!smjs_ctx || !smjs_elinks_object) if (!smjs_ctx || !smjs_elinks_object)
@ -264,7 +266,7 @@ smjs_init_keybinding_interface(void)
keymaps_hash = smjs_get_keymap_hash_object(); keymaps_hash = smjs_get_keymap_hash_object();
if (!keymaps_hash) return; if (!keymaps_hash) return;
JS::RootedValue r_val(smjs_ctx, val); JS::RootedValue r_val(smjs_ctx);
r_val.setObject(*keymaps_hash); r_val.setObject(*keymaps_hash);
JS::RootedObject r_smjs_elinks_object(smjs_ctx, smjs_elinks_object); JS::RootedObject r_smjs_elinks_object(smjs_ctx, smjs_elinks_object);

View File

@ -21,7 +21,7 @@ struct smjs_load_uri_hop {
/* SpiderMonkey versions earlier than 1.8 cannot properly call /* SpiderMonkey versions earlier than 1.8 cannot properly call
* a closure if given just a JSFunction pointer. They need a * a closure if given just a JSFunction pointer. They need a
* jsval that points to the corresponding JSObject. Besides, * JS::Value that points to the corresponding JSObject. Besides,
* JS_AddNamedRoot is not documented to support JSFunction * JS_AddNamedRoot is not documented to support JSFunction
* pointers. */ * pointers. */
JS::MutableHandleValue callback; JS::MutableHandleValue callback;
@ -33,7 +33,7 @@ smjs_loading_callback(struct download *download, void *data)
struct session *saved_smjs_ses = smjs_ses; struct session *saved_smjs_ses = smjs_ses;
struct smjs_load_uri_hop *hop = data; struct smjs_load_uri_hop *hop = data;
jsval args[1], rval; JS::Value args[1], rval;
JSObject *cache_entry_object; JSObject *cache_entry_object;
if (is_in_progress_state(download->state)) return; if (is_in_progress_state(download->state)) return;
@ -55,10 +55,10 @@ smjs_loading_callback(struct download *download, void *data)
cache_entry_object = smjs_get_cache_entry_object(download->cached); cache_entry_object = smjs_get_cache_entry_object(download->cached);
if (!cache_entry_object) goto end; if (!cache_entry_object) goto end;
args[0] = OBJECT_TO_JSVAL(cache_entry_object); args[0] = JS::ObjectValue(*cache_entry_object);
argv = CallArgsFromVp(1, args); argv = CallArgsFromVp(1, args);
JS_CallFunctionValue(smjs_ctx, JS::NullPtr(), hop->callback, argv, &r_rval); JS_CallFunctionValue(smjs_ctx, nullptr, hop->callback, argv, &r_rval);
end: end:
if (download->cached) if (download->cached)
@ -70,7 +70,7 @@ end:
} }
static bool static bool
smjs_load_uri(JSContext *ctx, unsigned int argc, jsval *rval) smjs_load_uri(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
JS::CallArgs args = CallArgsFromVp(argc, rval); JS::CallArgs args = CallArgsFromVp(argc, rval);

View File

@ -31,13 +31,13 @@
static JSObject *smjs_session_object; static JSObject *smjs_session_object;
static bool session_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp); static bool session_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp);
static bool session_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, bool strict, JS::MutableHandleValue hvp); static bool session_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp);
static void session_finalize(JSFreeOp *op, JSObject *obj); static void session_finalize(JSFreeOp *op, JSObject *obj);
static bool session_construct(JSContext *ctx, unsigned int argc, jsval *rval); static bool session_construct(JSContext *ctx, unsigned int argc, JS::Value *rval);
static const JSClass session_class = { static const JSClass session_class = {
"session", "session",
JSCLASS_HAS_PRIVATE | JSCLASS_IMPLEMENTS_BARRIERS, /* struct session *; a weak reference */ JSCLASS_HAS_PRIVATE, /* struct session *; a weak reference */
JS_PropertyStub, nullptr, JS_PropertyStub, nullptr,
session_get_property, session_set_property, session_get_property, session_set_property,
nullptr, nullptr, nullptr, session_finalize, nullptr, nullptr, nullptr, session_finalize,
@ -164,30 +164,30 @@ smjs_get_session_location_array_object(struct session *ses)
* smjs_detach_session_object detaches both session.jsobject and * smjs_detach_session_object detaches both session.jsobject and
* session.history.js_object. */ * session.history.js_object. */
static bool session_get_property_visited(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_visited(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_set_property_visited(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_set_property_visited(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_history(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_history(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_loading_uri(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_loading_uri(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_reloadlevel(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_reloadlevel(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_set_property_reloadlevel(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_set_property_reloadlevel(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_redirect_cnt(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_redirect_cnt(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_set_property_redirect_cnt(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_set_property_redirect_cnt(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_search_direction(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_search_direction(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_set_property_search_direction(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_set_property_search_direction(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_kbdprefix(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_kbdprefix(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_set_property_kbdprefix(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_set_property_kbdprefix(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_mark(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_mark(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_set_property_mark(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_set_property_mark(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_exit_query(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_exit_query(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_insert_mode(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_insert_mode(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_set_property_insert_mode(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_set_property_insert_mode(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_navigate_mode(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_navigate_mode(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_set_property_navigate_mode(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_set_property_navigate_mode(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_search_word(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_search_word(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_set_property_search_word(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_set_property_search_word(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_get_property_last_search_word(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_get_property_last_search_word(JSContext *ctx, unsigned int argc, JS::Value *vp);
static bool session_set_property_last_search_word(JSContext *ctx, unsigned int argc, jsval *vp); static bool session_set_property_last_search_word(JSContext *ctx, unsigned int argc, JS::Value *vp);
enum session_prop { enum session_prop {
SESSION_VISITED, SESSION_VISITED,
@ -229,7 +229,7 @@ static const JSPropertySpec session_props[] = {
}; };
static bool static bool
session_get_property_visited(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_visited(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -252,7 +252,7 @@ session_get_property_visited(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_get_property_history(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_history(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -281,7 +281,7 @@ session_get_property_history(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_get_property_loading_uri(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_loading_uri(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -311,7 +311,7 @@ session_get_property_loading_uri(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_get_property_reloadlevel(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_reloadlevel(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -334,7 +334,7 @@ session_get_property_reloadlevel(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_get_property_redirect_cnt(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_redirect_cnt(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -357,7 +357,7 @@ session_get_property_redirect_cnt(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_get_property_search_direction(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_search_direction(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -380,7 +380,7 @@ session_get_property_search_direction(JSContext *ctx, unsigned int argc, jsval *
} }
static bool static bool
session_get_property_kbdprefix(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_kbdprefix(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -403,7 +403,7 @@ session_get_property_kbdprefix(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_get_property_mark(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_mark(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -430,7 +430,7 @@ session_get_property_mark(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_get_property_exit_query(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_exit_query(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -453,7 +453,7 @@ session_get_property_exit_query(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_get_property_insert_mode(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_insert_mode(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -481,7 +481,7 @@ session_get_property_insert_mode(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_get_property_navigate_mode(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_navigate_mode(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -507,7 +507,7 @@ session_get_property_navigate_mode(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_get_property_search_word(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_search_word(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -530,7 +530,7 @@ session_get_property_search_word(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_get_property_last_search_word(JSContext *ctx, unsigned int argc, jsval *vp) session_get_property_last_search_word(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -580,7 +580,7 @@ session_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS
} }
static bool static bool
session_set_property_visited(JSContext *ctx, unsigned int argc, jsval *vp) session_set_property_visited(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -604,7 +604,7 @@ session_set_property_visited(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_set_property_reloadlevel(JSContext *ctx, unsigned int argc, jsval *vp) session_set_property_reloadlevel(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -627,7 +627,7 @@ session_set_property_reloadlevel(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_set_property_redirect_cnt(JSContext *ctx, unsigned int argc, jsval *vp) session_set_property_redirect_cnt(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -650,7 +650,7 @@ session_set_property_redirect_cnt(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_set_property_search_direction(JSContext *ctx, unsigned int argc, jsval *vp) session_set_property_search_direction(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -687,7 +687,7 @@ session_set_property_search_direction(JSContext *ctx, unsigned int argc, jsval *
} }
static bool static bool
session_set_property_kbdprefix(JSContext *ctx, unsigned int argc, jsval *vp) session_set_property_kbdprefix(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -710,7 +710,7 @@ session_set_property_kbdprefix(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_set_property_mark(JSContext *ctx, unsigned int argc, jsval *vp) session_set_property_mark(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -749,7 +749,7 @@ session_set_property_mark(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_set_property_insert_mode(JSContext *ctx, unsigned int argc, jsval *vp) session_set_property_insert_mode(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -788,7 +788,7 @@ session_set_property_insert_mode(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_set_property_navigate_mode(JSContext *ctx, unsigned int argc, jsval *vp) session_set_property_navigate_mode(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -825,7 +825,7 @@ session_set_property_navigate_mode(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_set_property_search_word(JSContext *ctx, unsigned int argc, jsval *vp) session_set_property_search_word(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -857,7 +857,7 @@ session_set_property_search_word(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
session_set_property_last_search_word(JSContext *ctx, unsigned int argc, jsval *vp) session_set_property_last_search_word(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -891,7 +891,7 @@ session_set_property_last_search_word(JSContext *ctx, unsigned int argc, jsval *
static bool static bool
session_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, bool strict, JS::MutableHandleValue hvp) session_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp)
{ {
jsid id = hid.get(); jsid id = hid.get();
@ -916,12 +916,12 @@ session_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, bo
/** Pointed to by session_class.construct. Create a new session (tab) /** Pointed to by session_class.construct. Create a new session (tab)
* and return the JSObject wrapper. */ * and return the JSObject wrapper. */
static bool static bool
session_construct(JSContext *ctx, unsigned int argc, jsval *rval) session_construct(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
JS::CallArgs args = CallArgsFromVp(argc, rval); JS::CallArgs args = CallArgsFromVp(argc, rval);
//JS::RootedObject hobj(ctx, &args.thisv().toObject()); //JS::RootedObject hobj(ctx, &args.thisv().toObject());
jsval val; JS::Value val;
int bg = 0; /* open new tab in background */ int bg = 0; /* open new tab in background */
struct session *ses; struct session *ses;
JSObject *jsobj; JSObject *jsobj;
@ -1124,7 +1124,7 @@ smjs_detach_session_array_object(struct terminal *term)
} }
static bool static bool
smjs_session_goto_url(JSContext *ctx, unsigned int argc, jsval *rval) smjs_session_goto_url(JSContext *ctx, unsigned int argc, JS::Value *rval)
{ {
JS::CallArgs args = CallArgsFromVp(argc, rval); JS::CallArgs args = CallArgsFromVp(argc, rval);
JS::RootedObject this_o(ctx, &args.thisv().toObject()); JS::RootedObject this_o(ctx, &args.thisv().toObject());

View File

@ -209,7 +209,7 @@ smjs_get_terminal_array_object(void)
void void
smjs_init_terminal_interface(void) smjs_init_terminal_interface(void)
{ {
jsval val; JS::Value val;
struct JSObject *obj; struct JSObject *obj;
if (!smjs_ctx || !smjs_elinks_object) if (!smjs_ctx || !smjs_elinks_object)

View File

@ -21,7 +21,7 @@
#include "viewer/text/vs.h" #include "viewer/text/vs.h"
static bool view_state_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp); static bool view_state_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp);
static bool view_state_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, bool strict, JS::MutableHandleValue hvp); static bool view_state_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp);
static void view_state_finalize(JSFreeOp *op, JSObject *obj); static void view_state_finalize(JSFreeOp *op, JSObject *obj);
static const JSClass view_state_class = { static const JSClass view_state_class = {
@ -42,7 +42,7 @@ enum view_state_prop {
}; };
static bool static bool
view_state_get_property_plain(JSContext *ctx, unsigned int argc, jsval *vp) view_state_get_property_plain(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -65,7 +65,7 @@ view_state_get_property_plain(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
view_state_set_property_plain(JSContext *ctx, unsigned int argc, jsval *vp) view_state_set_property_plain(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -91,7 +91,7 @@ view_state_set_property_plain(JSContext *ctx, unsigned int argc, jsval *vp)
} }
static bool static bool
view_state_get_property_uri(JSContext *ctx, unsigned int argc, jsval *vp) view_state_get_property_uri(JSContext *ctx, unsigned int argc, JS::Value *vp)
{ {
JS::CallArgs args = CallArgsFromVp(argc, vp); JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject()); JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -162,7 +162,7 @@ view_state_get_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid,
/* @view_state_class.setProperty */ /* @view_state_class.setProperty */
static bool static bool
view_state_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, bool strict, JS::MutableHandleValue hvp) view_state_set_property(JSContext *ctx, JS::HandleObject hobj, JS::HandleId hid, JS::MutableHandleValue hvp)
{ {
jsid id = hid.get(); jsid id = hid.get();

View File

@ -1,3 +1,7 @@
<script> <script>
while (true); var a = 0;
while (true) {
a += 1;
a -= 1;
}
</script> </script>