1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-07-01 02:05:33 +00:00

[quickjs] Added RETURN_JS macro for easier debugging

This commit is contained in:
Witold Filipczyk 2021-11-20 17:29:00 +01:00
parent 6ca8ea37a5
commit 20362003bd
19 changed files with 223 additions and 134 deletions

View File

@ -3,6 +3,18 @@
#include <quickjs/quickjs.h> #include <quickjs/quickjs.h>
#ifdef ECMASCRIPT_DEBUG
#define RETURN_JS(obj) \
fprintf(stderr, "%s:%d obj=%p\n", __FILE__, __LINE__, JS_VALUE_GET_PTR(obj)); \
return obj
#else
#define RETURN_JS(obj) return obj
#endif
struct ecmascript_interpreter; struct ecmascript_interpreter;
struct form_view; struct form_view;
struct form_state; struct form_state;

View File

@ -20,6 +20,7 @@
#include "document/forms.h" #include "document/forms.h"
#include "document/view.h" #include "document/view.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/attr.h" #include "ecmascript/quickjs/attr.h"
#include "intl/libintl.h" #include "intl/libintl.h"
#include "main/select.h" #include "main/select.h"
@ -79,7 +80,9 @@ js_attr_get_property_name(JSContext *ctx, JSValueConst this_val)
xmlpp::ustring v = attr->get_name(); xmlpp::ustring v = attr->get_name();
return JS_NewString(ctx, v.c_str()); JSValue r = JS_NewString(ctx, v.c_str());
RETURN_JS(r);
} }
static JSValue static JSValue
@ -106,7 +109,9 @@ js_attr_get_property_value(JSContext *ctx, JSValueConst this_val)
xmlpp::ustring v = attr->get_value(); xmlpp::ustring v = attr->get_value();
return JS_NewString(ctx, v.c_str()); JSValue r = JS_NewString(ctx, v.c_str());
RETURN_JS(r);
} }
static const JSCFunctionListEntry js_attr_proto_funcs[] = { static const JSCFunctionListEntry js_attr_proto_funcs[] = {
@ -136,7 +141,7 @@ js_attr_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *ar
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -175,5 +180,5 @@ getAttr(JSContext *ctx, void *node)
JS_SetOpaque(attr_obj, node); JS_SetOpaque(attr_obj, node);
return attr_obj; RETURN_JS(attr_obj);
} }

View File

@ -20,6 +20,7 @@
#include "document/forms.h" #include "document/forms.h"
#include "document/view.h" #include "document/view.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/attr.h" #include "ecmascript/quickjs/attr.h"
#include "ecmascript/quickjs/attributes.h" #include "ecmascript/quickjs/attributes.h"
#include "intl/libintl.h" #include "intl/libintl.h"
@ -190,7 +191,7 @@ js_attributes_namedItem2(JSContext *ctx, JSValueConst this_val, const char *str)
if (name == attr->get_name()) { if (name == attr->get_name()) {
JSValue obj = getAttr(ctx, attr); JSValue obj = getAttr(ctx, attr);
return obj; RETURN_JS(obj);
} }
} }
@ -219,7 +220,7 @@ js_attributes_getNamedItem(JSContext *ctx, JSValueConst this_val, int argc, JSVa
JSValue ret = js_attributes_namedItem2(ctx, this_val, str); JSValue ret = js_attributes_namedItem2(ctx, this_val, str);
JS_FreeCString(ctx, str); JS_FreeCString(ctx, str);
return ret; RETURN_JS(ret);
} }
static const JSCFunctionListEntry js_attributes_proto_funcs[] = { static const JSCFunctionListEntry js_attributes_proto_funcs[] = {
@ -250,7 +251,7 @@ js_attributes_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueCon
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -290,5 +291,5 @@ getAttributes(JSContext *ctx, void *node)
JS_SetOpaque(attributes_obj, node); JS_SetOpaque(attributes_obj, node);
js_attributes_set_items(ctx, attributes_obj, node); js_attributes_set_items(ctx, attributes_obj, node);
return attributes_obj; RETURN_JS(attributes_obj);
} }

View File

@ -187,7 +187,7 @@ js_htmlCollection_namedItem(JSContext *ctx, JSValueConst this_val, int argc, JSV
JSValue ret = js_htmlCollection_namedItem2(ctx, this_val, str); JSValue ret = js_htmlCollection_namedItem2(ctx, this_val, str);
JS_FreeCString(ctx, str); JS_FreeCString(ctx, str);
return ret; RETURN_JS(ret);
} }
static void static void
@ -269,7 +269,7 @@ js_htmlCollection_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValu
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -308,7 +308,8 @@ getCollection(JSContext *ctx, void *node)
auto node_find = map_collections.find(node); auto node_find = map_collections.find(node);
if (node_find != map_collections.end()) { if (node_find != map_collections.end()) {
return JS_DupValue(ctx, node_find->second); JSValue r = JS_DupValue(ctx, node_find->second);
RETURN_JS(r);
} }
JSValue htmlCollection_obj = JS_NewArray(ctx); JSValue htmlCollection_obj = JS_NewArray(ctx);
JS_SetPropertyFunctionList(ctx, htmlCollection_obj, js_htmlCollection_proto_funcs, countof(js_htmlCollection_proto_funcs)); JS_SetPropertyFunctionList(ctx, htmlCollection_obj, js_htmlCollection_proto_funcs, countof(js_htmlCollection_proto_funcs));
@ -317,5 +318,6 @@ getCollection(JSContext *ctx, void *node)
js_htmlCollection_set_items(ctx, htmlCollection_obj, node); js_htmlCollection_set_items(ctx, htmlCollection_obj, node);
map_collections[node] = htmlCollection_obj; map_collections[node] = htmlCollection_obj;
return JS_DupValue(ctx, htmlCollection_obj); JSValue rr = JS_DupValue(ctx, htmlCollection_obj);
RETURN_JS(rr);
} }

View File

@ -16,6 +16,7 @@
#include "dialogs/menu.h" #include "dialogs/menu.h"
#include "dialogs/status.h" #include "dialogs/status.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/console.h" #include "ecmascript/quickjs/console.h"
#include "intl/libintl.h" #include "intl/libintl.h"
#include "osdep/newwin.h" #include "osdep/newwin.h"
@ -113,7 +114,7 @@ js_console_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);

View File

@ -134,7 +134,7 @@ js_document_get_property_baseURI(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewString(ctx, str); JSValue ret = JS_NewString(ctx, str);
mem_free(str); mem_free(str);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -206,9 +206,11 @@ js_document_get_property_cookie(JSContext *ctx, JSValueConst this_val)
strncpy(cookiestr, cookies->source, 1023); strncpy(cookiestr, cookies->source, 1023);
done_string(cookies); done_string(cookies);
return JS_NewString(ctx, cookiestr); JSValue r = JS_NewString(ctx, cookiestr);
RETURN_JS(r);
} else { } else {
return JS_NewStringLen(ctx, "", 0); JSValue rr = JS_NewStringLen(ctx, "", 0);
RETURN_JS(rr);
} }
} }
@ -269,7 +271,8 @@ js_document_get_property_charset(JSContext *ctx, JSValueConst this_val, JSValue
encoding = "utf-8"; encoding = "utf-8";
} }
return JS_NewStringLen(ctx, encoding.c_str(), encoding.length()); JSValue r = JS_NewStringLen(ctx, encoding.c_str(), encoding.length());
RETURN_JS(r);
} }
static JSValue static JSValue
@ -406,7 +409,7 @@ js_document_get_property_documentURI(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewString(ctx, str); JSValue ret = JS_NewString(ctx, str);
mem_free(str); mem_free(str);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -438,7 +441,7 @@ js_document_get_property_domain(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewString(ctx, str); JSValue ret = JS_NewString(ctx, str);
mem_free(str); mem_free(str);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -613,7 +616,7 @@ js_document_get_property_location(JSContext *ctx, JSValueConst this_val)
#endif #endif
struct ecmascript_interpreter *interpreter = JS_GetContextOpaque(ctx); struct ecmascript_interpreter *interpreter = JS_GetContextOpaque(ctx);
return interpreter->location_obj; RETURN_JS(interpreter->location_obj);
} }
static JSValue static JSValue
@ -698,7 +701,7 @@ js_document_get_property_referrer(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewString(ctx, str); JSValue ret = JS_NewString(ctx, str);
mem_free(str); mem_free(str);
return ret; RETURN_JS(ret);
} else { } else {
return JS_UNDEFINED; return JS_UNDEFINED;
} }
@ -712,7 +715,7 @@ js_document_get_property_referrer(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewString(ctx, str); JSValue ret = JS_NewString(ctx, str);
mem_free(str); mem_free(str);
return ret; RETURN_JS(ret);
} else { } else {
return JS_UNDEFINED; return JS_UNDEFINED;
} }
@ -780,7 +783,8 @@ js_document_get_property_title(JSContext *ctx, JSValueConst this_val)
} }
doc_view = vs->doc_view; doc_view = vs->doc_view;
document = doc_view->document; document = doc_view->document;
return JS_NewString(ctx, document->title); JSValue r = JS_NewString(ctx, document->title);
RETURN_JS(r);
} }
static JSValue static JSValue
@ -848,7 +852,7 @@ js_document_get_property_url(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewString(ctx, str); JSValue ret = JS_NewString(ctx, str);
mem_free(str); mem_free(str);
return ret; RETURN_JS(ret);
} else { } else {
return JS_UNDEFINED; return JS_UNDEFINED;
} }
@ -1554,7 +1558,8 @@ js_doctype_get_property_publicId(JSContext *ctx, JSValueConst this_val)
} }
xmlpp::ustring v = dtd->get_external_id(); xmlpp::ustring v = dtd->get_external_id();
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue r = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(r);
} }
static JSValue static JSValue
@ -1571,7 +1576,8 @@ js_doctype_get_property_systemId(JSContext *ctx, JSValueConst this_val)
} }
xmlpp::ustring v = dtd->get_system_id(); xmlpp::ustring v = dtd->get_system_id();
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue r = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(r);
} }
static const JSCFunctionListEntry js_document_proto_funcs[] = { static const JSCFunctionListEntry js_document_proto_funcs[] = {
@ -1638,7 +1644,7 @@ js_document_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -1664,7 +1670,7 @@ js_document_init(JSContext *ctx, JSValue global_obj)
JS_SetPropertyStr(ctx, global_obj, "document", document_proto); JS_SetPropertyStr(ctx, global_obj, "document", document_proto);
return document_proto; RETURN_JS(document_proto);
} }
static const JSCFunctionListEntry js_doctype_proto_funcs[] = { static const JSCFunctionListEntry js_doctype_proto_funcs[] = {
@ -1706,7 +1712,7 @@ js_doctype_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -1751,7 +1757,8 @@ getDoctype(JSContext *ctx, void *node)
auto node_find = map_doctypes.find(node); auto node_find = map_doctypes.find(node);
if (node_find != map_doctypes.end()) { if (node_find != map_doctypes.end()) {
return JS_DupValue(ctx, node_find->second); JSValue r = JS_DupValue(ctx, node_find->second);
RETURN_JS(r);
} }
JSValue doctype_obj = JS_NewObjectClass(ctx, js_doctype_class_id); JSValue doctype_obj = JS_NewObjectClass(ctx, js_doctype_class_id);
JS_SetPropertyFunctionList(ctx, doctype_obj, js_doctype_proto_funcs, countof(js_doctype_proto_funcs)); JS_SetPropertyFunctionList(ctx, doctype_obj, js_doctype_proto_funcs, countof(js_doctype_proto_funcs));
@ -1760,7 +1767,8 @@ getDoctype(JSContext *ctx, void *node)
map_doctypes[node] = doctype_obj; map_doctypes[node] = doctype_obj;
return JS_DupValue(ctx, doctype_obj); JSValue rr = JS_DupValue(ctx, doctype_obj);
RETURN_JS(rr);
} }
JSValue JSValue
@ -1776,5 +1784,5 @@ getDocument(JSContext *ctx, void *doc)
JS_SetClassProto(ctx, js_document_class_id, document_obj); JS_SetClassProto(ctx, js_document_class_id, document_obj);
JS_SetOpaque(document_obj, doc); JS_SetOpaque(document_obj, doc);
return document_obj; RETURN_JS(document_obj);
} }

View File

@ -21,6 +21,7 @@
#include "document/view.h" #include "document/view.h"
#include "ecmascript/css2xpath.h" #include "ecmascript/css2xpath.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/attr.h" #include "ecmascript/quickjs/attr.h"
#include "ecmascript/quickjs/attributes.h" #include "ecmascript/quickjs/attributes.h"
#include "ecmascript/quickjs/collection.h" #include "ecmascript/quickjs/collection.h"
@ -184,7 +185,8 @@ js_element_get_property_className(JSContext *ctx, JSValueConst this_val)
} }
xmlpp::ustring v = el->get_attribute_value("class"); xmlpp::ustring v = el->get_attribute_value("class");
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue r = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(r);
} }
static JSValue static JSValue
@ -204,7 +206,8 @@ js_element_get_property_dir(JSContext *ctx, JSValueConst this_val)
if (v != "auto" && v != "ltr" && v != "rtl") { if (v != "auto" && v != "ltr" && v != "rtl") {
v = ""; v = "";
} }
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue r = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(r);
} }
static JSValue static JSValue
@ -271,7 +274,8 @@ js_element_get_property_id(JSContext *ctx, JSValueConst this_val)
} }
xmlpp::ustring v = el->get_attribute_value("id"); xmlpp::ustring v = el->get_attribute_value("id");
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue r = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(r);
} }
static JSValue static JSValue
@ -287,7 +291,8 @@ js_element_get_property_lang(JSContext *ctx, JSValueConst this_val)
} }
xmlpp::ustring v = el->get_attribute_value("lang"); xmlpp::ustring v = el->get_attribute_value("lang");
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue r = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(r);
} }
static JSValue static JSValue
@ -381,7 +386,8 @@ js_element_get_property_nodeName(JSContext *ctx, JSValueConst this_val)
xmlpp::ustring v; xmlpp::ustring v;
if (!node) { if (!node) {
return JS_NewStringLen(ctx, "", 0); JSValue r = JS_NewStringLen(ctx, "", 0);
RETURN_JS(r);
} }
auto el = dynamic_cast<const xmlpp::Element*>(node); auto el = dynamic_cast<const xmlpp::Element*>(node);
@ -399,7 +405,8 @@ js_element_get_property_nodeName(JSContext *ctx, JSValueConst this_val)
} }
} }
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue rr = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(rr);
} }
static JSValue static JSValue
@ -449,7 +456,8 @@ js_element_get_property_nodeValue(JSContext *ctx, JSValueConst this_val)
if (el) { if (el) {
xmlpp::ustring v = el->get_value(); xmlpp::ustring v = el->get_value();
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue r = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(r);
} }
auto el2 = dynamic_cast<const xmlpp::TextNode*>(node); auto el2 = dynamic_cast<const xmlpp::TextNode*>(node);
@ -457,7 +465,8 @@ js_element_get_property_nodeValue(JSContext *ctx, JSValueConst this_val)
if (el2) { if (el2) {
xmlpp::ustring v = el2->get_content(); xmlpp::ustring v = el2->get_content();
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue r = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(r);
} }
auto el3 = dynamic_cast<const xmlpp::CommentNode*>(node); auto el3 = dynamic_cast<const xmlpp::CommentNode*>(node);
@ -465,7 +474,8 @@ js_element_get_property_nodeValue(JSContext *ctx, JSValueConst this_val)
if (el3) { if (el3) {
xmlpp::ustring v = el3->get_content(); xmlpp::ustring v = el3->get_content();
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue r = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(r);
} }
return JS_UNDEFINED; return JS_UNDEFINED;
@ -500,7 +510,8 @@ js_element_get_property_ownerDocument(JSContext *ctx, JSValueConst this_val)
#endif #endif
struct ecmascript_interpreter *interpreter = JS_GetContextOpaque(ctx); struct ecmascript_interpreter *interpreter = JS_GetContextOpaque(ctx);
return JS_DupValue(ctx, interpreter->document_obj); JSValue r = JS_DupValue(ctx, interpreter->document_obj);
RETURN_JS(r);
} }
static JSValue static JSValue
@ -607,7 +618,8 @@ js_element_get_property_tagName(JSContext *ctx, JSValueConst this_val)
xmlpp::ustring v = el->get_name(); xmlpp::ustring v = el->get_name();
std::transform(v.begin(), v.end(), v.begin(), ::toupper); std::transform(v.begin(), v.end(), v.begin(), ::toupper);
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue r = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(r);
} }
static JSValue static JSValue
@ -623,7 +635,8 @@ js_element_get_property_title(JSContext *ctx, JSValueConst this_val)
} }
xmlpp::ustring v = el->get_attribute_value("title"); xmlpp::ustring v = el->get_attribute_value("title");
return JS_NewStringLen(ctx, v.c_str(), v.length()); JSValue r = JS_NewStringLen(ctx, v.c_str(), v.length());
RETURN_JS(r);
} }
static int was_el = 0; static int was_el = 0;
@ -728,7 +741,7 @@ js_element_get_property_innerHtml(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewStringLen(ctx, buf.source, buf.length); JSValue ret = JS_NewStringLen(ctx, buf.source, buf.length);
done_string(&buf); done_string(&buf);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -748,7 +761,7 @@ js_element_get_property_outerHtml(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewStringLen(ctx, buf.source, buf.length); JSValue ret = JS_NewStringLen(ctx, buf.source, buf.length);
done_string(&buf); done_string(&buf);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -768,7 +781,7 @@ js_element_get_property_textContent(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewStringLen(ctx, buf.source, buf.length); JSValue ret = JS_NewStringLen(ctx, buf.source, buf.length);
done_string(&buf); done_string(&buf);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -1177,7 +1190,8 @@ js_element_getAttribute(JSContext *ctx, JSValueConst this_val, int argc, JSValue
} }
xmlpp::ustring val = attr->get_value(); xmlpp::ustring val = attr->get_value();
return JS_NewStringLen(ctx, val.c_str(), val.length()); JSValue r = JS_NewStringLen(ctx, val.c_str(), val.length());
RETURN_JS(r);
} }
static JSValue static JSValue
@ -1645,7 +1659,7 @@ js_element_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -1691,7 +1705,8 @@ getElement(JSContext *ctx, void *node)
auto node_find = map_elements.find(node); auto node_find = map_elements.find(node);
if (node_find != map_elements.end()) { if (node_find != map_elements.end()) {
return JS_DupValue(ctx, node_find->second); JSValue r = JS_DupValue(ctx, node_find->second);
RETURN_JS(r);
} }
JSValue element_obj = JS_NewObjectClass(ctx, js_element_class_id); JSValue element_obj = JS_NewObjectClass(ctx, js_element_class_id);
@ -1702,5 +1717,6 @@ getElement(JSContext *ctx, void *node)
map_elements[node] = element_obj; map_elements[node] = element_obj;
return JS_DupValue(ctx, element_obj); JSValue rr = JS_DupValue(ctx, element_obj);
RETURN_JS(rr);
} }

View File

@ -377,7 +377,7 @@ js_form_elements_namedItem(JSContext *ctx, JSValueConst this_val, int argc, JSVa
JSValue ret = js_form_elements_namedItem2(ctx, this_val, str); JSValue ret = js_form_elements_namedItem2(ctx, this_val, str);
JS_FreeCString(ctx, str); JS_FreeCString(ctx, str);
return ret; RETURN_JS(ret);
} }
static struct form_view * static struct form_view *
js_form_get_form_view(JSContext *ctx, JSValueConst this_val, JSValueConst *argv) js_form_get_form_view(JSContext *ctx, JSValueConst this_val, JSValueConst *argv)
@ -413,7 +413,8 @@ js_form_get_property_action(JSContext *ctx, JSValueConst this_val)
form = form_GetOpaque(this_val); form = form_GetOpaque(this_val);
assert(form); assert(form);
return JS_NewString(ctx, form->action); JSValue r = JS_NewString(ctx, form->action);
RETURN_JS(r);
} }
static JSValue static JSValue
@ -508,7 +509,8 @@ getFormElements(JSContext *ctx, struct form_view *fv)
auto node_find = map_form_elements.find(fv); auto node_find = map_form_elements.find(fv);
if (node_find != map_form_elements.end()) { if (node_find != map_form_elements.end()) {
return JS_DupValue(ctx, node_find->second); JSValue r = JS_DupValue(ctx, node_find->second);
RETURN_JS(r);
} }
JSValue form_elements_obj = JS_NewArray(ctx); JSValue form_elements_obj = JS_NewArray(ctx);
@ -518,7 +520,8 @@ getFormElements(JSContext *ctx, struct form_view *fv)
js_form_set_items(ctx, form_elements_obj, fv); js_form_set_items(ctx, form_elements_obj, fv);
map_form_elements[fv] = form_elements_obj; map_form_elements[fv] = form_elements_obj;
return JS_DupValue(ctx, form_elements_obj); JSValue rr = JS_DupValue(ctx, form_elements_obj);
RETURN_JS(rr);
} }
static JSValue static JSValue
@ -562,14 +565,19 @@ js_form_get_property_encoding(JSContext *ctx, JSValueConst this_val)
form = form_GetOpaque(this_val); form = form_GetOpaque(this_val);
assert(form); assert(form);
JSValue r;
switch (form->method) { switch (form->method) {
case FORM_METHOD_GET: case FORM_METHOD_GET:
case FORM_METHOD_POST: case FORM_METHOD_POST:
return JS_NewString(ctx, "application/x-www-form-urlencoded"); r = JS_NewString(ctx, "application/x-www-form-urlencoded");
RETURN_JS(r);
case FORM_METHOD_POST_MP: case FORM_METHOD_POST_MP:
return JS_NewString(ctx, "multipart/form-data"); r = JS_NewString(ctx, "multipart/form-data");
RETURN_JS(r);
case FORM_METHOD_POST_TEXT_PLAIN: case FORM_METHOD_POST_TEXT_PLAIN:
return JS_NewString(ctx, "text/plain"); r = JS_NewString(ctx, "text/plain");
RETURN_JS(r);
} }
return JS_UNDEFINED; return JS_UNDEFINED;
@ -668,14 +676,18 @@ js_form_get_property_method(JSContext *ctx, JSValueConst this_val)
form = form_GetOpaque(this_val); form = form_GetOpaque(this_val);
assert(form); assert(form);
JSValue r;
switch (form->method) { switch (form->method) {
case FORM_METHOD_GET: case FORM_METHOD_GET:
return JS_NewStringLen(ctx, "GET", 3); r = JS_NewStringLen(ctx, "GET", 3);
RETURN_JS(r);
case FORM_METHOD_POST: case FORM_METHOD_POST:
case FORM_METHOD_POST_MP: case FORM_METHOD_POST_MP:
case FORM_METHOD_POST_TEXT_PLAIN: case FORM_METHOD_POST_TEXT_PLAIN:
return JS_NewStringLen(ctx, "POST", 4); r = JS_NewStringLen(ctx, "POST", 4);
RETURN_JS(r);
} }
return JS_UNDEFINED; return JS_UNDEFINED;
@ -747,7 +759,8 @@ js_form_get_property_name(JSContext *ctx, JSValueConst this_val)
form = form_GetOpaque(this_val); form = form_GetOpaque(this_val);
assert(form); assert(form);
return JS_NewString(ctx, form->name); JSValue r = JS_NewString(ctx, form->name);
RETURN_JS(r);
} }
/* @form_class.setProperty */ /* @form_class.setProperty */
@ -811,7 +824,8 @@ js_form_get_property_target(JSContext *ctx, JSValueConst this_val)
form = form_GetOpaque(this_val); form = form_GetOpaque(this_val);
assert(form); assert(form);
return JS_NewString(ctx, form->target); JSValue r = JS_NewString(ctx, form->target);
RETURN_JS(r);
} }
static JSValue static JSValue
@ -926,7 +940,7 @@ js_elements_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -1002,7 +1016,7 @@ js_form_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *ar
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -1040,7 +1054,8 @@ getForm(JSContext *ctx, struct form *form)
auto node_find = map_form.find(form); auto node_find = map_form.find(form);
if (node_find != map_form.end()) { if (node_find != map_form.end()) {
return JS_DupValue(ctx, node_find->second); JSValue r = JS_DupValue(ctx, node_find->second);
RETURN_JS(r);
} }
JSValue form_obj = JS_NewArray(ctx); JSValue form_obj = JS_NewArray(ctx);
@ -1051,5 +1066,6 @@ getForm(JSContext *ctx, struct form *form)
map_form[form] = form_obj; map_form[form] = form_obj;
return JS_DupValue(ctx, form_obj); JSValue rr = JS_DupValue(ctx, form_obj);
RETURN_JS(rr);
} }

View File

@ -217,7 +217,7 @@ js_forms_namedItem(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst
JSValue ret = js_find_form_by_name(ctx, doc_view, str); JSValue ret = js_find_form_by_name(ctx, doc_view, str);
JS_FreeCString(ctx, str); JS_FreeCString(ctx, str);
return ret; RETURN_JS(ret);
} }
#if 0 #if 0
@ -323,7 +323,7 @@ js_forms_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *a
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -361,7 +361,8 @@ getForms(JSContext *ctx, void *node)
auto node_find = map_forms.find(node); auto node_find = map_forms.find(node);
if (node_find != map_forms.end()) { if (node_find != map_forms.end()) {
return JS_DupValue(ctx, node_find->second); JSValue r = JS_DupValue(ctx, node_find->second);
RETURN_JS(r);
} }
JSValue forms_obj = JS_NewArray(ctx); JSValue forms_obj = JS_NewArray(ctx);
JS_SetPropertyFunctionList(ctx, forms_obj, js_forms_proto_funcs, countof(js_forms_proto_funcs)); JS_SetPropertyFunctionList(ctx, forms_obj, js_forms_proto_funcs, countof(js_forms_proto_funcs));
@ -369,5 +370,6 @@ getForms(JSContext *ctx, void *node)
js_forms_set_items(ctx, forms_obj, node); js_forms_set_items(ctx, forms_obj, node);
map_forms[node] = forms_obj; map_forms[node] = forms_obj;
return JS_DupValue(ctx, forms_obj); JSValue rr = JS_DupValue(ctx, forms_obj);
RETURN_JS(rr);
} }

View File

@ -20,6 +20,7 @@
#include "document/forms.h" #include "document/forms.h"
#include "document/view.h" #include "document/view.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/history.h" #include "ecmascript/quickjs/history.h"
#include "ecmascript/quickjs/window.h" #include "ecmascript/quickjs/window.h"
#include "intl/libintl.h" #include "intl/libintl.h"
@ -148,7 +149,7 @@ js_history_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);

View File

@ -11,6 +11,7 @@
#include "elinks.h" #include "elinks.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/document.h" #include "ecmascript/quickjs/document.h"
#include "ecmascript/quickjs/implementation.h" #include "ecmascript/quickjs/implementation.h"
#include "util/conv.h" #include "util/conv.h"
@ -88,7 +89,7 @@ js_implementation_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValu
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -128,5 +129,5 @@ getImplementation(JSContext *ctx)
// JS_SetConstructor(ctx, implementation_class, implementation_obj); // JS_SetConstructor(ctx, implementation_class, implementation_obj);
JS_SetClassProto(ctx, js_implementation_class_id, implementation_obj); JS_SetClassProto(ctx, js_implementation_class_id, implementation_obj);
return implementation_obj; RETURN_JS(implementation_obj);
} }

View File

@ -109,11 +109,13 @@ js_input_get_property_accessKey(JSContext *ctx, JSValueConst this_val)
} }
if (!link->accesskey) { if (!link->accesskey) {
return JS_NewStringLen(ctx, "", 0); JSValue r = JS_NewStringLen(ctx, "", 0);
RETURN_JS(r);
} else { } else {
const char *keystr = encode_utf8(link->accesskey); const char *keystr = encode_utf8(link->accesskey);
if (keystr) { if (keystr) {
return JS_NewString(ctx, keystr); JSValue r = JS_NewString(ctx, keystr);
RETURN_JS(r);
} else { } else {
#ifdef ECMASCRIPT_DEBUG #ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__); fprintf(stderr, "%s:%s %d\n", __FILE__, __FUNCTION__, __LINE__);
@ -226,7 +228,8 @@ js_input_get_property_alt(JSContext *ctx, JSValueConst this_val)
assert(fc); assert(fc);
assert(fc->form && fs); assert(fc->form && fs);
return JS_NewString(ctx, fc->alt); JSValue r = JS_NewString(ctx, fc->alt);
RETURN_JS(r);
} }
static JSValue static JSValue
@ -408,7 +411,8 @@ js_input_get_property_defaultValue(JSContext *ctx, JSValueConst this_val)
assert(fc->form && fs); assert(fc->form && fs);
/* FIXME (bug 805): convert from the charset of the document */ /* FIXME (bug 805): convert from the charset of the document */
return JS_NewString(ctx, fc->default_value); JSValue r = JS_NewString(ctx, fc->default_value);
RETURN_JS(r);
} }
static JSValue static JSValue
@ -631,7 +635,8 @@ js_input_get_property_name(JSContext *ctx, JSValueConst this_val)
assert(fc); assert(fc);
assert(fc->form && fs); assert(fc->form && fs);
return JS_NewString(ctx, fc->name); JSValue r = JS_NewString(ctx, fc->name);
RETURN_JS(r);
} }
/* @input_class.setProperty */ /* @input_class.setProperty */
@ -937,7 +942,8 @@ js_input_get_property_src(JSContext *ctx, JSValueConst this_val)
if (linknum >= 0) link = &document->links[linknum]; if (linknum >= 0) link = &document->links[linknum];
if (link && link->where_img) { if (link && link->where_img) {
return JS_NewString(ctx, link->where_img); JSValue r = JS_NewString(ctx, link->where_img);
RETURN_JS(r);
} else { } else {
return JS_UNDEFINED; return JS_UNDEFINED;
} }
@ -1100,7 +1106,8 @@ js_input_get_property_type(JSContext *ctx, JSValueConst this_val)
default: INTERNAL("input_get_property() upon a non-input item."); break; default: INTERNAL("input_get_property() upon a non-input item."); break;
} }
return JS_NewString(ctx, s); JSValue r = JS_NewString(ctx, s);
RETURN_JS(r);
} }
static JSValue static JSValue
@ -1119,7 +1126,8 @@ js_input_get_property_value(JSContext *ctx, JSValueConst this_val)
return JS_NULL; /* detached */ return JS_NULL; /* detached */
} }
return JS_NewString(ctx, fs->value); JSValue r = JS_NewString(ctx, fs->value);
RETURN_JS(r);
} }
static JSValue static JSValue
@ -1403,7 +1411,7 @@ js_input_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *a
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -1447,7 +1455,8 @@ getInput(JSContext *ctx, struct form_state *fs)
auto node_find = map_inputs.find(fs); auto node_find = map_inputs.find(fs);
if (node_find != map_inputs.end()) { if (node_find != map_inputs.end()) {
return JS_DupValue(ctx, node_find->second); JSValue r = JS_DupValue(ctx, node_find->second);
RETURN_JS(r);
} }
JSValue input_obj = JS_NewObjectClass(ctx, js_input_class_id); JSValue input_obj = JS_NewObjectClass(ctx, js_input_class_id);
@ -1457,5 +1466,6 @@ getInput(JSContext *ctx, struct form_state *fs)
fs->ecmascript_obj = input_obj; fs->ecmascript_obj = input_obj;
map_inputs[fs] = input_obj; map_inputs[fs] = input_obj;
return JS_DupValue(ctx, input_obj); JSValue rr = JS_DupValue(ctx, input_obj);
RETURN_JS(rr);
} }

View File

@ -22,6 +22,7 @@
#include "document/view.h" #include "document/view.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/localstorage-db.h" #include "ecmascript/localstorage-db.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/localstorage.h" #include "ecmascript/quickjs/localstorage.h"
#include "intl/libintl.h" #include "intl/libintl.h"
#include "main/select.h" #include "main/select.h"
@ -76,7 +77,6 @@ readFromStorage(const unsigned char *key)
static void static void
saveToStorage(const unsigned char *key, const unsigned char *val) saveToStorage(const unsigned char *key, const unsigned char *val)
{ {
if (local_storage_ready==0) { if (local_storage_ready==0) {
db_prepare_structure(local_storage_filename); db_prepare_structure(local_storage_filename);
local_storage_ready=1; local_storage_ready=1;
@ -100,8 +100,6 @@ js_localstorage_getitem(JSContext *ctx, JSValueConst this_val, int argc, JSValue
#ifdef ECMASCRIPT_DEBUG #ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__); fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif #endif
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
if (argc != 1) if (argc != 1)
{ {
return JS_UNDEFINED; return JS_UNDEFINED;
@ -116,17 +114,16 @@ js_localstorage_getitem(JSContext *ctx, JSValueConst this_val, int argc, JSValue
return JS_EXCEPTION; return JS_EXCEPTION;
} }
if (key) {
unsigned char *val = readFromStorage(key); unsigned char *val = readFromStorage(key);
JSValue ret = JS_NewString(ctx, val);
mem_free(val);
JS_FreeCString(ctx, key); JS_FreeCString(ctx, key);
return ret;
if (!val) {
return JS_NULL;
} }
return JS_UNDEFINED; JSValue ret = JS_NewString(ctx, val);
mem_free(val);
RETURN_JS(ret);
} }
/* @localstorage_funcs{"setItem"} */ /* @localstorage_funcs{"setItem"} */
@ -197,7 +194,7 @@ js_localstorage_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueC
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -207,20 +204,23 @@ fail:
int int
js_localstorage_init(JSContext *ctx, JSValue global_obj) js_localstorage_init(JSContext *ctx, JSValue global_obj)
{ {
JSValue localstorage_proto, localstorage_class; #ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif
static int initialized;
if (!initialized) {
/* create the localstorage class */ /* create the localstorage class */
JS_NewClassID(&js_localstorage_class_id); JS_NewClassID(&js_localstorage_class_id);
JS_NewClass(JS_GetRuntime(ctx), js_localstorage_class_id, &js_localstorage_class); JS_NewClass(JS_GetRuntime(ctx), js_localstorage_class_id, &js_localstorage_class);
initialized = 1;
}
localstorage_proto = JS_NewObject(ctx); JSValue localstorage_obj = JS_NewObjectClass(ctx, js_localstorage_class_id);
JS_SetPropertyFunctionList(ctx, localstorage_proto, js_localstorage_proto_funcs, countof(js_localstorage_proto_funcs)); JS_SetPropertyFunctionList(ctx, localstorage_obj, js_localstorage_proto_funcs, countof(js_localstorage_proto_funcs));
JS_SetClassProto(ctx, js_localstorage_class_id, localstorage_obj);
localstorage_class = JS_NewCFunction2(ctx, js_localstorage_ctor, "localStorage", 0, JS_CFUNC_constructor, 0); JS_SetPropertyStr(ctx, global_obj, "localStorage", localstorage_obj);
/* set proto.constructor and ctor.prototype */
JS_SetConstructor(ctx, localstorage_class, localstorage_proto);
JS_SetClassProto(ctx, js_localstorage_class_id, localstorage_proto);
JS_SetPropertyStr(ctx, global_obj, "localStorage", localstorage_proto);
return 0; return 0;
} }

View File

@ -20,6 +20,7 @@
#include "document/forms.h" #include "document/forms.h"
#include "document/view.h" #include "document/view.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/location.h" #include "ecmascript/quickjs/location.h"
#include "ecmascript/quickjs/window.h" #include "ecmascript/quickjs/window.h"
#include "intl/libintl.h" #include "intl/libintl.h"
@ -72,7 +73,7 @@ js_location_get_property_hash(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewStringLen(ctx, fragment.source, fragment.length); JSValue ret = JS_NewStringLen(ctx, fragment.source, fragment.length);
done_string(&fragment); done_string(&fragment);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -103,7 +104,7 @@ js_location_get_property_host(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewString(ctx, str); JSValue ret = JS_NewString(ctx, str);
mem_free(str); mem_free(str);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -134,7 +135,7 @@ js_location_get_property_hostname(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewString(ctx, str); JSValue ret = JS_NewString(ctx, str);
mem_free(str); mem_free(str);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -165,7 +166,7 @@ js_location_get_property_href(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewString(ctx, str); JSValue ret = JS_NewString(ctx, str);
mem_free(str); mem_free(str);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -196,7 +197,7 @@ js_location_get_property_origin(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewString(ctx, str); JSValue ret = JS_NewString(ctx, str);
mem_free(str); mem_free(str);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -226,7 +227,7 @@ js_location_get_property_pathname(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewStringLen(ctx, pathname.source, pathname.length); JSValue ret = JS_NewStringLen(ctx, pathname.source, pathname.length);
done_string(&pathname); done_string(&pathname);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -254,7 +255,7 @@ js_location_get_property_port(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewStringLen(ctx, port.source, port.length); JSValue ret = JS_NewStringLen(ctx, port.source, port.length);
done_string(&port); done_string(&port);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -287,7 +288,7 @@ js_location_get_property_protocol(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewStringLen(ctx, proto.source, proto.length); JSValue ret = JS_NewStringLen(ctx, proto.source, proto.length);
done_string(&proto); done_string(&proto);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -318,7 +319,7 @@ js_location_get_property_search(JSContext *ctx, JSValueConst this_val)
JSValue ret = JS_NewStringLen(ctx, search.source, search.length); JSValue ret = JS_NewStringLen(ctx, search.source, search.length);
done_string(&search); done_string(&search);
return ret; RETURN_JS(ret);
} }
static JSValue static JSValue
@ -613,7 +614,7 @@ js_location_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -638,5 +639,5 @@ js_location_init(JSContext *ctx, JSValue global_obj)
JS_SetClassProto(ctx, js_location_class_id, location_proto); JS_SetClassProto(ctx, js_location_class_id, location_proto);
JS_SetPropertyStr(ctx, global_obj, "location", location_proto); JS_SetPropertyStr(ctx, global_obj, "location", location_proto);
return location_proto; RETURN_JS(location_proto);
} }

View File

@ -20,6 +20,7 @@
#include "document/forms.h" #include "document/forms.h"
#include "document/view.h" #include "document/view.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/navigator.h" #include "ecmascript/quickjs/navigator.h"
#include "intl/libintl.h" #include "intl/libintl.h"
#include "main/select.h" #include "main/select.h"
@ -53,7 +54,8 @@ js_navigator_get_property_appCodeName(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG #ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__); fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif #endif
return JS_NewString(ctx, "Mozilla"); /* More like a constant nowadays. */ JSValue r = JS_NewString(ctx, "Mozilla"); /* More like a constant nowadays. */
RETURN_JS(r);
} }
static JSValue static JSValue
@ -62,7 +64,8 @@ js_navigator_get_property_appName(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG #ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__); fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif #endif
return JS_NewString(ctx, "ELinks (roughly compatible with Netscape Navigator, Mozilla and Microsoft Internet Explorer)"); JSValue r = JS_NewString(ctx, "ELinks (roughly compatible with Netscape Navigator, Mozilla and Microsoft Internet Explorer)");
RETURN_JS(r);
} }
static JSValue static JSValue
@ -71,7 +74,8 @@ js_navigator_get_property_appVersion(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG #ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__); fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif #endif
return JS_NewString(ctx, VERSION); JSValue r = JS_NewString(ctx, VERSION);
RETURN_JS(r);
} }
static JSValue static JSValue
@ -82,7 +86,8 @@ js_navigator_get_property_language(JSContext *ctx, JSValueConst this_val)
#endif #endif
#ifdef CONFIG_NLS #ifdef CONFIG_NLS
if (get_opt_bool("protocol.http.accept_ui_language", NULL)) { if (get_opt_bool("protocol.http.accept_ui_language", NULL)) {
return JS_NewString(ctx, language_to_iso639(current_language)); JSValue r = JS_NewString(ctx, language_to_iso639(current_language));
RETURN_JS(r);
} }
#endif #endif
return JS_UNDEFINED; return JS_UNDEFINED;
@ -94,7 +99,8 @@ js_navigator_get_property_platform(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG #ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__); fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif #endif
return JS_NewString(ctx, system_name); JSValue r = JS_NewString(ctx, system_name);
RETURN_JS(r);
} }
static JSValue static JSValue
@ -127,10 +133,12 @@ js_navigator_get_property_userAgent(JSContext *ctx, JSValueConst this_val)
safe_strncpy(custr, ustr, 256); safe_strncpy(custr, ustr, 256);
mem_free(ustr); mem_free(ustr);
return JS_NewString(ctx, custr); JSValue r = JS_NewString(ctx, custr);
RETURN_JS(r);
} }
} }
return JS_NewString(ctx, system_name); JSValue rr = JS_NewString(ctx, system_name);
RETURN_JS(rr);
} }
static const JSCFunctionListEntry js_navigator_proto_funcs[] = { static const JSCFunctionListEntry js_navigator_proto_funcs[] = {
@ -164,7 +172,7 @@ js_navigator_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueCons
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);

View File

@ -20,6 +20,7 @@
#include "document/forms.h" #include "document/forms.h"
#include "document/view.h" #include "document/view.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/element.h" #include "ecmascript/quickjs/element.h"
#include "ecmascript/quickjs/nodelist.h" #include "ecmascript/quickjs/nodelist.h"
#include "ecmascript/quickjs/window.h" #include "ecmascript/quickjs/window.h"
@ -171,7 +172,7 @@ js_nodeList_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -214,6 +215,5 @@ getNodeList(JSContext *ctx, void *node)
JS_SetOpaque(nodeList_obj, node); JS_SetOpaque(nodeList_obj, node);
js_nodeList_set_items(ctx, nodeList_obj, node); js_nodeList_set_items(ctx, nodeList_obj, node);
return nodeList_obj; RETURN_JS(nodeList_obj);
} }

View File

@ -20,6 +20,7 @@
#include "document/forms.h" #include "document/forms.h"
#include "document/view.h" #include "document/view.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/screen.h" #include "ecmascript/quickjs/screen.h"
#include "ecmascript/quickjs/window.h" #include "ecmascript/quickjs/window.h"
#include "intl/libintl.h" #include "intl/libintl.h"
@ -161,7 +162,8 @@ js_screen_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj;
RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);

View File

@ -20,6 +20,7 @@
#include "document/forms.h" #include "document/forms.h"
#include "document/view.h" #include "document/view.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/unibar.h" #include "ecmascript/quickjs/unibar.h"
#include "ecmascript/quickjs/window.h" #include "ecmascript/quickjs/window.h"
#include "intl/libintl.h" #include "intl/libintl.h"
@ -143,7 +144,7 @@ js_menubar_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);
@ -168,7 +169,7 @@ js_statusbar_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueCons
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);

View File

@ -20,6 +20,7 @@
#include "document/forms.h" #include "document/forms.h"
#include "document/view.h" #include "document/view.h"
#include "ecmascript/ecmascript.h" #include "ecmascript/ecmascript.h"
#include "ecmascript/quickjs.h"
#include "ecmascript/quickjs/window.h" #include "ecmascript/quickjs/window.h"
#include "intl/libintl.h" #include "intl/libintl.h"
#include "main/select.h" #include "main/select.h"
@ -254,7 +255,8 @@ js_window_get_property_self(JSContext *ctx, JSValueConst this_val)
#ifdef ECMASCRIPT_DEBUG #ifdef ECMASCRIPT_DEBUG
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__); fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
#endif #endif
return JS_DupValue(ctx, this_val); JSValue r = JS_DupValue(ctx, this_val);
RETURN_JS(r);
} }
static JSValue static JSValue
@ -405,7 +407,7 @@ js_window_ctor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *
if (JS_IsException(obj)) { if (JS_IsException(obj)) {
goto fail; goto fail;
} }
return obj; RETURN_JS(obj);
fail: fail:
JS_FreeValue(ctx, obj); JS_FreeValue(ctx, obj);