[gjs: 4/6] js: Remove context from GjsAutoJSChar
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs: 4/6] js: Remove context from GjsAutoJSChar
- Date: Sat, 27 Jan 2018 22:21:08 +0000 (UTC)
commit 9355181392d0290cdaa8944a9dbbc4b6e1ca3b77
Author: Philip Chimento <philip chimento gmail com>
Date: Sun Jan 21 16:08:58 2018 -0800
js: Remove context from GjsAutoJSChar
SpiderMonkey now clarifies in the comments in their header file, that
it's OK to pass a null JSContext to JS_free(cx, ptr). This allows us to
stop tracking the JSContext in GjsAutoJSChar, which was a big pain.
gi/arg.cpp | 13 ++++++------
gi/boxed.cpp | 4 ++--
gi/fundamental.cpp | 2 +-
gi/gerror.cpp | 6 +++---
gi/interface.cpp | 2 +-
gi/ns.cpp | 2 +-
gi/object.cpp | 22 ++++++++++-----------
gi/param.cpp | 2 +-
gi/repo.cpp | 6 +++---
gi/union.cpp | 2 +-
gi/value.cpp | 2 +-
gjs/byteArray.cpp | 10 +++++-----
gjs/engine.cpp | 8 ++++----
gjs/global.cpp | 4 ++--
gjs/importer.cpp | 12 ++++++------
gjs/jsapi-util-args.h | 2 +-
gjs/jsapi-util-error.cpp | 4 ++--
gjs/jsapi-util-string.cpp | 8 ++++----
gjs/jsapi-util.cpp | 20 +++++++++----------
gjs/jsapi-util.h | 48 ++++++++-------------------------------------
gjs/module.cpp | 2 +-
modules/cairo-context.cpp | 4 ++--
modules/console.cpp | 2 +-
test/gjs-test-call-args.cpp | 26 ++++++++++--------------
test/gjs-tests.cpp | 6 +++---
25 files changed, 90 insertions(+), 129 deletions(-)
---
diff --git a/gi/arg.cpp b/gi/arg.cpp
index adcfb53..cec0e9a 100644
--- a/gi/arg.cpp
+++ b/gi/arg.cpp
@@ -434,7 +434,7 @@ value_to_ghashtable_key(JSContext *cx,
else
str = value.toString();
- GjsAutoJSChar cstr(cx, JS_EncodeStringToUTF8(cx, str));
+ GjsAutoJSChar cstr = JS_EncodeStringToUTF8(cx, str);
if (!cstr)
return false;
*pointer_out = cstr.copy();
@@ -620,8 +620,6 @@ gjs_array_to_strv(JSContext *context,
result = g_new0(char *, length+1);
for (i = 0; i < length; ++i) {
- GjsAutoJSChar tmp_result(context);
-
elem = JS::UndefinedValue();
if (!JS_GetElement(context, array, i, &elem)) {
g_free(result);
@@ -631,6 +629,7 @@ gjs_array_to_strv(JSContext *context,
return false;
}
+ GjsAutoJSChar tmp_result;
if (!gjs_string_to_utf8(context, elem, &tmp_result)) {
g_strfreev(result);
return false;
@@ -656,7 +655,7 @@ gjs_string_to_intarray(JSContext *context,
element_type = g_type_info_get_tag(param_info);
if (element_type == GI_TYPE_TAG_INT8 || element_type == GI_TYPE_TAG_UINT8) {
- GjsAutoJSChar result(context, JS_EncodeStringToUTF8(context, str));
+ GjsAutoJSChar result = JS_EncodeStringToUTF8(context, str);
if (!result)
return false;
*length = strlen(result);
@@ -1518,7 +1517,7 @@ gjs_value_to_g_argument(JSContext *context,
arg->v_pointer = NULL;
} else if (value.isString()) {
JS::RootedString str(context, value.toString());
- GjsAutoJSChar utf8_str(context, JS_EncodeStringToUTF8(context, str));
+ GjsAutoJSChar utf8_str = JS_EncodeStringToUTF8(context, str);
if (utf8_str)
arg->v_pointer = utf8_str.copy();
else
@@ -1620,7 +1619,7 @@ gjs_value_to_g_argument(JSContext *context,
intern_gdk_atom("NONE", arg);
} else {
JS::RootedString str(context, value.toString());
- GjsAutoJSChar atom_name(context, JS_EncodeStringToUTF8(context, str));
+ GjsAutoJSChar atom_name = JS_EncodeStringToUTF8(context, str);
if (!atom_name) {
wrong = true;
@@ -2612,7 +2611,7 @@ gjs_object_from_g_hash (JSContext *context,
if (!keystr)
return false;
- GjsAutoJSChar keyutf8(context, JS_EncodeStringToUTF8(context, keystr));
+ GjsAutoJSChar keyutf8 = JS_EncodeStringToUTF8(context, keystr);
if (!keyutf8)
return false;
diff --git a/gi/boxed.cpp b/gi/boxed.cpp
index a52972c..231bd0f 100644
--- a/gi/boxed.cpp
+++ b/gi/boxed.cpp
@@ -119,7 +119,7 @@ boxed_resolve(JSContext *context,
bool *resolved)
{
Boxed *priv;
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
if (!gjs_get_string_id(context, id, &name)) {
*resolved = false;
@@ -275,7 +275,7 @@ boxed_init_from_props(JSContext *context,
JS::RootedId prop_id(context);
for (ix = 0, length = ids.length(); ix < length; ix++) {
GIFieldInfo *field_info;
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
if (!gjs_get_string_id(context, ids[ix], &name))
return false;
diff --git a/gi/fundamental.cpp b/gi/fundamental.cpp
index 9379330..282394b 100644
--- a/gi/fundamental.cpp
+++ b/gi/fundamental.cpp
@@ -301,7 +301,7 @@ fundamental_instance_resolve(JSContext *context,
bool *resolved)
{
FundamentalInstance *priv;
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
if (!gjs_get_string_id(context, id, &name)) {
*resolved = false;
diff --git a/gi/gerror.cpp b/gi/gerror.cpp
index 686cdda..3ceb192 100644
--- a/gi/gerror.cpp
+++ b/gi/gerror.cpp
@@ -97,7 +97,7 @@ GJS_NATIVE_CONSTRUCTOR_DECLARE(error)
priv->domain = proto_priv->domain;
JS::RootedObject params_obj(context, &argv[0].toObject());
- GjsAutoJSChar message(context);
+ GjsAutoJSChar message;
if (!gjs_object_require_property(context, params_obj,
"GError constructor",
GJS_STRING_MESSAGE, &message))
@@ -571,7 +571,7 @@ gjs_gerror_make_from_error(JSContext *cx,
if (!gjs_object_get_property(cx, obj, GJS_STRING_NAME, &v_name))
return nullptr;
- GjsAutoJSChar name(cx);
+ GjsAutoJSChar name;
if (!gjs_string_to_utf8(cx, v_name, &name))
return nullptr;
@@ -579,7 +579,7 @@ gjs_gerror_make_from_error(JSContext *cx,
if (!gjs_object_get_property(cx, obj, GJS_STRING_MESSAGE, &v_message))
return nullptr;
- GjsAutoJSChar message(cx);
+ GjsAutoJSChar message;
if (!gjs_string_to_utf8(cx, v_message, &message))
return nullptr;
diff --git a/gi/interface.cpp b/gi/interface.cpp
index 44ef12b..6394f95 100644
--- a/gi/interface.cpp
+++ b/gi/interface.cpp
@@ -113,7 +113,7 @@ interface_resolve(JSContext *context,
bool *resolved)
{
Interface *priv;
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
GIFunctionInfo *method_info;
if (!gjs_get_string_id(context, id, &name)) {
diff --git a/gi/ns.cpp b/gi/ns.cpp
index edf2b42..99ee4ee 100644
--- a/gi/ns.cpp
+++ b/gi/ns.cpp
@@ -69,7 +69,7 @@ ns_resolve(JSContext *context,
return true;
}
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
if (!gjs_get_string_id(context, id, &name)) {
*resolved = false;
return true; /* not resolved, but no error */
diff --git a/gi/object.cpp b/gi/object.cpp
index 0b24cc4..18f9cbe 100644
--- a/gi/object.cpp
+++ b/gi/object.cpp
@@ -372,7 +372,7 @@ object_instance_get_prop(JSContext *context,
JS::MutableHandleValue value_p)
{
ObjectInstance *priv;
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
if (!gjs_get_string_id(context, id, &name))
return true; /* not resolved, but no error */
@@ -492,7 +492,7 @@ object_instance_set_prop(JSContext *context,
JS::ObjectOpResult& result)
{
ObjectInstance *priv;
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
bool ret = true;
bool g_param_was_set = false;
@@ -718,7 +718,7 @@ object_instance_resolve(JSContext *context,
{
GIFunctionInfo *method_info;
ObjectInstance *priv;
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
if (!gjs_get_string_id(context, id, &name)) {
*resolved = false;
@@ -910,7 +910,7 @@ object_instance_props_to_g_parameters(JSContext *context,
}
for (ix = 0, length = ids.length(); ix < length; ix++) {
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
GParameter gparam = { NULL, { 0, }};
/* ids[ix] is reachable because props is rooted, but require_property
@@ -1682,7 +1682,7 @@ real_connect_func(JSContext *context,
}
JS::RootedString signal_str(context, argv[0].toString());
- GjsAutoJSChar signal_name(context, JS_EncodeStringToUTF8(context, signal_str));
+ GjsAutoJSChar signal_name = JS_EncodeStringToUTF8(context, signal_str);
if (!signal_name)
return false;
@@ -1775,7 +1775,7 @@ emit_func(JSContext *context,
}
JS::RootedString signal_str(context, argv[0].toString());
- GjsAutoJSChar signal_name(context, JS_EncodeStringToUTF8(context, signal_str));
+ GjsAutoJSChar signal_name = JS_EncodeStringToUTF8(context, signal_str);
if (!signal_name)
return false;
@@ -2300,7 +2300,7 @@ gjs_hook_up_vfunc(JSContext *cx,
JS::Value *vp)
{
JS::CallArgs argv = JS::CallArgsFromVp (argc, vp);
- GjsAutoJSChar name(cx);
+ GjsAutoJSChar name;
JS::RootedObject object(cx), function(cx);
ObjectInstance *priv;
GType gtype, info_gtype;
@@ -2534,7 +2534,7 @@ gjs_override_property(JSContext *cx,
JS::Value *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
- GjsAutoJSChar name(cx);
+ GjsAutoJSChar name;
JS::RootedObject type(cx);
GParamSpec *pspec;
GParamSpec *new_pspec;
@@ -2781,7 +2781,7 @@ gjs_register_interface(JSContext *cx,
JS::Value *vp)
{
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
- GjsAutoJSChar name(cx);
+ GjsAutoJSChar name;
guint32 i, n_interfaces, n_properties;
GType *iface_types;
GType interface_type;
@@ -2876,7 +2876,7 @@ gjs_register_type(JSContext *cx,
JS::Value *vp)
{
JS::CallArgs argv = JS::CallArgsFromVp (argc, vp);
- GjsAutoJSChar name(cx);
+ GjsAutoJSChar name;
GType instance_type, parent_type;
GTypeQuery query;
ObjectInstance *parent_priv;
@@ -2977,7 +2977,7 @@ gjs_signal_new(JSContext *cx,
{
JS::CallArgs argv = JS::CallArgsFromVp (argc, vp);
GType gtype;
- GjsAutoJSChar signal_name(cx);
+ GjsAutoJSChar signal_name;
GSignalAccumulator accumulator;
gint signal_id;
guint i, n_parameters;
diff --git a/gi/param.cpp b/gi/param.cpp
index 51fea89..8f3f31e 100644
--- a/gi/param.cpp
+++ b/gi/param.cpp
@@ -58,7 +58,7 @@ param_resolve(JSContext *context,
GIObjectInfo *info = NULL;
GIFunctionInfo *method_info;
Param *priv;
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
bool ret = false;
if (!gjs_get_string_id(context, id, &name)) {
diff --git a/gi/repo.cpp b/gi/repo.cpp
index f89e7e2..4714f62 100644
--- a/gi/repo.cpp
+++ b/gi/repo.cpp
@@ -91,7 +91,7 @@ resolve_namespace_object(JSContext *context,
JSAutoRequest ar(context);
- GjsAutoJSChar version(context);
+ GjsAutoJSChar version;
if (!get_version_for_ns(context, repo_obj, ns_id, &version))
return false;
@@ -113,7 +113,7 @@ resolve_namespace_object(JSContext *context,
if (error != NULL) {
gjs_throw(context,
"Requiring %s, version %s: %s",
- ns_name, version?version:"none", error->message);
+ ns_name, version ? version.get() : "none", error->message);
g_error_free(error);
return false;
@@ -175,7 +175,7 @@ repo_resolve(JSContext *context,
return true;
}
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
if (!gjs_get_string_id(context, id, &name)) {
*resolved = false;
return true;
diff --git a/gi/union.cpp b/gi/union.cpp
index 0168914..9896cc2 100644
--- a/gi/union.cpp
+++ b/gi/union.cpp
@@ -61,7 +61,7 @@ union_resolve(JSContext *context,
bool *resolved)
{
Union *priv;
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
if (!gjs_get_string_id(context, id, &name)) {
*resolved = false;
diff --git a/gi/value.cpp b/gi/value.cpp
index 09972fc..b264cc7 100644
--- a/gi/value.cpp
+++ b/gi/value.cpp
@@ -380,7 +380,7 @@ gjs_value_to_g_value_internal(JSContext *context,
g_value_set_string(gvalue, NULL);
} else if (value.isString()) {
JS::RootedString str(context, value.toString());
- GjsAutoJSChar utf8_string(context, JS_EncodeStringToUTF8(context, str));
+ GjsAutoJSChar utf8_string = JS_EncodeStringToUTF8(context, str);
if (!utf8_string)
return false;
diff --git a/gjs/byteArray.cpp b/gjs/byteArray.cpp
index 8dc0cd6..930850f 100644
--- a/gjs/byteArray.cpp
+++ b/gjs/byteArray.cpp
@@ -408,7 +408,7 @@ to_string_func(JSContext *context,
JS::Value *vp)
{
GJS_GET_PRIV(context, argc, vp, argv, to, ByteArrayInstance, priv);
- GjsAutoJSChar encoding(context);
+ GjsAutoJSChar encoding;
bool encoding_is_utf8;
gchar *data;
@@ -419,7 +419,7 @@ to_string_func(JSContext *context,
if (argc >= 1 && argv[0].isString()) {
JS::RootedString str(context, argv[0].toString());
- encoding.reset(context, JS_EncodeStringToUTF8(context, str));
+ encoding = JS_EncodeStringToUTF8(context, str);
if (!encoding)
return false;
@@ -531,7 +531,7 @@ from_string_func(JSContext *context,
{
JS::CallArgs argv = JS::CallArgsFromVp (argc, vp);
ByteArrayInstance *priv;
- GjsAutoJSChar encoding(context);
+ GjsAutoJSChar encoding;
bool encoding_is_utf8;
JS::RootedObject obj(context, byte_array_new(context));
@@ -553,7 +553,7 @@ from_string_func(JSContext *context,
if (argc > 1 && argv[1].isString()) {
JS::RootedString str(context, argv[1].toString());
- encoding.reset(context, JS_EncodeStringToUTF8(context, str));
+ encoding = JS_EncodeStringToUTF8(context, str);
if (!encoding)
return false;
@@ -571,7 +571,7 @@ from_string_func(JSContext *context,
* libmozjs hardwired utf16-to-utf8.
*/
JS::RootedString str(context, argv[0].toString());
- GjsAutoJSChar utf8(context, JS_EncodeStringToUTF8(context, str));
+ GjsAutoJSChar utf8 = JS_EncodeStringToUTF8(context, str);
if (!utf8)
return false;
diff --git a/gjs/engine.cpp b/gjs/engine.cpp
index 92a1558..67911ee 100644
--- a/gjs/engine.cpp
+++ b/gjs/engine.cpp
@@ -48,7 +48,7 @@ gjs_locale_to_upper_case (JSContext *context,
JS::HandleString src,
JS::MutableHandleValue retval)
{
- GjsAutoJSChar utf8(context, JS_EncodeStringToUTF8(context, src));
+ GjsAutoJSChar utf8 = JS_EncodeStringToUTF8(context, src);
if (!utf8)
return false;
@@ -61,7 +61,7 @@ gjs_locale_to_lower_case (JSContext *context,
JS::HandleString src,
JS::MutableHandleValue retval)
{
- GjsAutoJSChar utf8(context, JS_EncodeStringToUTF8(context, src));
+ GjsAutoJSChar utf8 = JS_EncodeStringToUTF8(context, src);
if (!utf8)
return false;
@@ -75,11 +75,11 @@ gjs_locale_compare (JSContext *context,
JS::HandleString src_2,
JS::MutableHandleValue retval)
{
- GjsAutoJSChar utf8_1(context, JS_EncodeStringToUTF8(context, src_1));
+ GjsAutoJSChar utf8_1 = JS_EncodeStringToUTF8(context, src_1);
if (!utf8_1)
return false;
- GjsAutoJSChar utf8_2(context, JS_EncodeStringToUTF8(context, src_2));
+ GjsAutoJSChar utf8_2 = JS_EncodeStringToUTF8(context, src_2);
if (!utf8_2)
return false;
diff --git a/gjs/global.cpp b/gjs/global.cpp
index f36e4d1..e6d25b2 100644
--- a/gjs/global.cpp
+++ b/gjs/global.cpp
@@ -90,7 +90,7 @@ gjs_log(JSContext *cx,
return true;
}
- GjsAutoJSChar s(cx, JS_EncodeStringToUTF8(cx, jstr));
+ GjsAutoJSChar s = JS_EncodeStringToUTF8(cx, jstr);
if (!s)
return false;
@@ -149,7 +149,7 @@ gjs_print_parse_args(JSContext *cx,
exc_state.restore();
if (jstr) {
- GjsAutoJSChar s(cx, JS_EncodeStringToUTF8(cx, jstr));
+ GjsAutoJSChar s = JS_EncodeStringToUTF8(cx, jstr);
if (!s) {
g_string_free(str, true);
return false;
diff --git a/gjs/importer.cpp b/gjs/importer.cpp
index 7060007..70f214a 100644
--- a/gjs/importer.cpp
+++ b/gjs/importer.cpp
@@ -79,12 +79,12 @@ importer_to_string(JSContext *cx,
&module_path))
return false;
- GjsAutoJSChar path(cx);
GjsAutoChar output;
if (module_path.isNull()) {
output = g_strdup_printf("[%s root]", klass->name);
} else {
+ GjsAutoJSChar path;
if (!gjs_string_to_utf8(cx, module_path, &path))
return false;
output = g_strdup_printf("[%s %s]", klass->name, path.get());
@@ -145,7 +145,7 @@ define_meta_properties(JSContext *context,
if (parent_module_path.isNull()) {
module_path_buf = g_strdup(module_name);
} else {
- GjsAutoJSChar parent_path(context);
+ GjsAutoJSChar parent_path;
if (!gjs_string_to_utf8(context, parent_module_path, &parent_path))
return false;
module_path_buf = g_strdup_printf("%s.%s", parent_path.get(), module_name);
@@ -502,7 +502,7 @@ do_import(JSContext *context,
}
for (i = 0; i < search_path_len; ++i) {
- GjsAutoJSChar dirname(context);
+ GjsAutoJSChar dirname;
elem.setUndefined();
if (!JS_GetElement(context, search_path, i, &elem)) {
@@ -521,7 +521,7 @@ do_import(JSContext *context,
}
str = elem.toString();
- dirname.reset(context, JS_EncodeStringToUTF8(context, str));
+ dirname = JS_EncodeStringToUTF8(context, str);
if (!dirname)
goto out;
@@ -697,7 +697,7 @@ importer_enumerate(JSContext *context,
}
str = elem.toString();
- GjsAutoJSChar dirname(context, JS_EncodeStringToUTF8(context, str));
+ GjsAutoJSChar dirname = JS_EncodeStringToUTF8(context, str);
if (!dirname)
return false;
@@ -777,7 +777,7 @@ importer_resolve(JSContext *context,
return true;
}
- GjsAutoJSChar name(context);
+ GjsAutoJSChar name;
if (!gjs_get_string_id(context, id, &name)) {
*resolved = false;
return true;
diff --git a/gjs/jsapi-util-args.h b/gjs/jsapi-util-args.h
index 76003d7..e723919 100644
--- a/gjs/jsapi-util-args.h
+++ b/gjs/jsapi-util-args.h
@@ -96,7 +96,7 @@ assign(JSContext *cx,
if (c != 's')
throw g_strdup_printf("Wrong type for %c, got GjsAutoJSChar*", c);
if (nullable && value.isNull()) {
- ref->reset(cx, nullptr);
+ ref->reset();
return;
}
if (!gjs_string_to_utf8(cx, value, ref))
diff --git a/gjs/jsapi-util-error.cpp b/gjs/jsapi-util-error.cpp
index 132e1e4..f4f6714 100644
--- a/gjs/jsapi-util-error.cpp
+++ b/gjs/jsapi-util-error.cpp
@@ -222,9 +222,9 @@ gjs_format_stack_trace(JSContext *cx,
JS::AutoSaveExceptionState saved_exc(cx);
JS::RootedString stack_trace(cx);
- GjsAutoJSChar stack_utf8(cx);
+ GjsAutoJSChar stack_utf8;
if (JS::BuildStackString(cx, saved_frame, &stack_trace, 2))
- stack_utf8.reset(cx, JS_EncodeStringToUTF8(cx, stack_trace));
+ stack_utf8 = JS_EncodeStringToUTF8(cx, stack_trace);
saved_exc.restore();
diff --git a/gjs/jsapi-util-string.cpp b/gjs/jsapi-util-string.cpp
index e13e0d3..db43b4d 100644
--- a/gjs/jsapi-util-string.cpp
+++ b/gjs/jsapi-util-string.cpp
@@ -55,7 +55,7 @@ gjs_string_to_utf8(JSContext *cx,
}
JS::RootedString str(cx, value.toString());
- utf8_string_p->reset(cx, JS_EncodeStringToUTF8(cx, str));
+ utf8_string_p->reset(JS_EncodeStringToUTF8(cx, str));
return !!*utf8_string_p;
}
@@ -97,7 +97,7 @@ gjs_string_to_filename(JSContext *context,
GjsAutoChar *filename_string)
{
GError *error;
- GjsAutoJSChar tmp(context);
+ GjsAutoJSChar tmp;
/* gjs_string_to_filename verifies that filename_val is a string */
@@ -324,7 +324,7 @@ gjs_get_string_id (JSContext *context,
if (id_val.isString()) {
JS::RootedString str(context, id_val.toString());
- name_p->reset(context, JS_EncodeStringToUTF8(context, str));
+ name_p->reset(JS_EncodeStringToUTF8(context, str));
return !!name_p;
} else {
return false;
@@ -348,7 +348,7 @@ gjs_unichar_from_string (JSContext *context,
JS::Value value,
gunichar *result)
{
- GjsAutoJSChar utf8_str(context);
+ GjsAutoJSChar utf8_str;
if (gjs_string_to_utf8(context, value, &utf8_str)) {
*result = g_utf8_get_char(utf8_str);
return true;
diff --git a/gjs/jsapi-util.cpp b/gjs/jsapi-util.cpp
index 816715b..322a41b 100644
--- a/gjs/jsapi-util.cpp
+++ b/gjs/jsapi-util.cpp
@@ -138,7 +138,7 @@ throw_property_lookup_error(JSContext *cx,
/* remember gjs_throw() is a no-op if JS_GetProperty()
* already set an exception
*/
- GjsAutoJSChar name(cx);
+ GjsAutoJSChar name;
gjs_get_string_id(cx, property_name, &name);
if (description)
@@ -363,7 +363,7 @@ gjs_string_readable(JSContext *context,
g_string_append_c(buf, '"');
- GjsAutoJSChar chars(context, JS_EncodeStringToUTF8(context, string));
+ GjsAutoJSChar chars = JS_EncodeStringToUTF8(context, string);
if (!chars) {
/* I'm not sure this code will actually ever be reached except in the
* case of OOM, since JS_EncodeStringToUTF8() seems to happily output
@@ -494,7 +494,7 @@ utf8_exception_from_non_gerror_value(JSContext *cx,
if (!exc_str)
return nullptr;
- GjsAutoJSChar utf8_exception(cx, JS_EncodeStringToUTF8(cx, exc_str));
+ GjsAutoJSChar utf8_exception = JS_EncodeStringToUTF8(cx, exc_str);
return utf8_exception.copy();
}
@@ -504,7 +504,6 @@ gjs_log_exception_full(JSContext *context,
JS::HandleString message)
{
char *utf8_exception;
- GjsAutoJSChar utf8_message(context);
bool is_syntax;
JS_BeginRequest(context);
@@ -530,8 +529,9 @@ gjs_log_exception_full(JSContext *context,
}
}
+ GjsAutoJSChar utf8_message;
if (message)
- utf8_message.reset(context, JS_EncodeStringToUTF8(context, message));
+ utf8_message = JS_EncodeStringToUTF8(context, message);
/* We log syntax errors differently, because the stack for those includes
only the referencing module, but we want to print out the filename and
@@ -541,19 +541,19 @@ gjs_log_exception_full(JSContext *context,
if (is_syntax) {
JS::RootedValue js_lineNumber(context), js_fileName(context);
unsigned lineNumber;
- GjsAutoJSChar utf8_filename(context);
gjs_object_get_property(context, exc_obj, GJS_STRING_LINE_NUMBER,
&js_lineNumber);
gjs_object_get_property(context, exc_obj, GJS_STRING_FILENAME,
&js_fileName);
+ GjsAutoJSChar utf8_filename;
if (js_fileName.isString()) {
JS::RootedString str(context, js_fileName.toString());
- utf8_filename.reset(context, JS_EncodeStringToUTF8(context, str));
+ utf8_filename = JS_EncodeStringToUTF8(context, str);
}
if (!utf8_filename)
- utf8_filename.reset(context, JS_strdup(context, "unknown"));
+ utf8_filename = JS_strdup(context, "unknown");
lineNumber = js_lineNumber.toInt32();
@@ -566,7 +566,7 @@ gjs_log_exception_full(JSContext *context,
}
} else {
- GjsAutoJSChar utf8_stack(context);
+ GjsAutoJSChar utf8_stack;
JS::RootedValue stack(context);
if (exc.isObject() &&
@@ -574,7 +574,7 @@ gjs_log_exception_full(JSContext *context,
&stack) &&
stack.isString()) {
JS::RootedString str(context, stack.toString());
- utf8_stack.reset(context, JS_EncodeStringToUTF8(context, str));
+ utf8_stack = JS_EncodeStringToUTF8(context, str);
}
if (message) {
diff --git a/gjs/jsapi-util.h b/gjs/jsapi-util.h
index e2d31f6..8c54ee0 100644
--- a/gjs/jsapi-util.h
+++ b/gjs/jsapi-util.h
@@ -65,58 +65,27 @@ public:
}
};
-class GjsJSFreeArgs {
-private:
- JSContext *m_cx;
-
-public:
- explicit GjsJSFreeArgs(JSContext *cx) : m_cx(cx)
- {}
-
+struct GjsJSFreeArgs {
void operator() (char *str) {
- JS_free(m_cx, str);
- }
-
- JSContext* get_context() {
- return m_cx;
- }
-
- void set_context(JSContext *cx) {
- m_cx = cx;
+ JS_free(nullptr, str);
}
};
-class GjsAutoJSChar {
-private:
- std::unique_ptr<char, GjsJSFreeArgs> m_ptr;
-
+class GjsAutoJSChar : public std::unique_ptr<char, GjsJSFreeArgs> {
public:
- GjsAutoJSChar(JSContext *cx, char *str = nullptr)
- : m_ptr (str, GjsJSFreeArgs(cx)) {
- g_assert(cx != nullptr);
- }
+ GjsAutoJSChar(char *str = nullptr) : unique_ptr(str, GjsJSFreeArgs()) { }
operator const char*() {
- return m_ptr.get();
+ return get();
}
- const char* get() {
- return m_ptr.get();
+ void operator=(char *str) {
+ reset(str);
}
char* copy() {
/* Strings acquired by this should be g_free()'ed */
- return g_strdup(m_ptr.get());
- }
-
- char* js_copy() {
- /* Strings acquired by this should be JS_free()'ed */
- return JS_strdup(m_ptr.get_deleter().get_context(), m_ptr.get());
- }
-
- void reset(JSContext *cx, char *str) {
- m_ptr.get_deleter().set_context(cx);
- m_ptr.reset(str);
+ return g_strdup(get());
}
};
@@ -137,7 +106,6 @@ typedef struct GjsRootedArray GjsRootedArray;
/* Flags that should be set on properties exported from native code modules.
* Basically set these on API, but do NOT set them on data.
*
- * READONLY: forbid setting prop to another value
* PERMANENT: forbid deleting the prop
* ENUMERATE: allows copyProperties to work among other reasons to have it
*/
diff --git a/gjs/module.cpp b/gjs/module.cpp
index f25507b..cc6657a 100644
--- a/gjs/module.cpp
+++ b/gjs/module.cpp
@@ -163,7 +163,7 @@ class GjsModule {
* be supported according to ES6. For compatibility with earlier GJS,
* we treat it as if it were a real property, but warn about it. */
- GjsAutoJSChar prop_name(cx);
+ GjsAutoJSChar prop_name;
if (!gjs_get_string_id(cx, id, &prop_name))
return false;
diff --git a/modules/cairo-context.cpp b/modules/cairo-context.cpp
index d3e81f4..e77bde1 100644
--- a/modules/cairo-context.cpp
+++ b/modules/cairo-context.cpp
@@ -656,7 +656,7 @@ showText_func(JSContext *context,
JS::Value *vp)
{
GJS_GET_PRIV(context, argc, vp, argv, obj, GjsCairoContext, priv);
- GjsAutoJSChar utf8(context);
+ GjsAutoJSChar utf8;
cairo_t *cr = priv ? priv->cr : NULL;
if (!gjs_parse_call_args(context, "showText", argv, "s",
@@ -679,7 +679,7 @@ selectFontFace_func(JSContext *context,
JS::Value *vp)
{
GJS_GET_PRIV(context, argc, vp, argv, obj, GjsCairoContext, priv);
- GjsAutoJSChar family(context);
+ GjsAutoJSChar family;
cairo_font_slant_t slant;
cairo_font_weight_t weight;
cairo_t *cr = priv ? priv->cr : NULL;
diff --git a/modules/console.cpp b/modules/console.cpp
index 5d7da29..dcbe208 100644
--- a/modules/console.cpp
+++ b/modules/console.cpp
@@ -163,7 +163,7 @@ public:
if (!message) {
g_printerr("(could not convert thrown exception to string)\n");
} else {
- GjsAutoJSChar message_utf8(m_cx, JS_EncodeStringToUTF8(m_cx, message));
+ GjsAutoJSChar message_utf8 = JS_EncodeStringToUTF8(m_cx, message);
g_printerr("%s\n", message_utf8.get());
}
}
diff --git a/test/gjs-test-call-args.cpp b/test/gjs-test-call-args.cpp
index e1806e2..bec9139 100644
--- a/test/gjs-test-call-args.cpp
+++ b/test/gjs-test-call-args.cpp
@@ -85,7 +85,7 @@ JSNATIVE_TEST_FUNC_END
JSNATIVE_TEST_FUNC_BEGIN(one_of_each_type)
bool boolval;
- GjsAutoJSChar strval(cx);
+ GjsAutoJSChar strval;
GjsAutoChar fileval;
int intval;
unsigned uintval;
@@ -155,7 +155,7 @@ JSNATIVE_TEST_FUNC_BEGIN(signed_enum_arg)
JSNATIVE_TEST_FUNC_END
JSNATIVE_TEST_FUNC_BEGIN(one_of_each_nullable_type)
- GjsAutoJSChar strval(cx);
+ GjsAutoJSChar strval;
GjsAutoChar fileval;
JS::RootedObject objval(cx);
retval = gjs_parse_call_args(cx, "oneOfEachNullableType", args, "?s?F?o",
@@ -207,21 +207,15 @@ JSNATIVE_BAD_TYPE_TEST_FUNC(unsigned, "t");
JSNATIVE_BAD_TYPE_TEST_FUNC(int64_t, "f");
JSNATIVE_BAD_TYPE_TEST_FUNC(double, "b");
JSNATIVE_BAD_TYPE_TEST_FUNC(GjsAutoChar, "i");
+JSNATIVE_BAD_TYPE_TEST_FUNC(GjsAutoJSChar, "i");
#undef JSNATIVE_BAD_TYPE_TEST_FUNC
-#define JSNATIVE_CONSTRUCTED_BAD_TYPE_TEST_FUNC(type, ch) \
- JSNATIVE_TEST_FUNC_BEGIN(type##_invalid_type) \
- type val(cx); \
- retval = gjs_parse_call_args(cx, #type "InvalidType", args, ch, \
- "val", &val); \
- JSNATIVE_TEST_FUNC_END
-
-using JS::RootedObject;
-JSNATIVE_CONSTRUCTED_BAD_TYPE_TEST_FUNC(GjsAutoJSChar, "i");
-JSNATIVE_CONSTRUCTED_BAD_TYPE_TEST_FUNC(RootedObject, "i");
-
-#undef JSNATIVE_CONSTRUCTED_BAD_TYPE_TEST_FUNC
+JSNATIVE_TEST_FUNC_BEGIN(object_invalid_type)
+ JS::RootedObject val(cx);
+ retval = gjs_parse_call_args(cx, "objectInvalidType", args, "i",
+ "val", &val);
+JSNATIVE_TEST_FUNC_END
static JSFunctionSpec native_test_funcs[] = {
JS_FS("noArgs", no_args, 0, 0),
@@ -251,7 +245,7 @@ static JSFunctionSpec native_test_funcs[] = {
JS_FS("doubleInvalidType", double_invalid_type, 0, 0),
JS_FS("GjsAutoCharInvalidType", GjsAutoChar_invalid_type, 0, 0),
JS_FS("GjsAutoJSCharInvalidType", GjsAutoJSChar_invalid_type, 0, 0),
- JS_FS("RootedObjectInvalidType", RootedObject_invalid_type, 0, 0),
+ JS_FS("objectInvalidType", object_invalid_type, 0, 0),
JS_FS_END
};
@@ -389,7 +383,7 @@ gjs_test_add_tests_for_parse_call_args(void)
"GjsAutoJSCharInvalidType(1)"
"//*Wrong type for i, got GjsAutoJSChar?");
ADD_CALL_ARGS_TEST_XFAIL("invalid-object-type",
- "RootedObjectInvalidType(1)"
+ "objectInvalidType(1)"
"//*Wrong type for i, got JS::MutableHandleObject");
ADD_CALL_ARGS_TEST_XFAIL("invalid-boolean",
"boolArgNoAssert({})//*Not a boolean");
diff --git a/test/gjs-tests.cpp b/test/gjs-tests.cpp
index 03f34d3..c172d1b 100644
--- a/test/gjs-tests.cpp
+++ b/test/gjs-tests.cpp
@@ -119,11 +119,11 @@ static void
gjstest_test_func_gjs_jsapi_util_string_js_string_utf8(GjsUnitTestFixture *fx,
gconstpointer unused)
{
- GjsAutoJSChar utf8_result(fx->cx);
JS::RootedValue js_string(fx->cx);
-
g_assert_true(gjs_string_from_utf8(fx->cx, VALID_UTF8_STRING, &js_string));
g_assert(js_string.isString());
+
+ GjsAutoJSChar utf8_result;
g_assert(gjs_string_to_utf8(fx->cx, js_string, &utf8_result));
g_assert_cmpstr(VALID_UTF8_STRING, ==, utf8_result);
}
@@ -133,7 +133,6 @@ gjstest_test_func_gjs_jsapi_util_error_throw(GjsUnitTestFixture *fx,
gconstpointer unused)
{
JS::RootedValue exc(fx->cx), value(fx->cx);
- GjsAutoJSChar s(fx->cx);
/* Test that we can throw */
@@ -149,6 +148,7 @@ gjstest_test_func_gjs_jsapi_util_error_throw(GjsUnitTestFixture *fx,
g_assert(value.isString());
+ GjsAutoJSChar s;
gjs_string_to_utf8(fx->cx, value, &s);
g_assert_nonnull(s);
g_assert_cmpstr(s, ==, "This is an exception 42");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]