mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
32889bf908
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.
69 lines
1.5 KiB
C
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
|