mirror of
https://github.com/rkd77/elinks.git
synced 2025-02-02 15:09:23 -05:00
[smjs] JSAutoRealm
This commit is contained in:
parent
c8138381a4
commit
f428a27812
@ -78,7 +78,7 @@ smjs_do_file(char *path)
|
||||
opts.setNoScriptRval(true);
|
||||
JS::RootedValue rval(smjs_ctx);
|
||||
|
||||
JS::Realm *prev = JS::EnterRealm(smjs_ctx, smjs_elinks_object);
|
||||
JSAutoRealm ar(smjs_ctx, smjs_elinks_object);
|
||||
|
||||
if (add_file_to_string(&script, path)) {
|
||||
JS::SourceText<mozilla::Utf8Unit> srcBuf;
|
||||
@ -98,7 +98,6 @@ smjs_do_file(char *path)
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
JS::LeaveRealm(smjs_ctx, prev);
|
||||
done_string(&script);
|
||||
|
||||
return ret;
|
||||
@ -154,7 +153,8 @@ init_smjs(struct module *module)
|
||||
|
||||
smjs_init_elinks_object();
|
||||
|
||||
JS::RootedObject r_smjs_global_object(smjs_ctx, smjs_global_object);
|
||||
JS::RootedObject r_smjs_global_object(smjs_ctx, smjs_global_object->get());
|
||||
JSAutoRealm ar(smjs_ctx, r_smjs_global_object);
|
||||
|
||||
JS_DefineFunction(smjs_ctx, r_smjs_global_object, "do_file",
|
||||
&smjs_do_file_wrapper, 1, 0);
|
||||
|
@ -137,7 +137,10 @@ smjs_get_elinks_object(void)
|
||||
assert(smjs_ctx);
|
||||
assert(smjs_global_object);
|
||||
|
||||
return spidermonkey_InitClass(smjs_ctx, smjs_global_object, NULL,
|
||||
JS::RootedObject obj(smjs_ctx, smjs_global_object->get());
|
||||
JSAutoRealm ar(smjs_ctx, obj);
|
||||
|
||||
return spidermonkey_InitClass(smjs_ctx, obj, NULL,
|
||||
(JSClass *) &elinks_class, NULL, 0,
|
||||
(JSPropertySpec *) elinks_props,
|
||||
elinks_funcs, NULL, NULL);
|
||||
@ -148,6 +151,8 @@ smjs_init_elinks_object(void)
|
||||
{
|
||||
smjs_elinks_object = smjs_get_elinks_object(); /* TODO: check NULL */
|
||||
|
||||
JSAutoRealm ar(smjs_ctx, smjs_elinks_object);
|
||||
|
||||
smjs_init_action_interface();
|
||||
smjs_init_bookmarks_interface();
|
||||
smjs_init_globhist_interface();
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
using namespace JS;
|
||||
|
||||
JSObject *smjs_global_object;
|
||||
JS::Heap<JSObject*> *smjs_global_object;
|
||||
|
||||
static const JSClassOps global_ops = {
|
||||
nullptr, nullptr,
|
||||
@ -26,7 +26,7 @@ static const JSClass global_class = {
|
||||
&global_ops
|
||||
};
|
||||
|
||||
static JSObject *
|
||||
static JS::Heap<JSObject*> *
|
||||
smjs_get_global_object(void)
|
||||
{
|
||||
assert(smjs_ctx);
|
||||
@ -36,15 +36,17 @@ smjs_get_global_object(void)
|
||||
// return NULL;
|
||||
// }
|
||||
|
||||
JS::RootedObject jsobj(smjs_ctx, JS_NewGlobalObject(smjs_ctx, (JSClass *) &global_class, NULL, JS::DontFireOnNewGlobalHook, opts));
|
||||
JS::RootedObject jsobj(smjs_ctx);
|
||||
JS::Heap<JSObject*> *global_obj = new JS::Heap<JSObject*>(JS_NewGlobalObject(smjs_ctx, &global_class, NULL, JS::DontFireOnNewGlobalHook, opts));
|
||||
|
||||
jsobj = global_obj->get();
|
||||
JSAutoRealm ar(smjs_ctx, jsobj);
|
||||
|
||||
if (!jsobj) return NULL;
|
||||
|
||||
new JSAutoRealm(smjs_ctx, jsobj);
|
||||
|
||||
JS::InitRealmStandardClasses(smjs_ctx);
|
||||
|
||||
return jsobj;
|
||||
return global_obj;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
/* The root of the object hierarchy. If object 'foo' has this as its parent,
|
||||
* you can use foo's method and properties with 'foo.<method|property>'. */
|
||||
extern JSObject *smjs_global_object;
|
||||
extern JS::Heap<JSObject*> *smjs_global_object;
|
||||
|
||||
/* Create the global object and assign it to smjs_global_object. */
|
||||
void smjs_init_global_object(void);
|
||||
|
@ -33,7 +33,7 @@ script_hook_url(va_list ap, void *data)
|
||||
|
||||
if (*url == NULL) return EVENT_HOOK_STATUS_NEXT;
|
||||
|
||||
JS::Realm *prev = JS::EnterRealm(smjs_ctx, smjs_elinks_object);
|
||||
JSAutoRealm ar(smjs_ctx, smjs_elinks_object);
|
||||
|
||||
smjs_ses = ses;
|
||||
args[2].setString(utf8_to_jsstring(smjs_ctx, *url, -1));
|
||||
@ -48,9 +48,7 @@ script_hook_url(va_list ap, void *data)
|
||||
mem_free_set(url, stracpy(str));
|
||||
}
|
||||
}
|
||||
|
||||
smjs_ses = NULL;
|
||||
JS::LeaveRealm(smjs_ctx, prev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -65,7 +63,7 @@ script_hook_pre_format_html(va_list ap, void *data)
|
||||
JS::Value args[4];
|
||||
JS::RootedValue r_rval(smjs_ctx);
|
||||
|
||||
JS::Realm *prev = JS::EnterRealm(smjs_ctx, smjs_elinks_object);
|
||||
JSAutoRealm ar(smjs_ctx, smjs_elinks_object);
|
||||
|
||||
evhook_use_params(ses && cached);
|
||||
|
||||
@ -96,7 +94,6 @@ script_hook_pre_format_html(va_list ap, void *data)
|
||||
|
||||
|
||||
end:
|
||||
JS::LeaveRealm(smjs_ctx, prev);
|
||||
smjs_ses = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
@ -1121,8 +1121,11 @@ smjs_init_session_interface(void)
|
||||
assert(smjs_ctx);
|
||||
assert(smjs_global_object);
|
||||
|
||||
JS::RootedObject obj(smjs_ctx, smjs_global_object->get());
|
||||
JSAutoRealm ar(smjs_ctx, obj);
|
||||
|
||||
smjs_session_object =
|
||||
spidermonkey_InitClass(smjs_ctx, smjs_global_object, NULL,
|
||||
spidermonkey_InitClass(smjs_ctx, obj, NULL,
|
||||
(JSClass *) &session_class, session_construct,
|
||||
0, (JSPropertySpec *) session_props,
|
||||
session_funcs, NULL, NULL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user