1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-11-04 08:17:17 -05:00

Bug 1069: Revert "1031: JS_SetErrorReporter only once per JSRuntime."

This reverts commit b94657869b.
I don't know where I got the idea that JS_SetErrorReporter affects the
entire JSRuntime, rather than only the provided JSContext.  The people
on #jsapi say it has never worked that way.
This commit is contained in:
Kalle Olavi Niemitalo 2009-02-26 22:56:33 +02:00 committed by Kalle Olavi Niemitalo
parent e9370fe5b9
commit 1487d206db
5 changed files with 7 additions and 53 deletions

View File

@ -8,8 +8,6 @@
#include "elinks.h"
#include "ecmascript/spidermonkey-shared.h"
#include "ecmascript/spidermonkey.h"
#include "scripting/smjs/core.h"
/** A shared runtime used for both user scripts (scripting/smjs/) and
* scripts on web pages (ecmascript/spidermonkey/).
@ -33,38 +31,6 @@ JSContext *spidermonkey_empty_context;
* it can be initialized and shut down in arbitrary order. */
static int spidermonkey_runtime_refcount;
static void
error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
{
/* We have three types of JSContexts.
* - spidermonkey_empty_context never has anything defined or
* evaluated in it, so this error_reporter() should not be
* called for it.
* - smjs_ctx for user scripts.
* - many JSContexts for web scripts.
* Check which one ctx is and call the appropriate function.
*
* Instead of the scheme used here, we could:
* (a) make the private pointer of every context point to a
* structure of known type and put a function pointer or
* enum in that structure, or
* (b) assume that JS_GetContextPrivate(smjs_ctx) == NULL. */
assert(ctx != spidermonkey_empty_context);
if_assert_failed return;
#ifdef CONFIG_SCRIPTING_SPIDERMONKEY
if (ctx == smjs_ctx) {
smjs_error_reporter(ctx, message, report);
return;
}
#endif
#ifdef CONFIG_ECMASCRIPT_SMJS
spidermonkey_error_reporter(ctx, message, report);
#endif
}
/** Initialize ::spidermonkey_runtime and ::spidermonkey_empty_context.
* If already initialized, just increment the reference count.
*
@ -92,11 +58,6 @@ spidermonkey_runtime_addref(void)
JS_ShutDown();
return 0;
}
/* Although JS_SetErrorReporter gets the JSContext as
* a parameter, it affects the whole JSRuntime. */
JS_SetErrorReporter(spidermonkey_empty_context,
error_reporter);
}
assert(spidermonkey_runtime);

View File

@ -57,8 +57,8 @@
static int js_module_init_ok;
void
spidermonkey_error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
static void
error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
{
struct ecmascript_interpreter *interpreter = JS_GetContextPrivate(ctx);
struct terminal *term;
@ -171,6 +171,7 @@ spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter)
/* XXX: JSOPTION_COMPILE_N_GO will go (will it?) when we implement
* some kind of bytecode cache. (If we will ever do that.) */
JS_SetOptions(ctx, JSOPTION_VAROBJFIX | JSOPTION_COMPILE_N_GO);
JS_SetErrorReporter(ctx, error_reporter);
window_obj = JS_NewObject(ctx, (JSClass *) &window_class, NULL, NULL);
if (!window_obj) {

View File

@ -2,10 +2,6 @@
#define EL__ECMASCRIPT_SPIDERMONKEY_H
struct ecmascript_interpreter;
struct form_state;
struct form_view;
struct JSContext;
struct JSErrorReport;
struct string;
void *spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter);
@ -19,7 +15,5 @@ void spidermonkey_eval(struct ecmascript_interpreter *interpreter, struct string
unsigned char *spidermonkey_eval_stringback(struct ecmascript_interpreter *interpreter, struct string *code);
int spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter, struct string *code);
void spidermonkey_error_reporter(struct JSContext *ctx, const char *message, struct JSErrorReport *report);
extern struct module spidermonkey_module;
#endif

View File

@ -36,8 +36,8 @@ alert_smjs_error(unsigned char *msg)
smjs_ses, msg);
}
void
smjs_error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
static void
error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
{
unsigned char *strict, *exception, *warning, *error;
struct string msg;
@ -130,15 +130,14 @@ init_smjs(struct module *module)
{
if (!spidermonkey_runtime_addref()) return;
/* Set smjs_ctx immediately after creating the JSContext, so
* that any error reports from SpiderMonkey are forwarded to
* smjs_error_reporter(). */
smjs_ctx = JS_NewContext(spidermonkey_runtime, 8192);
if (!smjs_ctx) {
spidermonkey_runtime_release();
return;
}
JS_SetErrorReporter(smjs_ctx, error_reporter);
smjs_init_global_object();
smjs_init_elinks_object();

View File

@ -10,7 +10,6 @@ struct string;
extern JSContext *smjs_ctx;
extern struct session *smjs_ses;
void smjs_error_reporter(JSContext *ctx, const char *message, JSErrorReport *report);
void alert_smjs_error(unsigned char *msg);
void init_smjs(struct module *module);