[gjs/mozjs91: 130/135] Adapt to new Maybe-based property descriptor API
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs/mozjs91: 130/135] Adapt to new Maybe-based property descriptor API
- Date: Sat, 9 Oct 2021 22:09:02 +0000 (UTC)
commit a73fdf1e461f5fa310f4351e6f6e11f33013295b
Author: Evan Welsh <contact evanwelsh com>
Date: Sat Jul 10 20:38:39 2021 -0700
Adapt to new Maybe-based property descriptor API
object() was previously used to indicate whether a property descriptor
was found. Now it's indicated by whether the returned Maybe is Some or
Nothing and the descriptor object is returned separately in the holder
out-parameter.
See https://bugzilla.mozilla.org/show_bug.cgi?id=1706404
gi/gobject.cpp | 29 ++++++++++++++++++++---------
gjs/gjs_pch.hh | 1 +
gjs/importer.cpp | 12 ++++++++----
gjs/module.cpp | 13 ++++++++-----
4 files changed, 37 insertions(+), 18 deletions(-)
---
diff --git a/gi/gobject.cpp b/gi/gobject.cpp
index b9247781..95b03378 100644
--- a/gi/gobject.cpp
+++ b/gi/gobject.cpp
@@ -17,6 +17,7 @@
#include <js/Value.h>
#include <js/ValueArray.h>
#include <jsapi.h> // for JS_SetProperty, JS_DefineProperty
+#include <mozilla/Maybe.h>
#include "gi/gobject.h"
#include "gi/object.h"
@@ -61,28 +62,38 @@ static bool jsobj_set_gproperty(JSContext* cx, JS::HandleObject object,
GjsAutoChar camel_name = gjs_hyphen_to_camel(pspec->name);
if (g_param_spec_get_qdata(pspec, ObjectBase::custom_property_quark())) {
- JS::Rooted<JS::PropertyDescriptor> jsprop(cx);
+ JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> jsprop(cx);
+ JS::RootedObject holder(cx);
// Ensure to call any associated setter method
if (!g_str_equal(underscore_name.get(), pspec->name)) {
- if (!JS_GetPropertyDescriptor(cx, object, underscore_name, &jsprop))
+ if (!JS_GetPropertyDescriptor(cx, object, underscore_name,
+ &jsprop, &holder)) {
return false;
- if (jsprop.setter() &&
- !JS_SetProperty(cx, object, underscore_name, jsvalue))
+ }
+
+ if (jsprop.isSome() && jsprop->setter() &&
+ !JS_SetProperty(cx, object, underscore_name, jsvalue)) {
return false;
+ }
}
if (!g_str_equal(camel_name.get(), pspec->name)) {
- if (!JS_GetPropertyDescriptor(cx, object, camel_name, &jsprop))
+ if (!JS_GetPropertyDescriptor(cx, object, camel_name, &jsprop,
+ &holder)) {
return false;
- if (jsprop.setter() &&
- !JS_SetProperty(cx, object, camel_name, jsvalue))
+ }
+
+ if (jsprop.isSome() && jsprop.value().setter() &&
+ !JS_SetProperty(cx, object, camel_name, jsvalue)) {
return false;
+ }
}
- if (!JS_GetPropertyDescriptor(cx, object, pspec->name, &jsprop))
+ if (!JS_GetPropertyDescriptor(cx, object, pspec->name, &jsprop,
+ &holder))
return false;
- if (jsprop.setter() &&
+ if (jsprop.isSome() && jsprop.value().setter() &&
!JS_SetProperty(cx, object, pspec->name, jsvalue))
return false;
}
diff --git a/gjs/gjs_pch.hh b/gjs/gjs_pch.hh
index 6d15bddf..fdc33184 100644
--- a/gjs/gjs_pch.hh
+++ b/gjs/gjs_pch.hh
@@ -108,6 +108,7 @@
#include <mozilla/HashFunctions.h>
#include <mozilla/HashTable.h>
#include <mozilla/Likely.h>
+#include <mozilla/Maybe.h>
#include <mozilla/UniquePtr.h>
#include <mozilla/Unused.h>
#ifdef HAVE_READLINE_READLINE_H
diff --git a/gjs/importer.cpp b/gjs/importer.cpp
index 4145aae3..273ab1bc 100644
--- a/gjs/importer.cpp
+++ b/gjs/importer.cpp
@@ -11,7 +11,6 @@
#endif
#include <string>
-#include <utility> // for move
#include <vector> // for vector
#include <gio/gio.h>
@@ -37,6 +36,7 @@
#include <js/Value.h>
#include <jsapi.h> // for JS_DefinePropertyById, JS_DefineP...
#include <jspubtd.h> // for JSProto_Error
+#include <mozilla/Maybe.h>
#include <mozilla/UniquePtr.h>
#include "gjs/atoms.h"
@@ -201,17 +201,21 @@ seal_import(JSContext *cx,
JS::HandleId id,
const char *name)
{
- JS::Rooted<JS::PropertyDescriptor> descr(cx);
+ JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> maybe_descr(cx);
- if (!JS_GetOwnPropertyDescriptorById(cx, obj, id, &descr) || !descr.object()) {
+ if (!JS_GetOwnPropertyDescriptorById(cx, obj, id, &maybe_descr) ||
+ maybe_descr.isNothing()) {
gjs_debug(GJS_DEBUG_IMPORTER,
"Failed to get attributes to seal '%s' in importer",
name);
return false;
}
+ JS::Rooted<JS::PropertyDescriptor> descr(cx, maybe_descr.value());
+
descr.setConfigurable(false);
- if (!JS_DefinePropertyById(cx, descr.object(), id, descr)) {
+
+ if (!JS_DefinePropertyById(cx, obj, id, descr)) {
gjs_debug(GJS_DEBUG_IMPORTER,
"Failed to redefine attributes to seal '%s' in importer",
name);
diff --git a/gjs/module.cpp b/gjs/module.cpp
index 938b88ea..fb966690 100644
--- a/gjs/module.cpp
+++ b/gjs/module.cpp
@@ -37,6 +37,7 @@
#include <js/ValueArray.h>
#include <jsapi.h> // for JS_DefinePropertyById, ...
#include <jsfriendapi.h> // for SetFunctionNativeReserved
+#include <mozilla/Maybe.h>
#include "gjs/atoms.h"
#include "gjs/context-private.h"
@@ -185,9 +186,12 @@ class GjsScriptModule {
return true; /* nothing imported yet */
}
- if (!JS_HasPropertyById(cx, lexical, id, resolved))
+ JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> maybe_desc(cx);
+ JS::RootedObject holder(cx);
+ if (!JS_GetPropertyDescriptorById(cx, lexical, id, &maybe_desc,
+ &holder))
return false;
- if (!*resolved)
+ if (maybe_desc.isNothing())
return true;
/* The property is present in the lexical environment. This should not
@@ -203,9 +207,8 @@ class GjsScriptModule {
"please fix your code anyway.",
gjs_debug_id(id).c_str(), m_name);
- JS::Rooted<JS::PropertyDescriptor> desc(cx);
- return JS_GetPropertyDescriptorById(cx, lexical, id, &desc) &&
- JS_DefinePropertyById(cx, module, id, desc);
+ JS::Rooted<JS::PropertyDescriptor> desc(cx, maybe_desc.value());
+ return JS_DefinePropertyById(cx, module, id, desc);
}
GJS_JSAPI_RETURN_CONVENTION
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]