summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Welsh <contact@evanwelsh.com>2022-07-22 10:49:35 -0700
committerPhilip Chimento <philip.chimento@gmail.com>2022-08-07 16:42:03 -0700
commitfdcfc12272d0b25a4c028ffbe7ef1f4063db88f3 (patch)
tree04e3f438d5c77003767ade46168b7d1c7303836d
parent1deacb549cc91a2e57aac0e484c4301a0a1b1e82 (diff)
downloadgjs-fdcfc12272d0b25a4c028ffbe7ef1f4063db88f3.tar.gz
js: Replace JSFreeOp with JS::GCContext
In particular, in finalize operations.
-rw-r--r--gi/cwrapper.h6
-rw-r--r--gi/function.cpp4
-rw-r--r--gi/gtype.cpp2
-rw-r--r--gi/ns.cpp2
-rw-r--r--gi/object.cpp4
-rw-r--r--gi/object.h2
-rw-r--r--gi/param.cpp2
-rw-r--r--gi/wrapperutils.h10
-rw-r--r--gjs/engine.cpp2
-rw-r--r--gjs/module.cpp4
-rw-r--r--modules/cairo-context.cpp2
-rw-r--r--modules/cairo-path.cpp2
-rw-r--r--modules/cairo-pattern.cpp3
-rw-r--r--modules/cairo-private.h28
-rw-r--r--modules/cairo-region.cpp2
-rw-r--r--modules/cairo-surface.cpp3
-rw-r--r--test/gjs-test-rooting.cpp2
-rwxr-xr-xtools/process_iwyu.py2
18 files changed, 41 insertions, 41 deletions
diff --git a/gi/cwrapper.h b/gi/cwrapper.h
index bbcd216c..47c8e29a 100644
--- a/gi/cwrapper.h
+++ b/gi/cwrapper.h
@@ -204,7 +204,7 @@ class CWrapperPointerOps {
* class_spec's flags member.
* - static constexpr unsigned constructor_nargs: number of arguments that the
* constructor takes. If you implement constructor_impl() then also add this.
- * - void finalize_impl(JSFreeOp*, Wrapped*): called when the JS object is
+ * - void finalize_impl(JS::GCContext*, Wrapped*): called when the JS object is
* garbage collected, use this to free the C pointer and do any other cleanup
*
* Add optional functionality by setting members of class_spec:
@@ -291,14 +291,14 @@ class CWrapper : public CWrapperPointerOps<Base, Wrapped> {
debug_jsprop(message, gjs_debug_id(id).c_str(), obj);
}
- static void finalize(JSFreeOp* fop, JSObject* obj) {
+ static void finalize(JS::GCContext* gcx, JSObject* obj) {
Wrapped* priv = Base::for_js_nocheck(obj);
// Call only CWrapper's original method here, not any overrides; e.g.,
// we don't want to deal with a read barrier.
CWrapper::debug_lifecycle(priv, obj, "Finalize");
- Base::finalize_impl(fop, priv);
+ Base::finalize_impl(gcx, priv);
CWrapperPointerOps<Base, Wrapped>::unset_private(obj);
}
diff --git a/gi/function.cpp b/gi/function.cpp
index 8cce6834..08a0ea25 100644
--- a/gi/function.cpp
+++ b/gi/function.cpp
@@ -109,7 +109,7 @@ class Function : public CWrapper<Function> {
GJS_JSAPI_RETURN_CONVENTION
static bool call(JSContext* cx, unsigned argc, JS::Value* vp);
- static void finalize_impl(JSFreeOp*, Function* priv);
+ static void finalize_impl(JS::GCContext*, Function* priv);
GJS_JSAPI_RETURN_CONVENTION
static bool get_length(JSContext* cx, unsigned argc, JS::Value* vp);
@@ -1154,7 +1154,7 @@ Function::~Function() {
GJS_DEC_COUNTER(function);
}
-void Function::finalize_impl(JSFreeOp*, Function* priv) {
+void Function::finalize_impl(JS::GCContext*, Function* priv) {
if (priv == NULL)
return; /* we are the prototype, not a real instance, so constructor never called */
delete priv;
diff --git a/gi/gtype.cpp b/gi/gtype.cpp
index 58efef00..8f5bf38a 100644
--- a/gi/gtype.cpp
+++ b/gi/gtype.cpp
@@ -48,7 +48,7 @@ class GTypeObj : public CWrapper<GTypeObj, void> {
// No private data is allocated, it's stuffed directly in the private field
// of JSObject, so nothing to free
- static void finalize_impl(JSFreeOp*, void*) {}
+ static void finalize_impl(JS::GCContext*, void*) {}
// Properties
diff --git a/gi/ns.cpp b/gi/ns.cpp
index 1b546c3d..3ba019ba 100644
--- a/gi/ns.cpp
+++ b/gi/ns.cpp
@@ -152,7 +152,7 @@ class Ns : private GjsAutoChar, public CWrapper<Ns> {
return true;
}
- static void finalize_impl(JSFreeOp* fop [[maybe_unused]], Ns* priv) {
+ static void finalize_impl(JS::GCContext*, Ns* priv) {
g_assert(priv && "Finalize called on wrong object");
delete priv;
}
diff --git a/gi/object.cpp b/gi/object.cpp
index ed98ac50..3ced434f 100644
--- a/gi/object.cpp
+++ b/gi/object.cpp
@@ -1902,14 +1902,14 @@ void ObjectPrototype::trace_impl(JSTracer* tracer) {
Gjs::Closure::for_gclosure(closure)->trace(tracer);
}
-void ObjectInstance::finalize_impl(JSFreeOp* fop, JSObject* obj) {
+void ObjectInstance::finalize_impl(JS::GCContext* gcx, JSObject* obj) {
GTypeQuery query;
type_query_dynamic_safe(&query);
if (G_LIKELY(query.type))
JS::RemoveAssociatedMemory(obj, query.instance_size,
MemoryUse::GObjectInstanceStruct);
- GIWrapperInstance::finalize_impl(fop, obj);
+ GIWrapperInstance::finalize_impl(gcx, obj);
}
ObjectInstance::~ObjectInstance() {
diff --git a/gi/object.h b/gi/object.h
index cb9af171..e6016cb7 100644
--- a/gi/object.h
+++ b/gi/object.h
@@ -419,7 +419,7 @@ class ObjectInstance : public GIWrapperInstance<ObjectBase, ObjectPrototype,
GJS_JSAPI_RETURN_CONVENTION
bool add_property_impl(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::HandleValue value);
- void finalize_impl(JSFreeOp* fop, JSObject* obj);
+ void finalize_impl(JS::GCContext*, JSObject* obj);
void trace_impl(JSTracer* trc);
/* JS property getters/setters */
diff --git a/gi/param.cpp b/gi/param.cpp
index 0c4e0409..089b7572 100644
--- a/gi/param.cpp
+++ b/gi/param.cpp
@@ -123,7 +123,7 @@ static bool gjs_param_constructor(JSContext* cx, unsigned argc, JS::Value* vp) {
return true;
}
-static void param_finalize(JSFreeOp*, JSObject* obj) {
+static void param_finalize(JS::GCContext*, JSObject* obj) {
Param* priv = Gjs::maybe_get_private<Param>(obj, POINTER);
gjs_debug_lifecycle(GJS_DEBUG_GPARAM, "finalize, obj %p priv %p", obj,
priv);
diff --git a/gi/wrapperutils.h b/gi/wrapperutils.h
index 719a78cc..16c55f11 100644
--- a/gi/wrapperutils.h
+++ b/gi/wrapperutils.h
@@ -395,7 +395,7 @@ class GIWrapperBase : public CWrapperPointerOps<Base> {
* necessary to include a finalize_impl() function in Prototype or Instance.
* Any needed finalization should be done in ~Prototype() and ~Instance().
*/
- static void finalize(JSFreeOp* fop, JSObject* obj) {
+ static void finalize(JS::GCContext* gcx, JSObject* obj) {
Base* priv = Base::for_js_nocheck(obj);
if (!priv)
return; // construction didn't finish
@@ -405,9 +405,9 @@ class GIWrapperBase : public CWrapperPointerOps<Base> {
static_cast<GIWrapperBase*>(priv)->debug_lifecycle(obj, "Finalize");
if (priv->is_prototype())
- priv->to_prototype()->finalize_impl(fop, obj);
+ priv->to_prototype()->finalize_impl(gcx, obj);
else
- priv->to_instance()->finalize_impl(fop, obj);
+ priv->to_instance()->finalize_impl(gcx, obj);
Base::unset_private(obj);
}
@@ -1013,7 +1013,7 @@ class GIWrapperPrototype : public Base {
// JSClass operations
protected:
- void finalize_impl(JSFreeOp*, JSObject*) { release(); }
+ void finalize_impl(JS::GCContext*, JSObject*) { release(); }
// Override if necessary
void trace_impl(JSTracer*) {}
@@ -1108,7 +1108,7 @@ class GIWrapperInstance : public Base {
// JSClass operations
protected:
- void finalize_impl(JSFreeOp*, JSObject*) {
+ void finalize_impl(JS::GCContext*, JSObject*) {
delete static_cast<Instance*>(this);
}
diff --git a/gjs/engine.cpp b/gjs/engine.cpp
index f67f9973..e7a53fb6 100644
--- a/gjs/engine.cpp
+++ b/gjs/engine.cpp
@@ -33,7 +33,7 @@
#include "gjs/jsapi-util.h"
#include "util/log.h"
-static void gjs_finalize_callback(JSFreeOp*, JSFinalizeStatus status,
+static void gjs_finalize_callback(JS::GCContext*, JSFinalizeStatus status,
void* data) {
auto* gjs = static_cast<GjsContextPrivate*>(data);
gjs->set_finalize_status(status);
diff --git a/gjs/module.cpp b/gjs/module.cpp
index cf9eaf37..ccf20374 100644
--- a/gjs/module.cpp
+++ b/gjs/module.cpp
@@ -220,7 +220,9 @@ class GjsScriptModule {
return priv(module)->resolve_impl(cx, module, id, resolved);
}
- static void finalize(JSFreeOp*, JSObject* module) { delete priv(module); }
+ static void finalize(JS::GCContext*, JSObject* module) {
+ delete priv(module);
+ }
static constexpr JSClassOps class_ops = {
nullptr, // addProperty
diff --git a/modules/cairo-context.cpp b/modules/cairo-context.cpp
index 2f59a686..b777fb29 100644
--- a/modules/cairo-context.cpp
+++ b/modules/cairo-context.cpp
@@ -261,7 +261,7 @@ cairo_t* CairoContext::constructor_impl(JSContext* context,
return cr;
}
-void CairoContext::finalize_impl(JSFreeOp*, cairo_t* cr) {
+void CairoContext::finalize_impl(JS::GCContext*, cairo_t* cr) {
if (!cr)
return;
cairo_destroy(cr);
diff --git a/modules/cairo-path.cpp b/modules/cairo-path.cpp
index 415fcf2e..b2762f5f 100644
--- a/modules/cairo-path.cpp
+++ b/modules/cairo-path.cpp
@@ -43,7 +43,7 @@ JSObject* CairoPath::take_c_ptr(JSContext* cx, cairo_path_t* ptr) {
return wrapper;
}
-void CairoPath::finalize_impl(JSFreeOp*, cairo_path_t* path) {
+void CairoPath::finalize_impl(JS::GCContext*, cairo_path_t* path) {
if (!path)
return;
cairo_path_destroy(path);
diff --git a/modules/cairo-pattern.cpp b/modules/cairo-pattern.cpp
index a9254184..9d5a847a 100644
--- a/modules/cairo-pattern.cpp
+++ b/modules/cairo-pattern.cpp
@@ -65,14 +65,13 @@ const JSFunctionSpec CairoPattern::proto_funcs[] = {
/**
* CairoPattern::finalize_impl:
- * @fop: the free op
* @pattern: pointer to free
*
* Destroys the resources associated with a pattern wrapper.
*
* This is mainly used for subclasses.
*/
-void CairoPattern::finalize_impl(JSFreeOp*, cairo_pattern_t* pattern) {
+void CairoPattern::finalize_impl(JS::GCContext*, cairo_pattern_t* pattern) {
if (!pattern)
return;
cairo_pattern_destroy(pattern);
diff --git a/modules/cairo-private.h b/modules/cairo-private.h
index 8e17c83e..75d111c5 100644
--- a/modules/cairo-private.h
+++ b/modules/cairo-private.h
@@ -55,7 +55,7 @@ class CairoRegion : public CWrapper<CairoRegion, cairo_region_t> {
static cairo_region_t* constructor_impl(JSContext* cx,
const JS::CallArgs& args);
- static void finalize_impl(JSFreeOp* fop, cairo_region_t* cr);
+ static void finalize_impl(JS::GCContext*, cairo_region_t* cr);
static const JSFunctionSpec proto_funcs[];
static const JSPropertySpec proto_props[];
@@ -95,7 +95,7 @@ class CairoContext : public CWrapper<CairoContext, cairo_t> {
GJS_JSAPI_RETURN_CONVENTION
static cairo_t* constructor_impl(JSContext* cx, const JS::CallArgs& args);
- static void finalize_impl(JSFreeOp* fop, cairo_t* cr);
+ static void finalize_impl(JS::GCContext*, cairo_t* cr);
static const JSFunctionSpec proto_funcs[];
static const JSPropertySpec proto_props[];
@@ -133,7 +133,7 @@ class CairoPath : public CWrapper<CairoPath, cairo_path_t> {
GjsGlobalSlot::PROTOTYPE_cairo_path;
static constexpr GjsDebugTopic DEBUG_TOPIC = GJS_DEBUG_CAIRO;
- static void finalize_impl(JSFreeOp* fop, cairo_path_t* path);
+ static void finalize_impl(JS::GCContext*, cairo_path_t* path);
static const JSPropertySpec proto_props[];
static constexpr js::ClassSpec class_spec = {
@@ -174,7 +174,7 @@ class CairoSurface : public CWrapper<CairoSurface, cairo_surface_t> {
static GType gtype() { return CAIRO_GOBJECT_TYPE_SURFACE; }
- static void finalize_impl(JSFreeOp* fop, cairo_surface_t* surface);
+ static void finalize_impl(JS::GCContext*, cairo_surface_t* surface);
static const JSFunctionSpec proto_funcs[];
static const JSPropertySpec proto_props[];
@@ -240,7 +240,7 @@ class CairoImageSurface : public CWrapper<CairoImageSurface, cairo_surface_t> {
return cairo_surface_reference(surface);
}
- static void finalize_impl(JSFreeOp*, cairo_surface_t*) {}
+ static void finalize_impl(JS::GCContext*, cairo_surface_t*) {}
GJS_JSAPI_RETURN_CONVENTION
static cairo_surface_t* constructor_impl(JSContext* cx,
@@ -280,7 +280,7 @@ class CairoPSSurface : public CWrapper<CairoPSSurface, cairo_surface_t> {
return cairo_surface_reference(surface);
}
- static void finalize_impl(JSFreeOp*, cairo_surface_t*) {}
+ static void finalize_impl(JS::GCContext*, cairo_surface_t*) {}
GJS_JSAPI_RETURN_CONVENTION
static cairo_surface_t* constructor_impl(JSContext* cx,
@@ -326,7 +326,7 @@ class CairoPDFSurface : public CWrapper<CairoPDFSurface, cairo_surface_t> {
return cairo_surface_reference(surface);
}
- static void finalize_impl(JSFreeOp*, cairo_surface_t*) {}
+ static void finalize_impl(JS::GCContext*, cairo_surface_t*) {}
GJS_JSAPI_RETURN_CONVENTION
static cairo_surface_t* constructor_impl(JSContext* cx,
@@ -372,7 +372,7 @@ class CairoSVGSurface : public CWrapper<CairoSVGSurface, cairo_surface_t> {
return cairo_surface_reference(surface);
}
- static void finalize_impl(JSFreeOp*, cairo_surface_t*) {}
+ static void finalize_impl(JS::GCContext*, cairo_surface_t*) {}
GJS_JSAPI_RETURN_CONVENTION
static cairo_surface_t* constructor_impl(JSContext* cx,
@@ -430,7 +430,7 @@ class CairoPattern : public CWrapper<CairoPattern, cairo_pattern_t> {
static bool getType_func(JSContext* context, unsigned argc, JS::Value* vp);
protected:
- static void finalize_impl(JSFreeOp* fop, cairo_pattern_t* pattern);
+ static void finalize_impl(JS::GCContext*, cairo_pattern_t* pattern);
public:
static cairo_pattern_t* for_js(JSContext* cx,
@@ -469,7 +469,7 @@ class CairoGradient : public CWrapper<CairoGradient, cairo_pattern_t> {
"Gradient", JSCLASS_HAS_RESERVED_SLOTS(1) | JSCLASS_BACKGROUND_FINALIZE,
&CairoPattern::class_ops, &CairoGradient::class_spec};
- static void finalize_impl(JSFreeOp*, cairo_pattern_t*) {}
+ static void finalize_impl(JS::GCContext*, cairo_pattern_t*) {}
};
class CairoLinearGradient
@@ -509,7 +509,7 @@ class CairoLinearGradient
static cairo_pattern_t* constructor_impl(JSContext* cx,
const JS::CallArgs& args);
- static void finalize_impl(JSFreeOp*, cairo_pattern_t*) {}
+ static void finalize_impl(JS::GCContext*, cairo_pattern_t*) {}
};
class CairoRadialGradient
@@ -549,7 +549,7 @@ class CairoRadialGradient
static cairo_pattern_t* constructor_impl(JSContext* cx,
const JS::CallArgs& args);
- static void finalize_impl(JSFreeOp*, cairo_pattern_t*) {}
+ static void finalize_impl(JS::GCContext*, cairo_pattern_t*) {}
};
class CairoSurfacePattern
@@ -589,7 +589,7 @@ class CairoSurfacePattern
static cairo_pattern_t* constructor_impl(JSContext* cx,
const JS::CallArgs& args);
- static void finalize_impl(JSFreeOp*, cairo_pattern_t*) {}
+ static void finalize_impl(JS::GCContext*, cairo_pattern_t*) {}
};
class CairoSolidPattern : public CWrapper<CairoSolidPattern, cairo_pattern_t> {
@@ -623,7 +623,7 @@ class CairoSolidPattern : public CWrapper<CairoSolidPattern, cairo_pattern_t> {
return cairo_pattern_reference(pattern);
}
- static void finalize_impl(JSFreeOp*, cairo_pattern_t*) {}
+ static void finalize_impl(JS::GCContext*, cairo_pattern_t*) {}
};
#endif // MODULES_CAIRO_PRIVATE_H_
diff --git a/modules/cairo-region.cpp b/modules/cairo-region.cpp
index 84c449f4..2490dabc 100644
--- a/modules/cairo-region.cpp
+++ b/modules/cairo-region.cpp
@@ -220,7 +220,7 @@ cairo_region_t* CairoRegion::constructor_impl(JSContext* context,
return cairo_region_create();
}
-void CairoRegion::finalize_impl(JSFreeOp*, cairo_region_t* region) {
+void CairoRegion::finalize_impl(JS::GCContext*, cairo_region_t* region) {
if (!region)
return;
diff --git a/modules/cairo-surface.cpp b/modules/cairo-surface.cpp
index 51661c3c..abeca366 100644
--- a/modules/cairo-surface.cpp
+++ b/modules/cairo-surface.cpp
@@ -207,14 +207,13 @@ const JSFunctionSpec CairoSurface::proto_funcs[] = {
/**
* CairoSurface::finalize_impl:
- * @fop: the free op
* @surface: the pointer to finalize
*
* Destroys the resources associated with a surface wrapper.
*
* This is mainly used for subclasses.
*/
-void CairoSurface::finalize_impl(JSFreeOp*, cairo_surface_t* surface) {
+void CairoSurface::finalize_impl(JS::GCContext*, cairo_surface_t* surface) {
if (!surface)
return;
cairo_surface_destroy(surface);
diff --git a/test/gjs-test-rooting.cpp b/test/gjs-test-rooting.cpp
index d8109754..ecf79f45 100644
--- a/test/gjs-test-rooting.cpp
+++ b/test/gjs-test-rooting.cpp
@@ -44,7 +44,7 @@ struct GjsRootingFixture {
GjsMaybeOwned<JSObject *> *obj; /* only used in callback test cases */
};
-static void test_obj_finalize(JSFreeOp*, JSObject* obj) {
+static void test_obj_finalize(JS::GCContext*, JSObject* obj) {
bool* finalized_p = Gjs::maybe_get_private<bool>(obj, POINTER);
g_assert_false(*finalized_p);
*finalized_p = true;
diff --git a/tools/process_iwyu.py b/tools/process_iwyu.py
index 6699f4ec..8b70517c 100755
--- a/tools/process_iwyu.py
+++ b/tools/process_iwyu.py
@@ -40,12 +40,12 @@ FWD_DECLS_IN_HEADER = (
'struct JSContext;',
'struct JSClass;',
'class JSFunction;',
- 'class JSFreeOp;',
'class JSObject;',
'struct JSRuntime;',
'class JSScript;',
'class JSString;',
'namespace js { class TempAllocPolicy; }',
+ 'namespace JS { class GCContext; }',
'namespace JS { struct PropertyKey; }',
'namespace JS { class Symbol; }',
'namespace JS { class BigInt; }',