mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
Added ret param for document.write
This commit is contained in:
parent
2f0490cb04
commit
62d42380f8
@ -362,7 +362,7 @@ imported:
|
||||
return;
|
||||
add_bytes_to_string(&code, html, *end - html);
|
||||
|
||||
ecmascript_eval(interpreter, &code);
|
||||
ecmascript_eval(interpreter, &code, &ret);
|
||||
done_string(&code);
|
||||
|
||||
#if 0
|
||||
|
@ -129,7 +129,7 @@ process_snippets(struct ecmascript_interpreter *interpreter,
|
||||
|
||||
if (*string->source != '^') {
|
||||
/* Evaluate <script>code</script> snippet */
|
||||
ecmascript_eval(interpreter, string);
|
||||
ecmascript_eval(interpreter, string, NULL);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -194,7 +194,7 @@ process_snippets(struct ecmascript_interpreter *interpreter,
|
||||
if (fragment) {
|
||||
struct string code = INIT_STRING(fragment->data, fragment->length);
|
||||
|
||||
ecmascript_eval(interpreter, &code);
|
||||
ecmascript_eval(interpreter, &code, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -119,15 +119,15 @@ ecmascript_put_interpreter(struct ecmascript_interpreter *interpreter)
|
||||
|
||||
void
|
||||
ecmascript_eval(struct ecmascript_interpreter *interpreter,
|
||||
struct string *code)
|
||||
struct string *code, struct string *ret)
|
||||
{
|
||||
if (!get_ecmascript_enable())
|
||||
return;
|
||||
assert(interpreter);
|
||||
#ifdef CONFIG_ECMASCRIPT_SEE
|
||||
see_eval(interpreter, code);
|
||||
see_eval(interpreter, code, ret);
|
||||
#else
|
||||
spidermonkey_eval(interpreter, code);
|
||||
spidermonkey_eval(interpreter, code, ret);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,8 @@ struct view_state;
|
||||
struct ecmascript_interpreter {
|
||||
struct view_state *vs;
|
||||
void *backend_data;
|
||||
/* Used by document.write() */
|
||||
struct string *ret;
|
||||
time_t exec_start;
|
||||
|
||||
/* This is a cross-rerenderings accumulator of
|
||||
@ -57,7 +59,7 @@ void ecmascript_put_interpreter(struct ecmascript_interpreter *interpreter);
|
||||
|
||||
void ecmascript_reset_state(struct view_state *vs);
|
||||
|
||||
void ecmascript_eval(struct ecmascript_interpreter *interpreter, struct string *code);
|
||||
void ecmascript_eval(struct ecmascript_interpreter *interpreter, struct string *code, struct string *ret);
|
||||
unsigned char *ecmascript_eval_stringback(struct ecmascript_interpreter *interpreter, struct string *code);
|
||||
/* Returns -1 if undefined. */
|
||||
int ecmascript_eval_boolback(struct ecmascript_interpreter *interpreter, struct string *code);
|
||||
|
@ -96,7 +96,7 @@ see_put_interpreter(struct ecmascript_interpreter *interpreter)
|
||||
|
||||
void
|
||||
see_eval(struct ecmascript_interpreter *interpreter,
|
||||
struct string *code)
|
||||
struct string *code, struct string *ret)
|
||||
{
|
||||
|
||||
struct SEE_interpreter *interp = interpreter->backend_data;
|
||||
@ -106,6 +106,7 @@ see_eval(struct ecmascript_interpreter *interpreter,
|
||||
struct SEE_value result;
|
||||
|
||||
g->exec_start = time(NULL);
|
||||
g->ret = ret;
|
||||
SEE_TRY(interp, try_ctxt) {
|
||||
SEE_Global_eval(interp, input, &result);
|
||||
}
|
||||
@ -130,6 +131,7 @@ see_eval_stringback(struct ecmascript_interpreter *interpreter,
|
||||
unsigned char *volatile string = NULL;
|
||||
|
||||
g->exec_start = time(NULL);
|
||||
g->ret = NULL;
|
||||
SEE_TRY(interp, try_ctxt) {
|
||||
SEE_Global_eval(interp, input, &result);
|
||||
if (SEE_VALUE_GET_TYPE(&result) != SEE_NULL)
|
||||
@ -158,6 +160,7 @@ see_eval_boolback(struct ecmascript_interpreter *interpreter,
|
||||
SEE_int32_t volatile res = 0;
|
||||
|
||||
g->exec_start = time(NULL);
|
||||
g->ret = NULL;
|
||||
SEE_TRY(interp, try_ctxt) {
|
||||
SEE_Global_eval(interp, input, &result);
|
||||
/* history.back() returns SEE_NULL */
|
||||
|
@ -10,7 +10,7 @@ void see_done();
|
||||
void *see_get_interpreter(struct ecmascript_interpreter *interpreter);
|
||||
void see_put_interpreter(struct ecmascript_interpreter *interpreter);
|
||||
|
||||
void see_eval(struct ecmascript_interpreter *interpreter, struct string *code);
|
||||
void see_eval(struct ecmascript_interpreter *interpreter, struct string *code, struct string *ret);
|
||||
unsigned char *see_eval_stringback(struct ecmascript_interpreter *interpreter, struct string *code);
|
||||
int see_eval_boolback(struct ecmascript_interpreter *interpreter, struct string *code);
|
||||
|
||||
|
@ -17,6 +17,7 @@ struct js_window_object {
|
||||
struct global_object {
|
||||
struct SEE_interpreter interp;
|
||||
struct js_window_object *win;
|
||||
struct string *ret;
|
||||
int exec_start;
|
||||
int max_exec_time;
|
||||
};
|
||||
|
@ -239,7 +239,7 @@ spidermonkey_put_interpreter(struct ecmascript_interpreter *interpreter)
|
||||
|
||||
void
|
||||
spidermonkey_eval(struct ecmascript_interpreter *interpreter,
|
||||
struct string *code)
|
||||
struct string *code, struct string *ret)
|
||||
{
|
||||
JSContext *ctx;
|
||||
jsval rval;
|
||||
@ -247,6 +247,7 @@ spidermonkey_eval(struct ecmascript_interpreter *interpreter,
|
||||
assert(interpreter);
|
||||
ctx = interpreter->backend_data;
|
||||
setup_safeguard(interpreter, ctx);
|
||||
interpreter->ret = ret;
|
||||
JS_EvaluateScript(ctx, JS_GetGlobalObject(ctx),
|
||||
code->source, code->length, "", 0, &rval);
|
||||
}
|
||||
@ -262,6 +263,7 @@ spidermonkey_eval_stringback(struct ecmascript_interpreter *interpreter,
|
||||
assert(interpreter);
|
||||
ctx = interpreter->backend_data;
|
||||
setup_safeguard(interpreter, ctx);
|
||||
interpreter->ret = NULL;
|
||||
if (JS_EvaluateScript(ctx, JS_GetGlobalObject(ctx),
|
||||
code->source, code->length, "", 0, &rval)
|
||||
== JS_FALSE) {
|
||||
@ -287,6 +289,7 @@ spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter,
|
||||
assert(interpreter);
|
||||
ctx = interpreter->backend_data;
|
||||
setup_safeguard(interpreter, ctx);
|
||||
interpreter->ret = NULL;
|
||||
ret = JS_EvaluateScript(ctx, JS_GetGlobalObject(ctx),
|
||||
code->source, code->length, "", 0, &rval);
|
||||
if (ret == 2) { /* onClick="history.back()" */
|
||||
|
@ -10,7 +10,7 @@ void spidermonkey_done();
|
||||
void *spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter);
|
||||
void spidermonkey_put_interpreter(struct ecmascript_interpreter *interpreter);
|
||||
|
||||
void spidermonkey_eval(struct ecmascript_interpreter *interpreter, struct string *code);
|
||||
void spidermonkey_eval(struct ecmascript_interpreter *interpreter, struct string *code, struct string *ret);
|
||||
unsigned char *spidermonkey_eval_stringback(struct ecmascript_interpreter *interpreter, struct string *code);
|
||||
int spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter, struct string *code);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user