[gjs/simplify-private-pointers: 4/6] cairo: Use cairo_pattern_t as the private pointer for Cairo.Pattern



commit a79f0035a9308a9dd1d66b383d0db31b0aa81915
Author: Philip Chimento <philip chimento gmail com>
Date:   Sat May 2 18:56:40 2020 -0700

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

 modules/cairo-linear-gradient.cpp |  4 ++--
 modules/cairo-pattern.cpp         | 40 ++++++++-------------------------------
 modules/cairo-private.h           |  4 +---
 modules/cairo-radial-gradient.cpp |  4 ++--
 modules/cairo-solid-pattern.cpp   |  2 +-
 modules/cairo-surface-pattern.cpp |  4 ++--
 6 files changed, 16 insertions(+), 42 deletions(-)
---
diff --git a/modules/cairo-linear-gradient.cpp b/modules/cairo-linear-gradient.cpp
index 3bb62ade..3b50011b 100644
--- a/modules/cairo-linear-gradient.cpp
+++ b/modules/cairo-linear-gradient.cpp
@@ -63,7 +63,7 @@ GJS_NATIVE_CONSTRUCTOR_DECLARE(cairo_linear_gradient)
     if (!gjs_cairo_check_status(context, cairo_pattern_status(pattern), "pattern"))
         return false;
 
-    gjs_cairo_pattern_construct(context, object, pattern);
+    gjs_cairo_pattern_construct(object, pattern);
     cairo_pattern_destroy(pattern);
 
     GJS_NATIVE_CONSTRUCTOR_FINISH(cairo_linear_gradient);
@@ -108,7 +108,7 @@ gjs_cairo_linear_gradient_from_pattern(JSContext       *context,
         return nullptr;
     }
 
-    gjs_cairo_pattern_construct(context, object, pattern);
+    gjs_cairo_pattern_construct(object, pattern);
 
     return object;
 }
diff --git a/modules/cairo-pattern.cpp b/modules/cairo-pattern.cpp
index 84ffe184..8669a338 100644
--- a/modules/cairo-pattern.cpp
+++ b/modules/cairo-pattern.cpp
@@ -38,22 +38,15 @@
 #include "gjs/macros.h"
 #include "modules/cairo-private.h"
 
-typedef struct {
-    cairo_pattern_t *pattern;
-} GjsCairoPattern;
-
 GJS_DEFINE_PROTO_ABSTRACT_WITH_GTYPE("Pattern", cairo_pattern,
                                      CAIRO_GOBJECT_TYPE_PATTERN,
                                      JSCLASS_BACKGROUND_FINALIZE)
-GJS_DEFINE_PRIV_FROM_JS(GjsCairoPattern, gjs_cairo_pattern_class)
 
 static void gjs_cairo_pattern_finalize(JSFreeOp*, JSObject* obj) {
-    GjsCairoPattern *priv;
-    priv = (GjsCairoPattern*) JS_GetPrivate(obj);
-    if (!priv)
-        return;
-    cairo_pattern_destroy(priv->pattern);
-    g_slice_free(GjsCairoPattern, priv);
+    using AutoPattern =
+        GjsAutoPointer<cairo_pattern_t, cairo_pattern_t, cairo_pattern_destroy>;
+    AutoPattern pattern = static_cast<cairo_pattern_t*>(JS_GetPrivate(obj));
+    JS_SetPrivate(obj, nullptr);
 }
 
 /* Properties */
@@ -102,7 +95,6 @@ JSFunctionSpec gjs_cairo_pattern_static_funcs[] = { JS_FS_END };
 
 /**
  * gjs_cairo_pattern_construct:
- * @context: the context
  * @object: object to construct
  * @pattern: cairo_pattern to attach to the object
  *
@@ -111,23 +103,12 @@ JSFunctionSpec gjs_cairo_pattern_static_funcs[] = { JS_FS_END };
  *
  * This is mainly used for subclasses where object is already created.
  */
-void
-gjs_cairo_pattern_construct(JSContext       *context,
-                            JS::HandleObject object,
-                            cairo_pattern_t *pattern)
-{
-    GjsCairoPattern *priv;
-
-    g_return_if_fail(context);
+void gjs_cairo_pattern_construct(JSObject* object, cairo_pattern_t* pattern) {
     g_return_if_fail(object);
     g_return_if_fail(pattern);
 
-    priv = g_slice_new0(GjsCairoPattern);
-
-    g_assert(!priv_from_js(context, object));
-    JS_SetPrivate(object, priv);
-
-    priv->pattern = cairo_pattern_reference(pattern);
+    g_assert(!JS_GetPrivate(object));
+    JS_SetPrivate(object, cairo_pattern_reference(pattern));
 }
 
 /**
@@ -209,10 +190,5 @@ cairo_pattern_t* gjs_cairo_pattern_get_pattern(
         return nullptr;
     }
 
-    auto* priv = static_cast<GjsCairoPattern*>(JS_GetPrivate(pattern_wrapper));
-    if (!priv)
-        return nullptr;
-
-    g_assert(priv->pattern);
-    return priv->pattern;
+    return static_cast<cairo_pattern_t*>(JS_GetPrivate(pattern_wrapper));
 }
diff --git a/modules/cairo-private.h b/modules/cairo-private.h
index 98850e1a..4923cab3 100644
--- a/modules/cairo-private.h
+++ b/modules/cairo-private.h
@@ -147,9 +147,7 @@ bool gjs_cairo_pattern_define_proto(JSContext              *cx,
                                     JS::HandleObject        module,
                                     JS::MutableHandleObject proto);
 
-void             gjs_cairo_pattern_construct            (JSContext       *context,
-                                                         JS::HandleObject object,
-                                                         cairo_pattern_t *pattern);
+void gjs_cairo_pattern_construct(JSObject* object, cairo_pattern_t* pattern);
 void             gjs_cairo_pattern_finalize_pattern     (JSFreeOp        *fop,
                                                          JSObject        *object);
 GJS_JSAPI_RETURN_CONVENTION
diff --git a/modules/cairo-radial-gradient.cpp b/modules/cairo-radial-gradient.cpp
index 328302de..3d0e71fc 100644
--- a/modules/cairo-radial-gradient.cpp
+++ b/modules/cairo-radial-gradient.cpp
@@ -65,7 +65,7 @@ GJS_NATIVE_CONSTRUCTOR_DECLARE(cairo_radial_gradient)
     if (!gjs_cairo_check_status(context, cairo_pattern_status(pattern), "pattern"))
         return false;
 
-    gjs_cairo_pattern_construct(context, object, pattern);
+    gjs_cairo_pattern_construct(object, pattern);
     cairo_pattern_destroy(pattern);
 
     GJS_NATIVE_CONSTRUCTOR_FINISH(cairo_radial_gradient);
@@ -110,7 +110,7 @@ gjs_cairo_radial_gradient_from_pattern(JSContext       *context,
         return nullptr;
     }
 
-    gjs_cairo_pattern_construct(context, object, pattern);
+    gjs_cairo_pattern_construct(object, pattern);
 
     return object;
 }
diff --git a/modules/cairo-solid-pattern.cpp b/modules/cairo-solid-pattern.cpp
index a9856431..e03e420a 100644
--- a/modules/cairo-solid-pattern.cpp
+++ b/modules/cairo-solid-pattern.cpp
@@ -140,7 +140,7 @@ gjs_cairo_solid_pattern_from_pattern(JSContext       *context,
         return nullptr;
     }
 
-    gjs_cairo_pattern_construct(context, object, pattern);
+    gjs_cairo_pattern_construct(object, pattern);
 
     return object;
 }
diff --git a/modules/cairo-surface-pattern.cpp b/modules/cairo-surface-pattern.cpp
index 35a1d119..5c522d7d 100644
--- a/modules/cairo-surface-pattern.cpp
+++ b/modules/cairo-surface-pattern.cpp
@@ -66,7 +66,7 @@ GJS_NATIVE_CONSTRUCTOR_DECLARE(cairo_surface_pattern)
     if (!gjs_cairo_check_status(context, cairo_pattern_status(pattern), "pattern"))
         return false;
 
-    gjs_cairo_pattern_construct(context, object, pattern);
+    gjs_cairo_pattern_construct(object, pattern);
     cairo_pattern_destroy(pattern);
 
     GJS_NATIVE_CONSTRUCTOR_FINISH(cairo_surface_pattern);
@@ -222,7 +222,7 @@ gjs_cairo_surface_pattern_from_pattern(JSContext       *context,
         return nullptr;
     }
 
-    gjs_cairo_pattern_construct(context, object, pattern);
+    gjs_cairo_pattern_construct(object, pattern);
 
     return object;
 }


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