mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
[mujs] Stubs for mujs
This commit is contained in:
parent
cb0f6536c4
commit
1c51410fd3
@ -158,6 +158,9 @@
|
|||||||
/* Define if you want: Mouse handling support */
|
/* Define if you want: Mouse handling support */
|
||||||
#mesondefine CONFIG_MOUSE
|
#mesondefine CONFIG_MOUSE
|
||||||
|
|
||||||
|
/* Define if you want: mujs support */
|
||||||
|
#mesondefine CONFIG_MUJS
|
||||||
|
|
||||||
/* Define to 1 if translation of program messages to the user's native
|
/* Define to 1 if translation of program messages to the user's native
|
||||||
language is requested. */
|
language is requested. */
|
||||||
#mesondefine CONFIG_NLS
|
#mesondefine CONFIG_NLS
|
||||||
|
11
meson.build
11
meson.build
@ -94,8 +94,10 @@ conf_data.set('CONFIG_LIBEVENT', get_option('libevent'))
|
|||||||
conf_data.set('CONFIG_X', get_option('x'))
|
conf_data.set('CONFIG_X', get_option('x'))
|
||||||
conf_data.set('CONFIG_XML', get_option('xml'))
|
conf_data.set('CONFIG_XML', get_option('xml'))
|
||||||
conf_data.set('CONFIG_QUICKJS', get_option('quickjs'))
|
conf_data.set('CONFIG_QUICKJS', get_option('quickjs'))
|
||||||
|
conf_data.set('CONFIG_MUJS', get_option('mujs'))
|
||||||
|
|
||||||
if conf_data.get('CONFIG_SCRIPTING_SPIDERMONKEY') or conf_data.get('CONFIG_ECMASCRIPT_SMJS') or conf_data.get('CONFIG_QUICKJS')
|
|
||||||
|
if conf_data.get('CONFIG_SCRIPTING_SPIDERMONKEY') or conf_data.get('CONFIG_ECMASCRIPT_SMJS') or conf_data.get('CONFIG_QUICKJS') or conf_data.get('CONFIG_MUJS')
|
||||||
conf_data.set('CONFIG_ECMASCRIPT', true)
|
conf_data.set('CONFIG_ECMASCRIPT', true)
|
||||||
else
|
else
|
||||||
conf_data.set('CONFIG_ECMASCRIPT', false)
|
conf_data.set('CONFIG_ECMASCRIPT', false)
|
||||||
@ -376,7 +378,7 @@ if conf_data.get('CONFIG_ECMASCRIPT_SMJS') or conf_data.get('CONFIG_SCRIPTING_SP
|
|||||||
deps += mozjsdeps
|
deps += mozjsdeps
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if conf_data.get('CONFIG_ECMASCRIPT_SMJS') or conf_data.get('CONFIG_QUICKJS')
|
if conf_data.get('CONFIG_ECMASCRIPT_SMJS') or conf_data.get('CONFIG_QUICKJS') or conf_data.get('CONFIG_MUJS')
|
||||||
sqlite3deps = dependency('sqlite3', static: st)
|
sqlite3deps = dependency('sqlite3', static: st)
|
||||||
deps += sqlite3deps
|
deps += sqlite3deps
|
||||||
conf_data.set('CONFIG_XML', true)
|
conf_data.set('CONFIG_XML', true)
|
||||||
@ -469,6 +471,11 @@ if conf_data.get('CONFIG_QUICKJS')
|
|||||||
deps += dep_atomic
|
deps += dep_atomic
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if conf_data.get('CONFIG_MUJS')
|
||||||
|
mujsdeps = dependency('mujs', static: st)
|
||||||
|
deps += mujsdeps
|
||||||
|
endif
|
||||||
|
|
||||||
if not conf_data.get('CONFIG_OS_DOS') and compiler.has_header('sys/un.h')
|
if not conf_data.get('CONFIG_OS_DOS') and compiler.has_header('sys/un.h')
|
||||||
conf_data.set('CONFIG_INTERLINK', true)
|
conf_data.set('CONFIG_INTERLINK', true)
|
||||||
conf_data.set('HAVE_SYS_UN_H', 1)
|
conf_data.set('HAVE_SYS_UN_H', 1)
|
||||||
|
@ -70,3 +70,4 @@ option('reproducible', type: 'boolean', value: false, description: 'reproducible
|
|||||||
option('source-date-epoch', type: 'string', value: '', description: 'source date epoch for reproducible builds')
|
option('source-date-epoch', type: 'string', value: '', description: 'source date epoch for reproducible builds')
|
||||||
|
|
||||||
option('dgi', type: 'boolean', value: false, description: 'DOS Gateway Interface support')
|
option('dgi', type: 'boolean', value: false, description: 'DOS Gateway Interface support')
|
||||||
|
option('mujs', type: 'boolean', value: false, description: 'use mujs library')
|
||||||
|
@ -18,11 +18,15 @@
|
|||||||
#include "document/xml/renderer.h"
|
#include "document/xml/renderer.h"
|
||||||
#include "document/xml/renderer2.h"
|
#include "document/xml/renderer2.h"
|
||||||
#include "ecmascript/ecmascript.h"
|
#include "ecmascript/ecmascript.h"
|
||||||
|
#ifdef CONFIG_MUJS
|
||||||
|
#include "ecmascript/mujs.h"
|
||||||
|
#else
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_QUICKJS
|
||||||
#include "ecmascript/quickjs.h"
|
#include "ecmascript/quickjs.h"
|
||||||
#else
|
#else
|
||||||
#include "ecmascript/spidermonkey.h"
|
#include "ecmascript/spidermonkey.h"
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#include "ecmascript/timer.h"
|
#include "ecmascript/timer.h"
|
||||||
#include "intl/libintl.h"
|
#include "intl/libintl.h"
|
||||||
#include "main/module.h"
|
#include "main/module.h"
|
||||||
@ -234,7 +238,9 @@ ecmascript_get_interpreter(struct view_state *vs)
|
|||||||
init_list(interpreter->onload_snippets);
|
init_list(interpreter->onload_snippets);
|
||||||
/* The following backend call reads interpreter->vs. */
|
/* The following backend call reads interpreter->vs. */
|
||||||
if (
|
if (
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_MUJS
|
||||||
|
!mujs_get_interpreter(interpreter)
|
||||||
|
#elif defined(CONFIG_QUICKJS)
|
||||||
!quickjs_get_interpreter(interpreter)
|
!quickjs_get_interpreter(interpreter)
|
||||||
#else
|
#else
|
||||||
!spidermonkey_get_interpreter(interpreter)
|
!spidermonkey_get_interpreter(interpreter)
|
||||||
@ -259,7 +265,9 @@ ecmascript_put_interpreter(struct ecmascript_interpreter *interpreter)
|
|||||||
/* If the assertion fails, it is better to leak the
|
/* If the assertion fails, it is better to leak the
|
||||||
* interpreter than to corrupt memory. */
|
* interpreter than to corrupt memory. */
|
||||||
if_assert_failed return;
|
if_assert_failed return;
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_MUJS
|
||||||
|
mujs_put_interpreter(interpreter);
|
||||||
|
#elif defined(CONFIG_QUICKJS)
|
||||||
quickjs_put_interpreter(interpreter);
|
quickjs_put_interpreter(interpreter);
|
||||||
#else
|
#else
|
||||||
spidermonkey_put_interpreter(interpreter);
|
spidermonkey_put_interpreter(interpreter);
|
||||||
@ -332,7 +340,9 @@ ecmascript_eval(struct ecmascript_interpreter *interpreter,
|
|||||||
return;
|
return;
|
||||||
assert(interpreter);
|
assert(interpreter);
|
||||||
interpreter->backend_nesting++;
|
interpreter->backend_nesting++;
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_MUJS
|
||||||
|
mujs_eval(interpreter, code, ret);
|
||||||
|
#elif defined(CONFIG_QUICKJS)
|
||||||
quickjs_eval(interpreter, code, ret);
|
quickjs_eval(interpreter, code, ret);
|
||||||
#else
|
#else
|
||||||
spidermonkey_eval(interpreter, code, ret);
|
spidermonkey_eval(interpreter, code, ret);
|
||||||
@ -340,7 +350,11 @@ ecmascript_eval(struct ecmascript_interpreter *interpreter,
|
|||||||
interpreter->backend_nesting--;
|
interpreter->backend_nesting--;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_MUJS
|
||||||
|
static void
|
||||||
|
ecmascript_call_function(struct ecmascript_interpreter *interpreter,
|
||||||
|
void *fun, struct string *ret)
|
||||||
|
#elif defined(CONFIG_QUICKJS)
|
||||||
static void
|
static void
|
||||||
ecmascript_call_function(struct ecmascript_interpreter *interpreter,
|
ecmascript_call_function(struct ecmascript_interpreter *interpreter,
|
||||||
JSValueConst fun, struct string *ret)
|
JSValueConst fun, struct string *ret)
|
||||||
@ -354,7 +368,9 @@ ecmascript_call_function(struct ecmascript_interpreter *interpreter,
|
|||||||
return;
|
return;
|
||||||
assert(interpreter);
|
assert(interpreter);
|
||||||
interpreter->backend_nesting++;
|
interpreter->backend_nesting++;
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_MUJS
|
||||||
|
;
|
||||||
|
#elif defined(CONFIG_QUICKJS)
|
||||||
quickjs_call_function(interpreter, fun, ret);
|
quickjs_call_function(interpreter, fun, ret);
|
||||||
#else
|
#else
|
||||||
spidermonkey_call_function(interpreter, fun, ret);
|
spidermonkey_call_function(interpreter, fun, ret);
|
||||||
@ -372,7 +388,9 @@ ecmascript_eval_stringback(struct ecmascript_interpreter *interpreter,
|
|||||||
return NULL;
|
return NULL;
|
||||||
assert(interpreter);
|
assert(interpreter);
|
||||||
interpreter->backend_nesting++;
|
interpreter->backend_nesting++;
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_MUJS
|
||||||
|
result = mujs_eval_stringback(interpreter, code);
|
||||||
|
#elif defined(CONFIG_QUICKJS)
|
||||||
result = quickjs_eval_stringback(interpreter, code);
|
result = quickjs_eval_stringback(interpreter, code);
|
||||||
#else
|
#else
|
||||||
result = spidermonkey_eval_stringback(interpreter, code);
|
result = spidermonkey_eval_stringback(interpreter, code);
|
||||||
@ -394,7 +412,9 @@ ecmascript_eval_boolback(struct ecmascript_interpreter *interpreter,
|
|||||||
return -1;
|
return -1;
|
||||||
assert(interpreter);
|
assert(interpreter);
|
||||||
interpreter->backend_nesting++;
|
interpreter->backend_nesting++;
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_MUJS
|
||||||
|
result = mujs_eval_boolback(interpreter, code);
|
||||||
|
#elif defined(CONFIG_QUICKJS)
|
||||||
result = quickjs_eval_boolback(interpreter, code);
|
result = quickjs_eval_boolback(interpreter, code);
|
||||||
#else
|
#else
|
||||||
result = spidermonkey_eval_boolback(interpreter, code);
|
result = spidermonkey_eval_boolback(interpreter, code);
|
||||||
@ -409,7 +429,8 @@ ecmascript_eval_boolback(struct ecmascript_interpreter *interpreter,
|
|||||||
void
|
void
|
||||||
ecmascript_detach_form_view(struct form_view *fv)
|
ecmascript_detach_form_view(struct form_view *fv)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_MUJS
|
||||||
|
#elif defined(CONFIG_QUICKJS)
|
||||||
quickjs_detach_form_view(fv);
|
quickjs_detach_form_view(fv);
|
||||||
#else
|
#else
|
||||||
spidermonkey_detach_form_view(fv);
|
spidermonkey_detach_form_view(fv);
|
||||||
@ -418,7 +439,8 @@ ecmascript_detach_form_view(struct form_view *fv)
|
|||||||
|
|
||||||
void ecmascript_detach_form_state(struct form_state *fs)
|
void ecmascript_detach_form_state(struct form_state *fs)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_MUJS
|
||||||
|
#elif defined(CONFIG_QUICKJS)
|
||||||
quickjs_detach_form_state(fs);
|
quickjs_detach_form_state(fs);
|
||||||
#else
|
#else
|
||||||
spidermonkey_detach_form_state(fs);
|
spidermonkey_detach_form_state(fs);
|
||||||
@ -427,7 +449,8 @@ void ecmascript_detach_form_state(struct form_state *fs)
|
|||||||
|
|
||||||
void ecmascript_moved_form_state(struct form_state *fs)
|
void ecmascript_moved_form_state(struct form_state *fs)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_MUJS
|
||||||
|
#elif defined(CONFIG_QUICKJS)
|
||||||
quickjs_moved_form_state(fs);
|
quickjs_moved_form_state(fs);
|
||||||
#else
|
#else
|
||||||
spidermonkey_moved_form_state(fs);
|
spidermonkey_moved_form_state(fs);
|
||||||
@ -681,6 +704,9 @@ static struct module *ecmascript_modules[] = {
|
|||||||
#ifdef CONFIG_ECMASCRIPT_SMJS
|
#ifdef CONFIG_ECMASCRIPT_SMJS
|
||||||
&spidermonkey_module,
|
&spidermonkey_module,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_MUJS
|
||||||
|
&mujs_module,
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_QUICKJS
|
#ifdef CONFIG_QUICKJS
|
||||||
&quickjs_module,
|
&quickjs_module,
|
||||||
#endif
|
#endif
|
||||||
|
@ -16,6 +16,11 @@ if CONFIG_ANY_SPIDERMONKEY
|
|||||||
srcs += files('spidermonkey-shared.cpp')
|
srcs += files('spidermonkey-shared.cpp')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if conf_data.get('CONFIG_MUJS')
|
||||||
|
subdir('mujs')
|
||||||
|
srcs += files('css2xpath.cpp', 'ecmascript.cpp', 'localstorage-db.cpp', 'mujs.cpp')
|
||||||
|
endif
|
||||||
|
|
||||||
if conf_data.get('CONFIG_QUICKJS')
|
if conf_data.get('CONFIG_QUICKJS')
|
||||||
subdir('quickjs')
|
subdir('quickjs')
|
||||||
srcs += files('css2xpath.cpp', 'ecmascript.cpp', 'localstorage-db.cpp', 'quickjs.cpp')
|
srcs += files('css2xpath.cpp', 'ecmascript.cpp', 'localstorage-db.cpp', 'quickjs.cpp')
|
||||||
|
307
src/ecmascript/mujs.cpp
Normal file
307
src/ecmascript/mujs.cpp
Normal file
@ -0,0 +1,307 @@
|
|||||||
|
/* The mujs ECMAScript backend. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "elinks.h"
|
||||||
|
|
||||||
|
#include "bfu/dialog.h"
|
||||||
|
#include "cache/cache.h"
|
||||||
|
#include "config/options.h"
|
||||||
|
#include "cookies/cookies.h"
|
||||||
|
#include "dialogs/menu.h"
|
||||||
|
#include "dialogs/status.h"
|
||||||
|
#include "document/html/frames.h"
|
||||||
|
#include "document/xml/renderer.h"
|
||||||
|
#include "document/xml/renderer2.h"
|
||||||
|
#include "document/document.h"
|
||||||
|
#include "document/forms.h"
|
||||||
|
#include "document/renderer.h"
|
||||||
|
#include "document/view.h"
|
||||||
|
#include "ecmascript/ecmascript.h"
|
||||||
|
#include "ecmascript/mujs.h"
|
||||||
|
#include "intl/libintl.h"
|
||||||
|
#include "main/select.h"
|
||||||
|
#include "osdep/newwin.h"
|
||||||
|
#include "osdep/sysname.h"
|
||||||
|
#include "protocol/http/http.h"
|
||||||
|
#include "protocol/uri.h"
|
||||||
|
#include "session/history.h"
|
||||||
|
#include "session/location.h"
|
||||||
|
#include "session/session.h"
|
||||||
|
#include "session/task.h"
|
||||||
|
#include "terminal/tab.h"
|
||||||
|
#include "terminal/terminal.h"
|
||||||
|
#include "util/conv.h"
|
||||||
|
#include "util/string.h"
|
||||||
|
#include "viewer/text/draw.h"
|
||||||
|
#include "viewer/text/form.h"
|
||||||
|
#include "viewer/text/link.h"
|
||||||
|
#include "viewer/text/view.h"
|
||||||
|
#include "viewer/text/vs.h"
|
||||||
|
|
||||||
|
#include <libxml++/libxml++.h>
|
||||||
|
|
||||||
|
/*** Global methods */
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
mujs_init(struct module *xxx)
|
||||||
|
{
|
||||||
|
//js_module_init_ok = spidermonkey_runtime_addref();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
mujs_done(struct module *xxx)
|
||||||
|
{
|
||||||
|
// if (js_module_init_ok)
|
||||||
|
// spidermonkey_runtime_release();
|
||||||
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
mujs_get_interpreter(struct ecmascript_interpreter *interpreter)
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
JSContext *ctx;
|
||||||
|
// JSObject *console_obj, *document_obj, /* *forms_obj,*/ *history_obj, *location_obj,
|
||||||
|
// *statusbar_obj, *menubar_obj, *navigator_obj, *localstorage_obj, *screen_obj;
|
||||||
|
|
||||||
|
assert(interpreter);
|
||||||
|
// if (!js_module_init_ok) return NULL;
|
||||||
|
|
||||||
|
JSRuntime *rt = JS_NewRuntime();
|
||||||
|
if (!rt) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
JS_SetMemoryLimit(rt, 64 * 1024 * 1024);
|
||||||
|
JS_SetGCThreshold(rt, 16 * 1024 * 1024);
|
||||||
|
|
||||||
|
ctx = JS_NewContext(rt);
|
||||||
|
|
||||||
|
if (!ctx) {
|
||||||
|
JS_FreeRuntime(rt);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
interpreter->backend_data = ctx;
|
||||||
|
JS_SetContextOpaque(ctx, interpreter);
|
||||||
|
|
||||||
|
// JS::SetWarningReporter(ctx, error_reporter);
|
||||||
|
|
||||||
|
JS_SetInterruptHandler(rt, js_heartbeat_callback, interpreter);
|
||||||
|
// JS::RealmOptions options;
|
||||||
|
|
||||||
|
// JS::RootedObject window_obj(ctx, JS_NewGlobalObject(ctx, &window_class, NULL, JS::FireOnNewGlobalHook, options));
|
||||||
|
|
||||||
|
js_window_init(ctx);
|
||||||
|
js_screen_init(ctx);
|
||||||
|
js_unibar_init(ctx);
|
||||||
|
js_navigator_init(ctx);
|
||||||
|
js_history_init(ctx);
|
||||||
|
js_console_init(ctx);
|
||||||
|
js_localstorage_init(ctx);
|
||||||
|
js_element_init(ctx);
|
||||||
|
|
||||||
|
interpreter->document_obj = js_document_init(ctx);
|
||||||
|
interpreter->location_obj = js_location_init(ctx);
|
||||||
|
|
||||||
|
return ctx;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
mujs_put_interpreter(struct ecmascript_interpreter *interpreter)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
JSContext *ctx;
|
||||||
|
|
||||||
|
assert(interpreter);
|
||||||
|
|
||||||
|
ctx = (JSContext *)interpreter->backend_data;
|
||||||
|
JS_FreeContext(ctx);
|
||||||
|
interpreter->backend_data = nullptr;
|
||||||
|
interpreter->ac = nullptr;
|
||||||
|
interpreter->ac2 = nullptr;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
static void
|
||||||
|
error_reporter(struct ecmascript_interpreter *interpreter, JSContext *ctx)
|
||||||
|
{
|
||||||
|
struct session *ses = interpreter->vs->doc_view->session;
|
||||||
|
struct terminal *term;
|
||||||
|
struct string msg;
|
||||||
|
struct string f;
|
||||||
|
|
||||||
|
assert(interpreter && interpreter->vs && interpreter->vs->doc_view
|
||||||
|
&& ses && ses->tab);
|
||||||
|
if_assert_failed return;
|
||||||
|
|
||||||
|
term = ses->tab->term;
|
||||||
|
|
||||||
|
#ifdef CONFIG_LEDS
|
||||||
|
set_led_value(ses->status.ecmascript_led, 'J');
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!get_opt_bool("ecmascript.error_reporting", ses)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (init_string(&f)) {
|
||||||
|
js_dump_error(ctx, &f);
|
||||||
|
|
||||||
|
if (!init_string(&msg)) {
|
||||||
|
done_string(&f);
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
add_to_string(&msg,
|
||||||
|
_("A script embedded in the current document raised the following:\n", term));
|
||||||
|
add_string_to_string(&msg, &f);
|
||||||
|
done_string(&f);
|
||||||
|
info_box(term, MSGBOX_FREE_TEXT, N_("JavaScript Error"), ALIGN_CENTER, msg.source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
mujs_eval(struct ecmascript_interpreter *interpreter,
|
||||||
|
struct string *code, struct string *ret)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
JSContext *ctx;
|
||||||
|
|
||||||
|
assert(interpreter);
|
||||||
|
// if (!js_module_init_ok) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
ctx = (JSContext *)interpreter->backend_data;
|
||||||
|
interpreter->heartbeat = add_heartbeat(interpreter);
|
||||||
|
interpreter->ret = ret;
|
||||||
|
JSValue r = JS_Eval(ctx, code->source, code->length, "", 0);
|
||||||
|
done_heartbeat(interpreter->heartbeat);
|
||||||
|
|
||||||
|
if (JS_IsException(r)) {
|
||||||
|
error_reporter(interpreter, ctx);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
mujs_call_function(struct ecmascript_interpreter *interpreter,
|
||||||
|
void *fun, struct string *ret)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
JSContext *ctx;
|
||||||
|
|
||||||
|
assert(interpreter);
|
||||||
|
// if (!js_module_init_ok) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
ctx = (JSContext *)interpreter->backend_data;
|
||||||
|
|
||||||
|
interpreter->heartbeat = add_heartbeat(interpreter);
|
||||||
|
interpreter->ret = ret;
|
||||||
|
JSValue r = JS_Call(ctx, fun, JS_GetGlobalObject(ctx), 0, nullptr);
|
||||||
|
done_heartbeat(interpreter->heartbeat);
|
||||||
|
|
||||||
|
if (JS_IsException(r)) {
|
||||||
|
error_reporter(interpreter, ctx);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
mujs_eval_stringback(struct ecmascript_interpreter *interpreter,
|
||||||
|
struct string *code)
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
#if 0
|
||||||
|
JSContext *ctx;
|
||||||
|
|
||||||
|
assert(interpreter);
|
||||||
|
// if (!js_module_init_ok) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
ctx = (JSContext *)interpreter->backend_data;
|
||||||
|
interpreter->heartbeat = add_heartbeat(interpreter);
|
||||||
|
interpreter->ret = nullptr;
|
||||||
|
JSValue r = JS_Eval(ctx, code->source, code->length, "", 0);
|
||||||
|
done_heartbeat(interpreter->heartbeat);
|
||||||
|
|
||||||
|
if (JS_IsNull(r)) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (JS_IsException(r)) {
|
||||||
|
error_reporter(interpreter, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *str;
|
||||||
|
char *string;
|
||||||
|
size_t len;
|
||||||
|
str = JS_ToCStringLen(ctx, &len, r);
|
||||||
|
|
||||||
|
if (!str) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
string = stracpy(str);
|
||||||
|
JS_FreeCString(ctx, str);
|
||||||
|
|
||||||
|
return string;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
mujs_eval_boolback(struct ecmascript_interpreter *interpreter,
|
||||||
|
struct string *code)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
JSContext *ctx;
|
||||||
|
|
||||||
|
assert(interpreter);
|
||||||
|
// if (!js_module_init_ok) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
ctx = (JSContext *)interpreter->backend_data;
|
||||||
|
interpreter->heartbeat = add_heartbeat(interpreter);
|
||||||
|
interpreter->ret = nullptr;
|
||||||
|
JSValue r = JS_Eval(ctx, code->source, code->length, "", 0);
|
||||||
|
done_heartbeat(interpreter->heartbeat);
|
||||||
|
|
||||||
|
if (JS_IsNull(r)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (JS_IsUndefined(r)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
JS_ToInt32(ctx, &ret, r);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
struct module mujs_module = struct_module(
|
||||||
|
/* name: */ N_("mujs"),
|
||||||
|
/* options: */ NULL,
|
||||||
|
/* events: */ NULL,
|
||||||
|
/* submodules: */ NULL,
|
||||||
|
/* data: */ NULL,
|
||||||
|
/* init: */ mujs_init,
|
||||||
|
/* done: */ mujs_done
|
||||||
|
);
|
45
src/ecmascript/mujs.h
Normal file
45
src/ecmascript/mujs.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#ifndef EL__ECMASCRIPT_MUJS_H
|
||||||
|
#define EL__ECMASCRIPT_MUJS_H
|
||||||
|
|
||||||
|
#include <mujs.h>
|
||||||
|
|
||||||
|
#ifdef ECMASCRIPT_DEBUG
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
#define RETURN_JS(obj) \
|
||||||
|
fprintf(stderr, "%s:%d obj=%p\n", __FILE__, __LINE__, JS_VALUE_GET_PTR(obj)); \
|
||||||
|
if (JS_VALUE_HAS_REF_COUNT(obj)) { \
|
||||||
|
JSRefCountHeader *p = (JSRefCountHeader *)JS_VALUE_GET_PTR(obj); \
|
||||||
|
fprintf(stderr, "ref_count=%d\n", p->ref_count); \
|
||||||
|
} \
|
||||||
|
return obj
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define RETURN_JS(obj) return obj
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct ecmascript_interpreter;
|
||||||
|
struct form_view;
|
||||||
|
struct form_state;
|
||||||
|
struct string;
|
||||||
|
|
||||||
|
void *mujs_get_interpreter(struct ecmascript_interpreter *interpreter);
|
||||||
|
void mujs_put_interpreter(struct ecmascript_interpreter *interpreter);
|
||||||
|
|
||||||
|
//void mujs_detach_form_view(struct form_view *fv);
|
||||||
|
//void mujs_detach_form_state(struct form_state *fs);
|
||||||
|
//void mujs_moved_form_state(struct form_state *fs);
|
||||||
|
|
||||||
|
void mujs_eval(struct ecmascript_interpreter *interpreter, struct string *code, struct string *ret);
|
||||||
|
char *mujs_eval_stringback(struct ecmascript_interpreter *interpreter, struct string *code);
|
||||||
|
int mujs_eval_boolback(struct ecmascript_interpreter *interpreter, struct string *code);
|
||||||
|
|
||||||
|
//void mujs_call_function(struct ecmascript_interpreter *interpreter, JSValueConst fun, struct string *ret);
|
||||||
|
|
||||||
|
extern struct module mujs_module;
|
||||||
|
#endif
|
0
src/ecmascript/mujs/meson.build
Normal file
0
src/ecmascript/mujs/meson.build
Normal file
@ -66,7 +66,7 @@ struct module *builtin_modules[] = {
|
|||||||
#ifdef CONFIG_COOKIES
|
#ifdef CONFIG_COOKIES
|
||||||
&cookies_module,
|
&cookies_module,
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_ECMASCRIPT_SMJS) || defined(CONFIG_QUICKJS)
|
#if defined(CONFIG_ECMASCRIPT_SMJS) || defined(CONFIG_MUJS) || defined(CONFIG_QUICKJS)
|
||||||
&ecmascript_module,
|
&ecmascript_module,
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_FORMHIST
|
#ifdef CONFIG_FORMHIST
|
||||||
|
Loading…
Reference in New Issue
Block a user