[gjs/simplify-private-pointers: 3/6] cairo: Use cairo_path_t as the private pointer for Cairo.Path



commit 2c1397f3055bab75f3e409bb0c1c622336cb1c98
Author: Philip Chimento <philip chimento gmail com>
Date:   Sat May 2 18:52:53 2020 -0700

    cairo: Use cairo_path_t as the private pointer for Cairo.Path
    
    Instead of allocating a separate private struct that allocates a
    cairo_path_t, use the cairo_path_t directly as the private struct. This
    makes the code simpler and saves 8 bytes per object.

 modules/cairo-path.cpp | 32 +++++++++-----------------------
 1 file changed, 9 insertions(+), 23 deletions(-)
---
diff --git a/modules/cairo-path.cpp b/modules/cairo-path.cpp
index 5329d219..41db292f 100644
--- a/modules/cairo-path.cpp
+++ b/modules/cairo-path.cpp
@@ -36,23 +36,16 @@
 #include "gjs/macros.h"
 #include "modules/cairo-private.h"  // IWYU pragma: keep
 
-typedef struct {
-    cairo_path_t    *path;
-} GjsCairoPath;
-
 GJS_USE
 static JSObject *gjs_cairo_path_get_proto(JSContext *);
 
 GJS_DEFINE_PROTO_ABSTRACT("Path", cairo_path, JSCLASS_BACKGROUND_FINALIZE)
-GJS_DEFINE_PRIV_FROM_JS(GjsCairoPath, gjs_cairo_path_class)
 
 static void gjs_cairo_path_finalize(JSFreeOp*, JSObject* obj) {
-    GjsCairoPath *priv;
-    priv = (GjsCairoPath*) JS_GetPrivate(obj);
-    if (!priv)
-        return;
-    cairo_path_destroy(priv->path);
-    g_slice_free(GjsCairoPath, priv);
+    using AutoCairoPath =
+        GjsAutoPointer<cairo_path_t, cairo_path_t, cairo_path_destroy>;
+    AutoCairoPath path = static_cast<cairo_path_t*>(JS_GetPrivate(obj));
+    JS_SetPrivate(obj, nullptr);
 }
 
 /* Properties */
@@ -78,8 +71,6 @@ JSObject *
 gjs_cairo_path_from_path(JSContext    *context,
                          cairo_path_t *path)
 {
-    GjsCairoPath *priv;
-
     g_return_val_if_fail(context, nullptr);
     g_return_val_if_fail(path, nullptr);
 
@@ -91,12 +82,8 @@ gjs_cairo_path_from_path(JSContext    *context,
         return nullptr;
     }
 
-    priv = g_slice_new0(GjsCairoPath);
-
-    g_assert(!priv_from_js(context, object));
-    JS_SetPrivate(object, priv);
-
-    priv->path = path;
+    g_assert(!JS_GetPrivate(object));
+    JS_SetPrivate(object, path);
 
     return object;
 }
@@ -113,14 +100,13 @@ cairo_path_t* gjs_cairo_path_get_path(JSContext* cx,
     g_return_val_if_fail(cx, nullptr);
     g_return_val_if_fail(path_wrapper, nullptr);
 
-    auto* priv = static_cast<GjsCairoPath*>(JS_GetInstancePrivate(
+    auto* path = static_cast<cairo_path_t*>(JS_GetInstancePrivate(
         cx, path_wrapper, &gjs_cairo_path_class, nullptr));
-    if (!priv) {
+    if (!path) {
         gjs_throw(cx, "Expected Cairo.Path but got %s",
                   JS_GetClass(path_wrapper)->name);
         return nullptr;
     }
 
-    g_assert(priv->path);
-    return priv->path;
+    return path;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]