mirror of
https://github.com/rkd77/elinks.git
synced 2025-05-18 00:48:57 -04:00
(cherry picked from commit 6bfaa7ca8df63a5c19381be722c7b0bba7980b39) Conflicts: src/ecmascript/spidermonkey/form.c src/scripting/smjs/elinks_object.c
61 lines
1.4 KiB
C
61 lines
1.4 KiB
C
/* Better compatibility across versions of SpiderMonkey. */
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include "elinks.h"
|
|
|
|
#include "ecmascript/spidermonkey/util.h"
|
|
|
|
/** An ELinks-specific replacement for JS_DefineFunctions().
|
|
*
|
|
* @relates spidermonkeyFunctionSpec */
|
|
JSBool
|
|
spidermonkey_DefineFunctions(JSContext *cx, JSObject *obj,
|
|
const spidermonkeyFunctionSpec *fs)
|
|
{
|
|
for (; fs->name; fs++) {
|
|
if (!JS_DefineFunction(cx, obj, fs->name, fs->call,
|
|
fs->nargs, 0))
|
|
return JS_FALSE;
|
|
}
|
|
return JS_TRUE;
|
|
}
|
|
|
|
/** An ELinks-specific replacement for JS_InitClass().
|
|
*
|
|
* @relates spidermonkeyFunctionSpec */
|
|
JSObject *
|
|
spidermonkey_InitClass(JSContext *cx, JSObject *obj,
|
|
JSObject *parent_proto, JSClass *clasp,
|
|
JSNative constructor, uintN nargs,
|
|
JSPropertySpec *ps,
|
|
const spidermonkeyFunctionSpec *fs,
|
|
JSPropertySpec *static_ps,
|
|
const spidermonkeyFunctionSpec *static_fs)
|
|
{
|
|
JSObject *proto = JS_InitClass(cx, obj, parent_proto, clasp,
|
|
constructor, nargs,
|
|
ps, NULL, static_ps, NULL);
|
|
|
|
if (proto == NULL)
|
|
return NULL;
|
|
|
|
if (fs) {
|
|
if (!spidermonkey_DefineFunctions(cx, proto, fs))
|
|
return NULL;
|
|
}
|
|
|
|
if (static_fs) {
|
|
JSObject *cons_obj = JS_GetConstructor(cx, proto);
|
|
|
|
if (cons_obj == NULL)
|
|
return NULL;
|
|
if (!spidermonkey_DefineFunctions(cx, cons_obj, static_fs))
|
|
return NULL;
|
|
}
|
|
|
|
return proto;
|
|
}
|