1
0
mirror of https://github.com/rkd77/elinks.git synced 2025-02-02 15:09:23 -05:00

[quickjs] More debug

This commit is contained in:
Witold Filipczyk 2023-01-21 14:05:22 +01:00
parent fc3fdaa665
commit c0ff7ed930
22 changed files with 817 additions and 5 deletions

View File

@ -13,9 +13,17 @@
} \
return obj
#define REF_JS(obj) \
fprintf(stderr, "%s:%d obj=%p\n", __FILE__, __LINE__, JS_VALUE_GET_PTR(obj)); \
if (JS_VALUE_HAS_REF_COUNT(obj)) { \
JSRefCountHeader *p = (JSRefCountHeader *)JS_VALUE_GET_PTR(obj); \
fprintf(stderr, "ref_count=%d\n", p->ref_count); \
}
#else
#define RETURN_JS(obj) return obj
#define REF_JS(obj)
#endif

View File

@ -62,6 +62,9 @@ js_attr_get_property_name(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -91,6 +94,7 @@ js_attr_get_property_value(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -120,6 +124,7 @@ js_attr_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[attr object]");
}
@ -134,6 +139,7 @@ static std::map<void *, JSValueConst> map_attrs;
static
void js_attr_finalizer(JSRuntime *rt, JSValue val)
{
REF_JS(val);
void *node = JS_GetOpaque(val, js_attr_class_id);
map_attrs.erase(node);
@ -162,6 +168,7 @@ getAttr(JSContext *ctx, void *node)
if (node_find != map_attrs.end()) {
JSValue r = JS_DupValue(ctx, node_find->second);
RETURN_JS(r);
}
@ -174,5 +181,6 @@ getAttr(JSContext *ctx, void *node)
map_attrs[node] = attr_obj;
JSValue rr = JS_DupValue(ctx, attr_obj);
RETURN_JS(rr);
}

View File

@ -61,12 +61,16 @@ static std::map<JSValueConst, void *> map_rev_attributes;
static void *
js_attributes_GetOpaque(JSValueConst this_val)
{
REF_JS(this_val);
return map_rev_attributes[this_val];
}
static void
js_attributes_SetOpaque(JSValueConst this_val, void *node)
{
REF_JS(this_val);
if (!node) {
map_rev_attributes.erase(this_val);
} else {
@ -80,6 +84,8 @@ js_attributes_set_items(JSContext *ctx, JSValue this_val, void *node)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
assert(interpreter);
@ -101,6 +107,9 @@ js_attributes_set_items(JSContext *ctx, JSValue this_val, void *node)
}
JSValue obj = getAttr(ctx, attr);
REF_JS(obj);
JS_SetPropertyUint32(ctx, this_val, i, obj);
xmlpp::ustring name = attr->get_name();
@ -117,6 +126,8 @@ js_attributes_get_property_length(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -142,6 +153,8 @@ js_attributes_item2(JSContext *ctx, JSValueConst this_val, int idx)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element::AttributeList *al = static_cast<xmlpp::Element::AttributeList *>(js_attributes_GetOpaque(this_val));
if (!al) {
@ -170,6 +183,8 @@ js_attributes_item(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_UNDEFINED;
}
@ -186,6 +201,8 @@ js_attributes_namedItem2(JSContext *ctx, JSValueConst this_val, const char *str)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element::AttributeList *al = static_cast<xmlpp::Element::AttributeList *>(js_attributes_GetOpaque(this_val));
if (!al) {
@ -206,6 +223,7 @@ js_attributes_namedItem2(JSContext *ctx, JSValueConst this_val, const char *str)
if (name == attr->get_name()) {
JSValue obj = getAttr(ctx, attr);
RETURN_JS(obj);
}
}
@ -219,6 +237,8 @@ js_attributes_getNamedItem(JSContext *ctx, JSValueConst this_val, int argc, JSVa
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_UNDEFINED;
}
@ -244,6 +264,8 @@ js_attributes_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueC
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[attributes object]");
}
@ -281,6 +303,7 @@ getAttributes(JSContext *ctx, void *node)
if (node_find != map_attributes.end()) {
JSValue r = JS_DupValue(ctx, node_find->second);
RETURN_JS(r);
}
JSValue attributes_obj = JS_NewArray(ctx);
@ -291,5 +314,6 @@ getAttributes(JSContext *ctx, void *node)
map_attributes[node] = attributes_obj;
JSValue rr = JS_DupValue(ctx, attributes_obj);
RETURN_JS(rr);
}

View File

@ -62,12 +62,16 @@ static std::map<JSValueConst, void *> map_rev_collections;
static void *
js_htmlCollection_GetOpaque(JSValueConst this_val)
{
REF_JS(this_val);
return map_rev_collections[this_val];
}
static void
js_htmlCollection_SetOpaque(JSValueConst this_val, void *node)
{
REF_JS(this_val);
if (!node) {
map_rev_collections.erase(this_val);
} else {
@ -81,6 +85,8 @@ js_htmlCollection_get_property_length(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Node::NodeSet *ns = static_cast<xmlpp::Node::NodeSet *>(js_htmlCollection_GetOpaque(this_val));
if (!ns) {
@ -96,6 +102,8 @@ js_htmlCollection_item2(JSContext *ctx, JSValueConst this_val, int idx)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Node::NodeSet *ns = static_cast<xmlpp::Node::NodeSet *>(js_htmlCollection_GetOpaque(this_val));
if (!ns) {
@ -121,6 +129,8 @@ js_htmlCollection_item(JSContext *ctx, JSValueConst this_val, int argc, JSValueC
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_UNDEFINED;
}
@ -137,6 +147,8 @@ js_htmlCollection_namedItem2(JSContext *ctx, JSValueConst this_val, const char *
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Node::NodeSet *ns = static_cast<xmlpp::Node::NodeSet *>(js_htmlCollection_GetOpaque(this_val));
if (!ns) {
@ -170,6 +182,8 @@ js_htmlCollection_namedItem(JSContext *ctx, JSValueConst this_val, int argc, JSV
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_UNDEFINED;
}
@ -195,6 +209,8 @@ js_htmlCollection_set_items(JSContext *ctx, JSValue this_val, void *node)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
int counter = 0;
xmlpp::Node::NodeSet *ns = static_cast<xmlpp::Node::NodeSet *>(js_htmlCollection_GetOpaque(this_val));
@ -215,6 +231,9 @@ js_htmlCollection_set_items(JSContext *ctx, JSValue this_val, void *node)
}
JSValue obj = getElement(ctx, element);
REF_JS(obj);
JS_SetPropertyUint32(ctx, this_val, counter, obj);
xmlpp::ustring name = element->get_attribute_value("id");
@ -234,6 +253,8 @@ js_htmlCollection_toString(JSContext *ctx, JSValueConst this_val, int argc, JSVa
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[htmlCollection object]");
}
@ -248,6 +269,8 @@ static const JSCFunctionListEntry js_htmlCollection_proto_funcs[] = {
static void
js_htmlCollection_finalizer(JSRuntime *rt, JSValue val)
{
REF_JS(val);
void *node = js_htmlCollection_GetOpaque(val);
js_htmlCollection_SetOpaque(val, nullptr);
@ -289,6 +312,8 @@ fail:
int
js_htmlCollection_init(JSContext *ctx, JSValue global_obj)
{
REF_JS(global_obj);
JSValue htmlCollection_proto, htmlCollection_class;
/* create the htmlCollection class */
@ -296,9 +321,15 @@ js_htmlCollection_init(JSContext *ctx, JSValue global_obj)
JS_NewClass(JS_GetRuntime(ctx), js_htmlCollection_class_id, &js_htmlCollection_class);
htmlCollection_proto = JS_NewObject(ctx);
REF_JS(htmlCollection_proto);
JS_SetPropertyFunctionList(ctx, htmlCollection_proto, js_htmlCollection_proto_funcs, countof(js_htmlCollection_proto_funcs));
htmlCollection_class = JS_NewCFunction2(ctx, js_htmlCollection_ctor, "htmlCollection", 0, JS_CFUNC_constructor, 0);
REF_JS(htmlCollection_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, htmlCollection_class, htmlCollection_proto);
JS_SetClassProto(ctx, js_htmlCollection_class_id, htmlCollection_proto);
@ -319,6 +350,7 @@ getCollection(JSContext *ctx, void *node)
if (node_find != map_collections.end()) {
JSValue r = JS_DupValue(ctx, node_find->second);
RETURN_JS(r);
}
JSValue htmlCollection_obj = JS_NewArray(ctx);
@ -329,5 +361,6 @@ getCollection(JSContext *ctx, void *node)
map_collections[node] = htmlCollection_obj;
JSValue rr = JS_DupValue(ctx, htmlCollection_obj);
RETURN_JS(rr);
}

View File

@ -39,6 +39,8 @@ static JSClassID js_console_class_id;
static JSValue
js_console_log_common(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, const char *log_filename)
{
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
assert(interpreter);
@ -75,6 +77,8 @@ js_console_log(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *ar
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return js_console_log_common(ctx, this_val, argc, argv, console_log_filename);
}
@ -84,6 +88,8 @@ js_console_error(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return js_console_log_common(ctx, this_val, argc, argv, console_error_filename);
}
@ -93,6 +99,8 @@ js_console_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueCons
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[console object]");
}
@ -109,6 +117,8 @@ static JSClassDef js_console_class = {
static JSValue
js_console_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
@ -124,6 +134,7 @@ js_console_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst
if (JS_IsException(obj)) {
goto fail;
}
RETURN_JS(obj);
fail:
@ -141,11 +152,16 @@ js_console_init(JSContext *ctx)
JS_NewClass(JS_GetRuntime(ctx), js_console_class_id, &js_console_class);
JSValue global_obj = JS_GetGlobalObject(ctx);
REF_JS(global_obj);
console_proto = JS_NewObject(ctx);
REF_JS(console_proto);
JS_SetPropertyFunctionList(ctx, console_proto, js_console_funcs, countof(js_console_funcs));
console_class = JS_NewCFunction2(ctx, js_console_ctor, "console", 0, JS_CFUNC_constructor, 0);
REF_JS(console_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, console_class, console_proto);
JS_SetClassProto(ctx, js_console_class_id, console_proto);

View File

@ -74,6 +74,8 @@ js_document_get_property_anchors(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document = doc_view->document;
@ -111,6 +113,8 @@ js_document_get_property_baseURI(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
vs = interpreter->vs;
@ -143,6 +147,8 @@ js_document_get_property_body(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document = doc_view->document;
@ -176,6 +182,8 @@ js_document_set_property_body(JSContext *ctx, JSValueConst this_val, JSValue val
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
// TODO
return JS_UNDEFINED;
}
@ -187,6 +195,8 @@ js_document_get_property_cookie(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs;
struct string *cookies;
@ -207,9 +217,11 @@ js_document_get_property_cookie(JSContext *ctx, JSValueConst this_val)
done_string(cookies);
JSValue r = JS_NewString(ctx, cookiestr);
RETURN_JS(r);
} else {
JSValue rr = JS_NewStringLen(ctx, "", 0);
RETURN_JS(rr);
}
}
@ -220,6 +232,9 @@ js_document_set_property_cookie(JSContext *ctx, JSValueConst this_val, JSValue v
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs;
vs = interpreter->vs;
@ -256,6 +271,8 @@ js_document_get_property_charset(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document = doc_view->document;
@ -276,6 +293,7 @@ js_document_get_property_charset(JSContext *ctx, JSValueConst this_val)
}
JSValue r = JS_NewStringLen(ctx, encoding.c_str(), encoding.length());
RETURN_JS(r);
}
@ -285,6 +303,8 @@ js_document_get_property_childNodes(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -332,6 +352,8 @@ js_document_get_property_doctype(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document = doc_view->document;
@ -360,6 +382,8 @@ js_document_get_property_documentElement(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document = doc_view->document;
@ -393,6 +417,8 @@ js_document_get_property_documentURI(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
vs = interpreter->vs;
@ -422,6 +448,8 @@ js_document_get_property_domain(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
vs = interpreter->vs;
@ -454,6 +482,8 @@ js_document_get_property_forms(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document = doc_view->document;
@ -493,6 +523,8 @@ js_document_get_property_head(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document = doc_view->document;
@ -525,6 +557,8 @@ js_document_get_property_images(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document = doc_view->document;
@ -561,6 +595,8 @@ js_document_get_property_implementation(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document = doc_view->document;
@ -582,6 +618,8 @@ js_document_get_property_links(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document = doc_view->document;
@ -618,6 +656,8 @@ js_document_get_property_location(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
RETURN_JS(interpreter->location_obj);
@ -629,6 +669,8 @@ js_document_get_property_nodeType(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewInt32(ctx, 9);
}
@ -638,6 +680,9 @@ js_document_set_property_location(JSContext *ctx, JSValueConst this_val, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs;
struct document_view *doc_view;
@ -671,6 +716,8 @@ js_document_get_property_referrer(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs;
struct document_view *doc_view;
@ -735,6 +782,8 @@ js_document_get_property_scripts(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document = doc_view->document;
@ -772,6 +821,8 @@ js_document_get_property_title(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs;
struct document_view *doc_view;
@ -797,6 +848,9 @@ js_document_set_property_title(JSContext *ctx, JSValueConst this_val, JSValue va
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs;
struct document_view *doc_view;
@ -837,6 +891,8 @@ js_document_get_property_url(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs;
struct document_view *doc_view;
@ -869,6 +925,9 @@ js_document_set_property_url(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs;
struct document_view *doc_view;
@ -902,6 +961,8 @@ js_document_write_do(JSContext *ctx, JSValueConst this_val, int argc, JSValueCon
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
if (argc >= 1) {
@ -952,6 +1013,7 @@ js_document_write(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return js_document_write_do(ctx, this_val, argc, argv, 0);
}
@ -963,6 +1025,8 @@ js_document_writeln(JSContext *ctx, JSValueConst this_val, int argc, JSValueCons
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return js_document_write_do(ctx, this_val, argc, argv, 1);
}
@ -973,6 +1037,8 @@ js_document_replace(JSContext *ctx, JSValueConst this_val, int argc, JSValueCons
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct document_view *doc_view = interpreter->vs->doc_view;
struct document *document;
@ -1048,6 +1114,8 @@ js_document_createComment(JSContext *ctx, JSValueConst this_val, int argc, JSVal
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_FALSE;
}
@ -1087,6 +1155,8 @@ js_document_createDocumentFragment(JSContext *ctx, JSValueConst this_val, int ar
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 0) {
return JS_FALSE;
}
@ -1125,6 +1195,8 @@ js_document_createElement(JSContext *ctx, JSValueConst this_val, int argc, JSVal
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_FALSE;
}
@ -1164,6 +1236,8 @@ js_document_createTextNode(JSContext *ctx, JSValueConst this_val, int argc, JSVa
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_FALSE;
}
@ -1203,6 +1277,8 @@ js_document_getElementById(JSContext *ctx, JSValueConst this_val, int argc, JSVa
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_FALSE;
}
@ -1251,6 +1327,8 @@ js_document_getElementsByClassName(JSContext *ctx, JSValueConst this_val, int ar
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_FALSE;
}
@ -1300,6 +1378,8 @@ js_document_getElementsByName(JSContext *ctx, JSValueConst this_val, int argc, J
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_FALSE;
}
@ -1350,6 +1430,8 @@ js_document_getElementsByTagName(JSContext *ctx, JSValueConst this_val, int argc
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_FALSE;
}
@ -1397,6 +1479,8 @@ js_document_querySelector(JSContext *ctx, JSValueConst this_val, int argc, JSVal
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_FALSE;
}
@ -1449,6 +1533,8 @@ js_document_querySelectorAll(JSContext *ctx, JSValueConst this_val, int argc, JS
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_FALSE;
}
@ -1505,6 +1591,8 @@ js_doctype_get_property_name(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Dtd *dtd = static_cast<xmlpp::Dtd *>(JS_GetOpaque(this_val, js_doctype_class_id));
if (!dtd) {
@ -1521,6 +1609,8 @@ js_doctype_get_property_publicId(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Dtd *dtd = static_cast<xmlpp::Dtd *>(JS_GetOpaque(this_val, js_doctype_class_id));
if (!dtd) {
@ -1538,6 +1628,8 @@ js_doctype_get_property_systemId(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Dtd *dtd = static_cast<xmlpp::Dtd *>(JS_GetOpaque(this_val, js_doctype_class_id));
if (!dtd) {
@ -1555,6 +1647,8 @@ js_document_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueCon
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[document object]");
}
@ -1609,11 +1703,14 @@ static JSClassDef js_document_class = {
static JSValue
js_document_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -1641,11 +1738,16 @@ js_document_init(JSContext *ctx)
JS_NewClass(JS_GetRuntime(ctx), js_document_class_id, &js_document_class);
JSValue global_obj = JS_GetGlobalObject(ctx);
REF_JS(global_obj);
document_proto = JS_NewObject(ctx);
REF_JS(document_proto);
JS_SetPropertyFunctionList(ctx, document_proto, js_document_proto_funcs, countof(js_document_proto_funcs));
document_class = JS_NewCFunction2(ctx, js_document_ctor, "document", 0, JS_CFUNC_constructor, 0);
REF_JS(document_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, document_class, document_proto);
JS_SetClassProto(ctx, js_document_class_id, document_proto);
@ -1663,6 +1765,8 @@ js_doctype_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueCons
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[doctype object]");
}
@ -1678,8 +1782,9 @@ static std::map<void *, JSValueConst> map_doctypes;
static void
js_doctype_finalizer(JSRuntime *rt, JSValue val)
{
void *node = JS_GetOpaque(val, js_doctype_class_id);
REF_JS(val);
void *node = JS_GetOpaque(val, js_doctype_class_id);
map_doctypes.erase(node);
}
@ -1691,11 +1796,13 @@ static JSClassDef js_doctype_class = {
static JSValue
js_doctype_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -1723,11 +1830,16 @@ js_doctype_init(JSContext *ctx)
JS_NewClass(JS_GetRuntime(ctx), js_doctype_class_id, &js_doctype_class);
JSValue global_obj = JS_GetGlobalObject(ctx);
REF_JS(global_obj);
doctype_proto = JS_NewObject(ctx);
REF_JS(doctype_proto);
JS_SetPropertyFunctionList(ctx, doctype_proto, js_doctype_proto_funcs, countof(js_doctype_proto_funcs));
doctype_class = JS_NewCFunction2(ctx, js_doctype_ctor, "doctype", 0, JS_CFUNC_constructor, 0);
REF_JS(doctype_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, doctype_class, doctype_proto);
JS_SetClassProto(ctx, js_doctype_class_id, doctype_proto);

View File

@ -81,6 +81,8 @@ struct js_element_private {
static void *
js_getopaque(JSValueConst obj, JSClassID class_id)
{
REF_JS(obj);
struct js_element_private *res = (struct js_element_private *)JS_GetOpaque(obj, class_id);
if (!res) {
@ -95,6 +97,8 @@ js_element_get_property_attributes(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -118,6 +122,8 @@ js_element_get_property_children(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -160,6 +166,8 @@ js_element_get_property_childElementCount(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -177,6 +185,8 @@ js_element_get_property_childNodes(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -204,6 +214,8 @@ js_element_get_property_className(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -221,6 +233,8 @@ js_element_get_property_dir(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -242,6 +256,8 @@ js_element_get_property_firstChild(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -263,6 +279,8 @@ js_element_get_property_firstElementChild(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -293,6 +311,8 @@ js_element_get_property_id(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -310,6 +330,8 @@ js_element_get_property_lang(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -327,6 +349,8 @@ js_element_get_property_lastChild(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -347,6 +371,8 @@ js_element_get_property_lastElementChild(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -378,6 +404,8 @@ js_element_get_property_nextElementSibling(JSContext *ctx, JSValueConst this_val
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -407,6 +435,8 @@ js_element_get_property_nodeName(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Node *node = static_cast<xmlpp::Node *>(js_getopaque(this_val, js_element_class_id));
xmlpp::ustring v;
@ -441,6 +471,8 @@ js_element_get_property_nodeType(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Node *node = static_cast<xmlpp::Node *>(js_getopaque(this_val, js_element_class_id));
if (!node) {
@ -467,6 +499,8 @@ js_element_get_property_nodeValue(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Node *node = static_cast<xmlpp::Node *>(js_getopaque(this_val, js_element_class_id));
if (!node) {
@ -513,6 +547,8 @@ js_element_get_property_nextSibling(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -534,6 +570,8 @@ js_element_get_property_ownerDocument(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
JSValue r = JS_DupValue(ctx, interpreter->document_obj);
@ -546,6 +584,8 @@ js_element_get_property_parentElement(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -567,6 +607,8 @@ js_element_get_property_parentNode(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -587,6 +629,8 @@ js_element_get_property_previousElementSibling(JSContext *ctx, JSValueConst this
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -616,6 +660,8 @@ js_element_get_property_previousSibling(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -636,6 +682,8 @@ js_element_get_property_tagName(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -654,6 +702,8 @@ js_element_get_property_title(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -754,6 +804,8 @@ js_element_get_property_innerHtml(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -776,6 +828,8 @@ js_element_get_property_outerHtml(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -798,6 +852,8 @@ js_element_get_property_textContent(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
if (!el) {
@ -820,6 +876,9 @@ js_element_set_property_className(JSContext *ctx, JSValueConst this_val, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
assert(interpreter);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
@ -847,6 +906,9 @@ js_element_set_property_dir(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
assert(interpreter);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
@ -877,6 +939,9 @@ js_element_set_property_id(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
assert(interpreter);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
@ -904,6 +969,9 @@ js_element_set_property_innerHtml(JSContext *ctx, JSValueConst this_val, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
@ -951,6 +1019,9 @@ js_element_set_property_innerText(JSContext *ctx, JSValueConst this_val, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
@ -983,6 +1054,9 @@ js_element_set_property_lang(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
@ -1009,6 +1083,9 @@ js_element_set_property_title(JSContext *ctx, JSValueConst this_val, JSValue val
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
@ -1069,6 +1146,8 @@ js_element_addEventListener(JSContext *ctx, JSValueConst this_val, int argc, JSV
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct js_element_private *el_private = (struct js_element_private *)(JS_GetOpaque(this_val, js_element_class_id));
@ -1121,6 +1200,8 @@ js_element_removeEventListener(JSContext *ctx, JSValueConst this_val, int argc,
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct js_element_private *el_private = (struct js_element_private *)(JS_GetOpaque(this_val, js_element_class_id));
@ -1170,6 +1251,8 @@ js_element_appendChild(JSContext *ctx, JSValueConst this_val, int argc, JSValueC
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
xmlpp::Element *el = static_cast<xmlpp::Element *>(js_getopaque(this_val, js_element_class_id));
@ -1193,6 +1276,8 @@ js_element_cloneNode(JSContext *ctx, JSValueConst this_val, int argc, JSValueCon
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1253,6 +1338,8 @@ js_element_closest(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_UNDEFINED;
}
@ -1305,6 +1392,8 @@ js_element_contains(JSContext *ctx, JSValueConst this_val, int argc, JSValueCons
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1336,6 +1425,8 @@ js_element_getAttribute(JSContext *ctx, JSValueConst this_val, int argc, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1372,6 +1463,8 @@ js_element_getAttributeNode(JSContext *ctx, JSValueConst this_val, int argc, JSV
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1402,6 +1495,8 @@ js_element_getElementsByTagName(JSContext *ctx, JSValueConst this_val, int argc,
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_FALSE;
}
@ -1441,6 +1536,8 @@ js_element_hasAttribute(JSContext *ctx, JSValueConst this_val, int argc, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1471,6 +1568,8 @@ js_element_hasAttributes(JSContext *ctx, JSValueConst this_val, int argc, JSValu
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 0) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1493,6 +1592,8 @@ js_element_hasChildNodes(JSContext *ctx, JSValueConst this_val, int argc, JSValu
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 0) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1515,6 +1616,8 @@ js_element_insertBefore(JSContext *ctx, JSValueConst this_val, int argc, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 2) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1552,6 +1655,8 @@ js_element_isEqualNode(JSContext *ctx, JSValueConst this_val, int argc, JSValueC
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1595,6 +1700,8 @@ js_element_isSameNode(JSContext *ctx, JSValueConst this_val, int argc, JSValueCo
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1618,6 +1725,8 @@ js_element_matches(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_UNDEFINED;
}
@ -1654,13 +1763,14 @@ js_element_matches(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
return JS_FALSE;
}
static JSValue
js_element_querySelector(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv)
{
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_UNDEFINED;
}
@ -1705,6 +1815,8 @@ js_element_querySelectorAll(JSContext *ctx, JSValueConst this_val, int argc, JSV
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_FALSE;
}
@ -1751,6 +1863,8 @@ js_element_remove(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 0) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1776,6 +1890,8 @@ js_element_removeChild(JSContext *ctx, JSValueConst this_val, int argc, JSValueC
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1812,6 +1928,8 @@ js_element_replaceWith(JSContext *ctx, JSValueConst this_val, int argc, JSValueC
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc < 1) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1840,6 +1958,8 @@ js_element_setAttribute(JSContext *ctx, JSValueConst this_val, int argc, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 2) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -1883,6 +2003,8 @@ js_element_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueCons
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[element object]");
}
@ -1946,6 +2068,11 @@ static std::map<void *, JSValueConst> map_elements;
static
void js_element_finalizer(JSRuntime *rt, JSValue val)
{
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(val);
struct js_element_private *el_private = (struct js_element_private *)JS_GetOpaque(val, js_element_class_id);
if (el_private) {
@ -1969,11 +2096,17 @@ static JSClassDef js_element_class = {
static JSValue
js_element_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -2001,11 +2134,16 @@ js_element_init(JSContext *ctx)
JS_NewClass(JS_GetRuntime(ctx), js_element_class_id, &js_element_class);
JSValue global_obj = JS_GetGlobalObject(ctx);
REF_JS(global_obj);
element_proto = JS_NewObject(ctx);
REF_JS(element_proto);
JS_SetPropertyFunctionList(ctx, element_proto, js_element_proto_funcs, countof(js_element_proto_funcs));
element_class = JS_NewCFunction2(ctx, js_element_ctor, "Element", 0, JS_CFUNC_constructor, 0);
REF_JS(element_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, element_class, element_proto);
JS_SetClassProto(ctx, js_element_class_id, element_proto);
@ -2051,6 +2189,7 @@ getElement(JSContext *ctx, void *node)
el_private->interpreter = interpreter;
JSValue element_obj = JS_NewObjectClass(ctx, js_element_class_id);
REF_JS(element_obj);
JS_SetPropertyFunctionList(ctx, element_obj, js_element_proto_funcs, countof(js_element_proto_funcs));
JS_SetClassProto(ctx, js_element_class_id, element_obj);

View File

@ -64,12 +64,22 @@ JSValue getForm(JSContext *ctx, struct form *form);
static struct form_view *
getOpaque(JSValueConst this_val)
{
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return (struct form_view *)JS_GetOpaque(this_val, js_form_elements_class_id);
}
static void
setOpaque(JSValueConst this_val, struct form_view *fv)
{
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (!fv) {
map_elements_form.erase(this_val);
} else {
@ -81,12 +91,22 @@ setOpaque(JSValueConst this_val, struct form_view *fv)
static struct form *
form_GetOpaque(JSValueConst this_val)
{
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return map_rev_form[this_val];
}
static void
form_SetOpaque(JSValueConst this_val, struct form *form)
{
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (!form) {
map_rev_form.erase(this_val);
} else {
@ -131,6 +151,8 @@ js_form_set_items(JSContext *ctx, JSValueConst this_val, void *node)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -161,6 +183,8 @@ js_form_set_items(JSContext *ctx, JSValueConst this_val, void *node)
}
JSValue obj = js_get_form_control_object(ctx, fc->type, fs);
REF_JS(obj);
JS_SetPropertyUint32(ctx, this_val, counter, JS_DupValue(ctx, obj));
if (fc->id) {
@ -182,6 +206,8 @@ js_form_set_items2(JSContext *ctx, JSValueConst this_val, void *node)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct form *form;
@ -200,6 +226,8 @@ js_form_set_items2(JSContext *ctx, JSValueConst this_val, void *node)
}
JSValue obj = js_get_form_control_object(ctx, fc->type, fs);
REF_JS(obj);
JS_SetPropertyUint32(ctx, this_val, counter, obj);
if (fc->id) {
@ -221,6 +249,8 @@ js_form_elements_get_property_length(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -257,6 +287,8 @@ js_form_elements_item2(JSContext *ctx, JSValueConst this_val, int index)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -299,6 +331,8 @@ js_form_elements_item(JSContext *ctx, JSValueConst this_val, int argc, JSValueCo
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_NULL;
}
@ -318,6 +352,8 @@ js_form_elements_namedItem2(JSContext *ctx, JSValueConst this_val, const char *s
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -363,6 +399,8 @@ js_form_elements_namedItem(JSContext *ctx, JSValueConst this_val, int argc, JSVa
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_NULL;
}
@ -386,6 +424,8 @@ js_form_elements_toString(JSContext *ctx, JSValueConst this_val, int argc, JSVal
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[form elements object]");
}
@ -396,6 +436,8 @@ js_form_get_form_view(JSContext *ctx, JSValueConst this_val, JSValueConst *argv)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct form_view *fv = getOpaque(this_val);
return fv;
@ -408,6 +450,8 @@ js_form_get_property_action(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct form *form;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -432,6 +476,9 @@ js_form_set_property_action(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct form *form;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -495,6 +542,8 @@ void js_elements_finalizer(JSRuntime *rt, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(val);
struct form_view *fv = getOpaque(val);
setOpaque(val, nullptr);
@ -539,6 +588,8 @@ js_form_get_property_elements(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -571,6 +622,8 @@ js_form_get_property_encoding(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct form *form;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -609,6 +662,9 @@ js_form_set_property_encoding(JSContext *ctx, JSValueConst this_val, JSValue val
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct form *form;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -649,6 +705,8 @@ js_form_get_property_length(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct form *form;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -672,6 +730,8 @@ js_form_get_property_method(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct form *form;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -710,6 +770,9 @@ js_form_set_property_method(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct form *form;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -748,6 +811,8 @@ js_form_get_property_name(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct form *form;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -773,6 +838,9 @@ js_form_set_property_name(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct form *form;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -806,6 +874,8 @@ js_form_get_property_target(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct form *form;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -830,6 +900,9 @@ js_form_set_property_target(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct form *form;
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -864,6 +937,8 @@ js_form_reset(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *arg
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct form *form;
@ -886,6 +961,8 @@ js_form_submit(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *ar
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct session *ses;
@ -908,6 +985,8 @@ js_form_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[form object]");
}
@ -917,6 +996,8 @@ js_get_form_object(JSContext *ctx, JSValueConst jsdoc, struct form *form)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(jsdoc);
return getForm(ctx, form);
}
@ -985,6 +1066,8 @@ static const JSCFunctionListEntry js_form_proto_funcs[] = {
static
void js_form_finalizer(JSRuntime *rt, JSValue val)
{
REF_JS(val);
struct form *form = form_GetOpaque(val);
form_SetOpaque(val, nullptr);

View File

@ -65,6 +65,8 @@ forms_GetOpaque(JSValueConst this_val)
static void
forms_SetOpaque(JSValueConst this_val, void *node)
{
REF_JS(this_val);
if (!node) {
map_rev_forms.erase(this_val);
} else {
@ -102,6 +104,7 @@ js_forms_set_items(JSContext *ctx, JSValueConst this_val, void *node)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
@ -133,6 +136,8 @@ js_forms_get_property_length(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -154,6 +159,8 @@ js_forms_item2(JSContext *ctx, JSValueConst this_val, int index)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct form_view *fv;
int counter = -1;
@ -183,6 +190,8 @@ js_forms_item(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *arg
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_UNDEFINED;
}
@ -202,6 +211,8 @@ js_forms_namedItem(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_UNDEFINED;
}
@ -259,6 +270,8 @@ js_forms_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[forms object]");
}

View File

@ -54,6 +54,8 @@ js_history_back(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *a
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
assert(interpreter);
struct document_view *doc_view = interpreter->vs->doc_view;
@ -75,6 +77,8 @@ js_history_forward(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
assert(interpreter);
struct document_view *doc_view = interpreter->vs->doc_view;
@ -92,6 +96,8 @@ js_history_go(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *arg
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
assert(interpreter);
struct document_view *doc_view = interpreter->vs->doc_view;
@ -127,6 +133,8 @@ js_history_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueCons
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[history object]");
}
@ -144,11 +152,14 @@ static JSClassDef js_history_class = {
static JSValue
js_history_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -176,11 +187,16 @@ js_history_init(JSContext *ctx)
JS_NewClass(JS_GetRuntime(ctx), js_history_class_id, &js_history_class);
JSValue global_obj = JS_GetGlobalObject(ctx);
REF_JS(global_obj);
history_proto = JS_NewObject(ctx);
REF_JS(history_proto);
JS_SetPropertyFunctionList(ctx, history_proto, js_history_funcs, countof(js_history_funcs));
history_class = JS_NewCFunction2(ctx, js_history_ctor, "history", 0, JS_CFUNC_constructor, 0);
REF_JS(history_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, history_class, history_proto);
JS_SetClassProto(ctx, js_history_class_id, history_proto);

View File

@ -29,6 +29,8 @@ js_implementation_createHTMLDocument(JSContext *ctx, JSValueConst this_val, int
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -69,6 +71,8 @@ js_implementation_toString(JSContext *ctx, JSValueConst this_val, int argc, JSVa
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[implementation object]");
}
@ -84,11 +88,14 @@ static JSClassDef js_implementation_class = {
static JSValue
js_implementation_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -109,6 +116,8 @@ fail:
int
js_implementation_init(JSContext *ctx, JSValue global_obj)
{
REF_JS(global_obj);
JSValue implementation_proto, implementation_class;
/* create the implementation class */
@ -116,9 +125,13 @@ js_implementation_init(JSContext *ctx, JSValue global_obj)
JS_NewClass(JS_GetRuntime(ctx), js_implementation_class_id, &js_implementation_class);
implementation_proto = JS_NewObject(ctx);
REF_JS(implementation_proto);
JS_SetPropertyFunctionList(ctx, implementation_proto, js_implementation_proto_funcs, countof(js_implementation_proto_funcs));
implementation_class = JS_NewCFunction2(ctx, js_implementation_ctor, "implementation", 0, JS_CFUNC_constructor, 0);
REF_JS(implementation_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, implementation_class, implementation_proto);
JS_SetClassProto(ctx, js_implementation_class_id, implementation_proto);

View File

@ -92,6 +92,8 @@ unicode_to_value(JSContext *ctx, unicode_val_T u)
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
JSValue str = JS_NewStringLen(ctx, " ", 8);
REF_JS(str);
JSString *p = JS_VALUE_GET_STRING(str);
p->is_wide_char = 1;
@ -125,6 +127,8 @@ js_value_to_accesskey(JSValueConst val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(val);
JSString *p = JS_VALUE_GET_STRING(val);
size_t len;
@ -156,6 +160,8 @@ js_input_get_property_accessKey(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -210,6 +216,8 @@ js_input_set_property_accessKey(JSContext *ctx, JSValueConst this_val, JSValue v
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -266,6 +274,8 @@ js_input_get_property_alt(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -304,6 +314,8 @@ js_input_set_property_alt(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -352,6 +364,8 @@ js_input_get_property_checked(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct form_state *fs;
fs = js_input_get_form_state(ctx, this_val);
if (!fs) {
@ -370,6 +384,8 @@ js_input_set_property_checked(JSContext *ctx, JSValueConst this_val, JSValue val
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -413,6 +429,8 @@ js_input_get_property_defaultChecked(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -450,6 +468,8 @@ js_input_get_property_defaultValue(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -487,6 +507,8 @@ js_input_get_property_disabled(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -526,6 +548,9 @@ js_input_set_property_disabled(JSContext *ctx, JSValueConst this_val, JSValue va
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -569,6 +594,8 @@ js_input_get_property_form(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
#if 0
JS::CallArgs args = CallArgsFromVp(argc, vp);
JS::RootedObject hobj(ctx, &args.thisv().toObject());
@ -594,6 +621,8 @@ js_input_get_property_maxLength(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -632,6 +661,9 @@ js_input_set_property_maxLength(JSContext *ctx, JSValueConst this_val, JSValue v
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -672,6 +704,8 @@ js_input_get_property_name(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -712,6 +746,9 @@ js_input_set_property_name(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -760,6 +797,8 @@ js_input_get_property_readonly(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -800,6 +839,9 @@ js_input_set_property_readonly(JSContext *ctx, JSValueConst this_val, JSValue va
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -843,6 +885,8 @@ js_input_get_property_selectedIndex(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -886,6 +930,9 @@ js_input_set_property_selectedIndex(JSContext *ctx, JSValueConst this_val, JSVal
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -935,6 +982,8 @@ js_input_get_property_size(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -973,6 +1022,8 @@ js_input_get_property_src(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -1021,6 +1072,9 @@ js_input_set_property_src(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -1078,6 +1132,8 @@ js_input_get_property_tabIndex(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -1127,6 +1183,8 @@ js_input_get_property_type(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -1182,6 +1240,8 @@ js_input_get_property_value(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct form_state *fs;
fs = js_input_get_form_state(ctx, this_val);
@ -1202,6 +1262,9 @@ js_input_set_property_value(JSContext *ctx, JSValueConst this_val, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -1260,6 +1323,8 @@ js_input_get_form_state(JSContext *ctx, JSValueConst jsinput)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(jsinput);
struct form_state *fs = (struct form_state *)JS_GetOpaque(jsinput, js_input_class_id);
return fs;
@ -1272,6 +1337,8 @@ js_input_blur(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *arg
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
/* We are a text-mode browser and there *always* has to be something
* selected. So we do nothing for now. (That was easy.) */
return JS_UNDEFINED;
@ -1284,6 +1351,8 @@ js_input_click(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *ar
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -1333,6 +1402,8 @@ js_input_focus(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *ar
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct document *document;
@ -1376,6 +1447,8 @@ js_input_select(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *a
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
/* We support no text selecting yet. So we do nothing for now.
* (That was easy, too.) */
return JS_UNDEFINED;
@ -1396,6 +1469,8 @@ js_input_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[input object]");
}
@ -1446,6 +1521,7 @@ quickjs_moved_form_state(struct form_state *fs)
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
JSValue jsinput = fs->ecmascript_obj;
REF_JS(jsinput);
if (!JS_IsNull(jsinput)) {
map_inputs.erase(fs);
@ -1473,11 +1549,14 @@ static JSClassDef js_input_class = {
static JSValue
js_input_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -1498,6 +1577,8 @@ fail:
int
js_input_init(JSContext *ctx, JSValue global_obj)
{
REF_JS(global_obj);
JSValue input_proto, input_class;
/* create the input class */
@ -1505,9 +1586,13 @@ js_input_init(JSContext *ctx, JSValue global_obj)
JS_NewClass(JS_GetRuntime(ctx), js_input_class_id, &js_input_class);
input_proto = JS_NewObject(ctx);
REF_JS(input_proto);
JS_SetPropertyFunctionList(ctx, input_proto, js_input_proto_funcs, countof(js_input_proto_funcs));
input_class = JS_NewCFunction2(ctx, js_input_ctor, "input", 0, JS_CFUNC_constructor, 0);
REF_JS(input_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, input_class, input_proto);
JS_SetClassProto(ctx, js_input_class_id, input_proto);

View File

@ -70,6 +70,8 @@ struct keyboard {
static
void js_keyboardEvent_finalizer(JSRuntime *rt, JSValue val)
{
REF_JS(val);
struct keyboard *keyb = JS_GetOpaque(val, js_keyboardEvent_class_id);
if (keyb) {
@ -85,6 +87,8 @@ static JSClassDef js_keyboardEvent_class = {
static JSValue
js_keyboardEvent_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
@ -97,6 +101,7 @@ js_keyboardEvent_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValue
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -129,6 +134,8 @@ js_keyboardEvent_get_property_key(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct keyboard *keyb = static_cast<struct keyboard *>(JS_GetOpaque(this_val, js_keyboardEvent_class_id));
if (!keyb) {
@ -148,6 +155,8 @@ js_keyboardEvent_get_property_keyCode(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct keyboard *keyb = static_cast<struct keyboard *>(JS_GetOpaque(this_val, js_keyboardEvent_class_id));
if (!keyb) {

View File

@ -57,7 +57,6 @@ static JSClassID js_localstorage_class_id;
static char *
readFromStorage(const char *key)
{
char *val;
if (local_storage_ready==0)
@ -111,6 +110,8 @@ js_localstorage_getitem(JSContext *ctx, JSValueConst this_val, int argc, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1)
{
return JS_UNDEFINED;
@ -143,6 +144,8 @@ js_localstorage_removeitem(JSContext *ctx, JSValueConst this_val, int argc, JSVa
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1)
{
return JS_UNDEFINED;
@ -170,6 +173,7 @@ js_localstorage_setitem(JSContext *ctx, JSValueConst this_val, int argc, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
@ -210,6 +214,8 @@ js_localstorage_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValu
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[localstorage object]");
}
@ -240,8 +246,11 @@ js_localstorage_init(JSContext *ctx)
}
JSValue global_obj = JS_GetGlobalObject(ctx);
REF_JS(global_obj);
JSValue localstorage_obj = JS_NewObjectClass(ctx, js_localstorage_class_id);
REF_JS(localstorage_obj);
JS_SetPropertyFunctionList(ctx, localstorage_obj, js_localstorage_proto_funcs, countof(js_localstorage_proto_funcs));
JS_SetClassProto(ctx, js_localstorage_class_id, localstorage_obj);

View File

@ -53,6 +53,8 @@ js_location_get_property_hash(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -84,6 +86,8 @@ js_location_get_property_host(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -115,6 +119,8 @@ js_location_get_property_hostname(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -146,6 +152,8 @@ js_location_get_property_href(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -177,6 +185,8 @@ js_location_get_property_origin(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -208,6 +218,8 @@ js_location_get_property_pathname(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -240,6 +252,8 @@ js_location_get_property_port(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -270,6 +284,8 @@ js_location_get_property_protocol(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -305,6 +321,8 @@ js_location_get_property_search(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -338,6 +356,8 @@ js_location_set_property_hash(JSContext *ctx, JSValueConst this_val, JSValue val
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -367,6 +387,9 @@ js_location_set_property_host(JSContext *ctx, JSValueConst this_val, JSValue val
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -395,6 +418,9 @@ js_location_set_property_hostname(JSContext *ctx, JSValueConst this_val, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -423,6 +449,9 @@ js_location_set_property_href(JSContext *ctx, JSValueConst this_val, JSValue val
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -451,6 +480,9 @@ js_location_set_property_pathname(JSContext *ctx, JSValueConst this_val, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -479,6 +511,9 @@ js_location_set_property_port(JSContext *ctx, JSValueConst this_val, JSValue val
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -507,6 +542,9 @@ js_location_set_property_protocol(JSContext *ctx, JSValueConst this_val, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -535,6 +573,9 @@ js_location_set_property_search(JSContext *ctx, JSValueConst this_val, JSValue v
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -563,6 +604,8 @@ js_location_reload(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -584,6 +627,8 @@ js_location_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueCon
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return js_location_get_property_href(ctx, this_val);
}
@ -609,11 +654,14 @@ static JSClassDef js_location_class = {
static JSValue
js_location_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -641,11 +689,16 @@ js_location_init(JSContext *ctx)
JS_NewClass(JS_GetRuntime(ctx), js_location_class_id, &js_location_class);
JSValue global_obj = JS_GetGlobalObject(ctx);
REF_JS(global_obj);
location_proto = JS_NewObject(ctx);
REF_JS(location_proto);
JS_SetPropertyFunctionList(ctx, location_proto, js_location_proto_funcs, countof(js_location_proto_funcs));
location_class = JS_NewCFunction2(ctx, js_location_ctor, "location", 0, JS_CFUNC_constructor, 0);
REF_JS(location_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, location_class, location_proto);
JS_SetClassProto(ctx, js_location_class_id, location_proto);

View File

@ -76,6 +76,8 @@ void js_messageEvent_finalizer(JSRuntime *rt, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(val);
struct message_event *event = (struct message_event *)JS_GetOpaque(val, js_messageEvent_class_id);
if (event) {
@ -98,6 +100,8 @@ js_messageEvent_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueC
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
@ -110,6 +114,7 @@ js_messageEvent_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueC
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -143,6 +148,8 @@ js_messageEvent_get_property_data(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct message_event *event = static_cast<struct message_event *>(JS_GetOpaque(this_val, js_messageEvent_class_id));
if (!event || !event->data) {
@ -159,6 +166,8 @@ js_messageEvent_get_property_lastEventId(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct message_event *event = static_cast<struct message_event *>(JS_GetOpaque(this_val, js_messageEvent_class_id));
if (!event || !event->lastEventId) {
@ -175,6 +184,8 @@ js_messageEvent_get_property_origin(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct message_event *event = static_cast<struct message_event *>(JS_GetOpaque(this_val, js_messageEvent_class_id));
if (!event || !event->origin) {
@ -191,6 +202,8 @@ js_messageEvent_get_property_source(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct message_event *event = static_cast<struct message_event *>(JS_GetOpaque(this_val, js_messageEvent_class_id));
if (!event || !event->source) {

View File

@ -54,6 +54,8 @@ js_navigator_get_property_appCodeName(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
JSValue r = JS_NewString(ctx, "Mozilla"); /* More like a constant nowadays. */
RETURN_JS(r);
}
@ -64,6 +66,8 @@ js_navigator_get_property_appName(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
JSValue r = JS_NewString(ctx, "ELinks (roughly compatible with Netscape Navigator, Mozilla and Microsoft Internet Explorer)");
RETURN_JS(r);
}
@ -74,6 +78,8 @@ js_navigator_get_property_appVersion(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
JSValue r = JS_NewString(ctx, VERSION);
RETURN_JS(r);
}
@ -84,6 +90,8 @@ js_navigator_get_property_language(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
#ifdef CONFIG_NLS
if (get_opt_bool("protocol.http.accept_ui_language", NULL)) {
JSValue r = JS_NewString(ctx, language_to_iso639(current_language));
@ -99,6 +107,8 @@ js_navigator_get_property_platform(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
JSValue r = JS_NewString(ctx, system_name);
RETURN_JS(r);
}
@ -109,9 +119,9 @@ js_navigator_get_property_userAgent(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
char *optstr;
REF_JS(this_val);
optstr = get_opt_str("protocol.http.user_agent", NULL);
char *optstr = get_opt_str("protocol.http.user_agent", NULL);
if (*optstr && strcmp(optstr, " ")) {
char *ustr, ts[64] = "";
@ -147,6 +157,8 @@ js_navigator_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueCo
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[navigator object]");
}
@ -167,11 +179,14 @@ static JSClassDef js_navigator_class = {
static JSValue
js_navigator_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -199,11 +214,16 @@ js_navigator_init(JSContext *ctx)
JS_NewClass(JS_GetRuntime(ctx), js_navigator_class_id, &js_navigator_class);
JSValue global_obj = JS_GetGlobalObject(ctx);
REF_JS(global_obj);
navigator_proto = JS_NewObject(ctx);
REF_JS(navigator_proto);
JS_SetPropertyFunctionList(ctx, navigator_proto, js_navigator_proto_funcs, countof(js_navigator_proto_funcs));
navigator_class = JS_NewCFunction2(ctx, js_navigator_ctor, "navigator", 0, JS_CFUNC_constructor, 0);
REF_JS(navigator_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, navigator_class, navigator_proto);
JS_SetClassProto(ctx, js_navigator_class_id, navigator_proto);

View File

@ -62,12 +62,16 @@ static std::map<JSValueConst, void *> map_rev_nodelist;
static void *
js_nodeList_GetOpaque(JSValueConst this_val)
{
REF_JS(this_val);
return map_rev_nodelist[this_val];
}
static void
js_nodeList_SetOpaque(JSValueConst this_val, void *node)
{
REF_JS(this_val);
if (!node) {
map_rev_nodelist.erase(this_val);
} else {
@ -98,6 +102,8 @@ js_nodeList_item2(JSContext *ctx, JSValueConst this_val, int idx)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Node::NodeList *nl = static_cast<xmlpp::Node::NodeList *>(js_nodeList_GetOpaque(this_val));
if (!nl) {
@ -128,6 +134,8 @@ js_nodeList_item(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
if (argc != 1) {
return JS_UNDEFINED;
}
@ -144,6 +152,7 @@ js_nodeList_set_items(JSContext *ctx, JSValue this_val, void *node)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
xmlpp::Node::NodeList *nl = static_cast<xmlpp::Node::NodeList *>(node);
@ -170,6 +179,8 @@ js_nodeList_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueCon
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[nodeList object]");
}
@ -183,6 +194,8 @@ static const JSCFunctionListEntry js_nodeList_proto_funcs[] = {
static void
js_nodeList_finalizer(JSRuntime *rt, JSValue val)
{
REF_JS(val);
void *node = js_nodeList_GetOpaque(val);
js_nodeList_SetOpaque(val, nullptr);

View File

@ -53,6 +53,8 @@ js_screen_get_property_availHeight(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
struct document_view *doc_view = vs->doc_view;
@ -70,6 +72,8 @@ js_screen_get_property_availWidth(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
struct document_view *doc_view = vs->doc_view;
@ -87,6 +91,8 @@ js_screen_get_property_height(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
struct document_view *doc_view = vs->doc_view;
@ -113,6 +119,8 @@ js_screen_get_property_width(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
struct document_view *doc_view = vs->doc_view;
@ -139,6 +147,8 @@ js_screen_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[screen object]");
}
@ -157,11 +167,14 @@ static JSClassDef js_screen_class = {
static JSValue
js_screen_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -190,11 +203,16 @@ js_screen_init(JSContext *ctx)
JS_NewClass(JS_GetRuntime(ctx), js_screen_class_id, &js_screen_class);
JSValue global_obj = JS_GetGlobalObject(ctx);
REF_JS(global_obj);
screen_proto = JS_NewObject(ctx);
REF_JS(screen_proto);
JS_SetPropertyFunctionList(ctx, screen_proto, js_screen_proto_funcs, countof(js_screen_proto_funcs));
screen_class = JS_NewCFunction2(ctx, js_screen_ctor, "screen", 2, JS_CFUNC_constructor, 0);
REF_JS(screen_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, screen_class, screen_proto);
JS_SetClassProto(ctx, js_screen_class_id, screen_proto);

View File

@ -54,6 +54,8 @@ js_unibar_get_property_visible(JSContext *ctx, JSValueConst this_val, int magic)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
struct document_view *doc_view = vs->doc_view;
@ -85,6 +87,9 @@ js_unibar_set_property_visible(JSContext *ctx, JSValueConst this_val, JSValue va
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
struct document_view *doc_view = vs->doc_view;
@ -116,6 +121,8 @@ js_menubar_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueCons
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[menubar object]");
}
@ -125,6 +132,8 @@ js_statusbar_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueCo
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[statusbar object]");
}
@ -149,11 +158,14 @@ static JSClassDef js_statusbar_class = {
static JSValue
js_menubar_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -174,11 +186,14 @@ fail:
static JSValue
js_statusbar_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv)
{
REF_JS(new_target);
JSValue obj = JS_UNDEFINED;
JSValue proto;
/* using new_target to get the prototype is necessary when the
class is extended. */
proto = JS_GetPropertyStr(ctx, new_target, "prototype");
REF_JS(proto);
if (JS_IsException(proto)) {
goto fail;
@ -207,10 +222,15 @@ js_unibar_init(JSContext *ctx)
JS_NewClass(JS_GetRuntime(ctx), js_menubar_class_id, &js_menubar_class);
JSValue global_obj = JS_GetGlobalObject(ctx);
REF_JS(global_obj);
menubar_proto = JS_NewObject(ctx);
REF_JS(menubar_proto);
JS_SetPropertyFunctionList(ctx, menubar_proto, js_menubar_proto_funcs, countof(js_menubar_proto_funcs));
menubar_class = JS_NewCFunction2(ctx, js_menubar_ctor, "menubar", 2, JS_CFUNC_constructor, 0);
REF_JS(menubar_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, menubar_class, menubar_proto);
JS_SetClassProto(ctx, js_menubar_class_id, menubar_proto);
@ -221,8 +241,12 @@ js_unibar_init(JSContext *ctx)
JS_NewClass(JS_GetRuntime(ctx), js_statusbar_class_id, &js_statusbar_class);
statusbar_proto = JS_NewObject(ctx);
REF_JS(statusbar_proto);
JS_SetPropertyFunctionList(ctx, statusbar_proto, js_statusbar_proto_funcs, countof(js_statusbar_proto_funcs));
statusbar_class = JS_NewCFunction2(ctx, js_statusbar_ctor, "statusbar", 2, JS_CFUNC_constructor, 0);
REF_JS(statusbar_class);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, statusbar_class, statusbar_proto);
JS_SetClassProto(ctx, js_statusbar_class_id, statusbar_proto);

View File

@ -74,6 +74,8 @@ js_window_finalize(JSRuntime *rt, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(val);
struct el_window *elwin = (struct el_window *)JS_GetOpaque(val, js_window_class_id);
if (elwin) {
@ -94,6 +96,8 @@ js_window_open(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *ar
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct view_state *vs;
struct document_view *doc_view;
struct session *ses;
@ -223,6 +227,8 @@ js_window_setTimeout(JSContext *ctx, JSValueConst this_val, int argc, JSValueCon
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
int64_t timeout = 0;
JSValueConst func;
@ -273,6 +279,8 @@ js_window_clearTimeout(JSContext *ctx, JSValueConst this_val, int argc, JSValueC
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
if (argc != 1) {
@ -304,6 +312,8 @@ js_window_get_property_closed(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_FALSE;
}
@ -313,6 +323,8 @@ js_window_get_property_parent(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
/* XXX: It would be nice if the following worked, yes.
* The problem is that we get called at the point where
* document.frame properties are going to be mostly NULL.
@ -333,7 +345,10 @@ js_window_get_property_self(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
JSValue r = JS_DupValue(ctx, this_val);
RETURN_JS(r);
}
@ -343,6 +358,8 @@ js_window_get_property_status(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_UNDEFINED;
}
@ -352,6 +369,9 @@ js_window_set_property_status(JSContext *ctx, JSValueConst this_val, JSValue val
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct view_state *vs = interpreter->vs;
@ -379,6 +399,8 @@ js_window_get_property_top(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct document_view *doc_view;
struct document_view *top_view;
JSValue newjsframe;
@ -424,6 +446,8 @@ js_window_alert(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *a
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
assert(interpreter);
@ -458,6 +482,8 @@ js_window_toString(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_NewString(ctx, "[window object]");
}
@ -467,6 +493,8 @@ js_window_addEventListener(JSContext *ctx, JSValueConst this_val, int argc, JSVa
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct el_window *elwin = (struct el_window *)(JS_GetOpaque(this_val, js_window_class_id));
@ -527,6 +555,8 @@ js_window_removeEventListener(JSContext *ctx, JSValueConst this_val, int argc, J
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct el_window *elwin = (struct el_window *)(JS_GetOpaque(this_val, js_window_class_id));
@ -618,6 +648,8 @@ js_window_postMessage(JSContext *ctx, JSValueConst this_val, int argc, JSValueCo
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
struct el_window *elwin = (struct el_window *)(JS_GetOpaque(this_val, js_window_class_id));
@ -693,6 +725,8 @@ js_window_init(JSContext *ctx)
JS_NewClass(JS_GetRuntime(ctx), js_window_class_id, &js_window_class);
JSValue global_obj = JS_GetGlobalObject(ctx);
REF_JS(global_obj);
JS_SetPropertyFunctionList(ctx, global_obj, js_window_proto_funcs, countof(js_window_proto_funcs));
JS_SetPropertyStr(ctx, global_obj, "window", global_obj);

View File

@ -404,6 +404,8 @@ xhr_finalizer(JSRuntime *rt, JSValue val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(val);
Xhr *x = (Xhr *)JS_GetOpaque(val, xhr_class_id);
if (x) {
@ -439,6 +441,8 @@ xhr_mark(JSRuntime *rt, JSValueConst val, JS_MarkFunc *mark_func)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(val);
Xhr *x = (Xhr *)JS_GetOpaque(val, xhr_class_id);
if (x) {
@ -460,6 +464,8 @@ static JSClassDef xhr_class = {
static Xhr *
xhr_get(JSContext *ctx, JSValueConst obj)
{
REF_JS(obj);
return (Xhr *)JS_GetOpaque2(ctx, obj, xhr_class_id);
}
@ -595,7 +601,10 @@ xhr_constructor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(new_target);
JSValue obj = JS_NewObjectClass(ctx, xhr_class_id);
REF_JS(obj);
if (JS_IsException(obj)) {
return obj;
@ -636,6 +645,8 @@ xhr_event_get(JSContext *ctx, JSValueConst this_val, int magic)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -651,6 +662,9 @@ xhr_event_set(JSContext *ctx, JSValueConst this_val, JSValueConst value, int mag
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(value);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -670,6 +684,8 @@ xhr_readystate_get(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -685,6 +701,8 @@ xhr_response_get(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -724,6 +742,8 @@ xhr_responsetext_get(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -746,6 +766,8 @@ xhr_responsetype_get(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -772,6 +794,9 @@ xhr_responsetype_set(JSContext *ctx, JSValueConst this_val, JSValueConst value)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(value);
static const char array_buffer[] = "arraybuffer";
static const char json[] = "json";
static const char text[] = "text";
@ -810,6 +835,8 @@ xhr_responseurl_get(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -825,6 +852,8 @@ xhr_status_get(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -840,6 +869,8 @@ xhr_statustext_get(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -855,6 +886,8 @@ xhr_timeout_get(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -870,6 +903,9 @@ xhr_timeout_set(JSContext *ctx, JSValueConst this_val, JSValueConst value)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(value);
Xhr *x = xhr_get(ctx, this_val);
if (!x || !x->async) {
@ -895,6 +931,8 @@ xhr_upload_get(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
// TODO.
return JS_UNDEFINED;
}
@ -905,6 +943,7 @@ xhr_withcredentials_get(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
// TODO.
return JS_UNDEFINED;
}
@ -915,6 +954,8 @@ xhr_withcredentials_set(JSContext *ctx, JSValueConst this_val, JSValueConst valu
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
REF_JS(value);
// TODO.
return JS_UNDEFINED;
}
@ -925,6 +966,8 @@ xhr_abort(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -947,6 +990,8 @@ xhr_addEventListener(JSContext *ctx, JSValueConst this_val, int argc, JSValueCon
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -997,6 +1042,8 @@ xhr_removeEventListener(JSContext *ctx, JSValueConst this_val, int argc, JSValue
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -1046,6 +1093,8 @@ xhr_getallresponseheaders(JSContext *ctx, JSValueConst this_val, int argc, JSVal
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -1065,6 +1114,8 @@ xhr_getresponseheader(JSContext *ctx, JSValueConst this_val, int argc, JSValueCo
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -1094,6 +1145,8 @@ xhr_open(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
static const char head_method[] = "HEAD";
Xhr *x = xhr_get(ctx, this_val);
@ -1247,6 +1300,8 @@ xhr_overridemimetype(JSContext *ctx, JSValueConst this_val, int argc, JSValueCon
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
return JS_ThrowTypeError(ctx, "unsupported");
}
@ -1256,6 +1311,8 @@ xhr_send(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv)
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -1325,6 +1382,8 @@ xhr_setrequestheader(JSContext *ctx, JSValueConst this_val, int argc, JSValueCon
#ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
REF_JS(this_val);
Xhr *x = xhr_get(ctx, this_val);
if (!x) {
@ -1429,6 +1488,9 @@ static const JSCFunctionListEntry xhr_proto_funcs[] = {
static void
JS_NewGlobalCConstructor2(JSContext *ctx, JSValue func_obj, const char *name, JSValueConst proto)
{
REF_JS(func_obj);
REF_JS(proto);
JS_DefinePropertyValueStr(ctx, JS_GetGlobalObject(ctx), name,
JS_DupValue(ctx, func_obj), JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
JS_SetConstructor(ctx, func_obj, proto);
@ -1440,6 +1502,9 @@ JS_NewGlobalCConstructor(JSContext *ctx, const char *name, JSCFunction *func, in
{
JSValue func_obj;
func_obj = JS_NewCFunction2(ctx, func, name, length, JS_CFUNC_constructor_or_func, 0);
REF_JS(func_obj);
REF_JS(proto);
JS_NewGlobalCConstructor2(ctx, func_obj, name, proto);
return func_obj;
@ -1457,11 +1522,15 @@ js_xhr_init(JSContext *ctx)
JS_NewClassID(&xhr_class_id);
JS_NewClass(JS_GetRuntime(ctx), xhr_class_id, &xhr_class);
proto = JS_NewObject(ctx);
REF_JS(proto);
JS_SetPropertyFunctionList(ctx, proto, xhr_proto_funcs, countof(xhr_proto_funcs));
JS_SetClassProto(ctx, xhr_class_id, proto);
/* XHR object */
obj = JS_NewGlobalCConstructor(ctx, "XMLHttpRequest", xhr_constructor, 1, proto);
REF_JS(obj);
JS_SetPropertyFunctionList(ctx, obj, xhr_class_funcs, countof(xhr_class_funcs));
return 0;