1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-12-04 14:46:47 -05:00
elinks/src/ecmascript/spidermonkey/util.h
Kalle Olavi Niemitalo 32889bf908 1031: Add spidermonkey-shared.c used for both web and user scripts
Rename src/ecmascript/spidermonkey/util.c to
src/ecmascript/spidermonkey-shared.c and compile it also when
CONFIG_SCRIPTING_SMJS is enabled but CONFIG_ECMASCRIPT_SPIDERMONKEY is
not.  Then use its functions from src/scripting/smjs/ too.  Move the
corresponding declarations, as well as the inline functions needed by
src/scripting/smjs/, from src/ecmascript/spidermonkey/util.h to
src/ecmascript/spidermonkey-shared.h.

ELinks is nowadays using two JSRuntimes and SpiderMonkey has bugs that
make it crash in such use.  To work around them, ELinks will need to
be changed to use only one JSRuntime.  I am planning to define and
initialize that JSRuntime in src/ecmascript/spidermonkey-shared.c,
now that it's compiled whenever either of the modules is enabled.
2008-07-16 12:32:24 +03:00

69 lines
1.5 KiB
C

#ifndef EL__ECMASCRIPT_SPIDERMONKEY_UTIL_H
#define EL__ECMASCRIPT_SPIDERMONKEY_UTIL_H
#include "ecmascript/spidermonkey-shared.h"
#include "util/memory.h"
static void string_to_jsval(JSContext *ctx, jsval *vp, unsigned char *string);
static void astring_to_jsval(JSContext *ctx, jsval *vp, unsigned char *string);
static void int_to_jsval(JSContext *ctx, jsval *vp, int number);
static void object_to_jsval(JSContext *ctx, jsval *vp, JSObject *object);
static void boolean_to_jsval(JSContext *ctx, jsval *vp, int boolean);
static int jsval_to_boolean(JSContext *ctx, jsval *vp);
/** Inline functions */
static inline void
string_to_jsval(JSContext *ctx, jsval *vp, unsigned char *string)
{
if (!string) {
*vp = JSVAL_NULL;
} else {
*vp = STRING_TO_JSVAL(JS_NewStringCopyZ(ctx, string));
}
}
static inline void
astring_to_jsval(JSContext *ctx, jsval *vp, unsigned char *string)
{
string_to_jsval(ctx, vp, string);
mem_free_if(string);
}
static inline void
int_to_jsval(JSContext *ctx, jsval *vp, int number)
{
*vp = INT_TO_JSVAL(number);
}
static inline void
object_to_jsval(JSContext *ctx, jsval *vp, JSObject *object)
{
*vp = OBJECT_TO_JSVAL(object);
}
static inline void
boolean_to_jsval(JSContext *ctx, jsval *vp, int boolean)
{
*vp = BOOLEAN_TO_JSVAL(boolean);
}
static inline int
jsval_to_boolean(JSContext *ctx, jsval *vp)
{
jsval val;
if (JS_ConvertValue(ctx, *vp, JSTYPE_BOOLEAN, &val) == JS_FALSE) {
return JS_FALSE;
}
return JSVAL_TO_BOOLEAN(val);
}
#endif