[gjs/wip/ptomato/mozjs45: 3/33] jsapi-util: Add static function spec to GJS_DEFINE_PROTO



commit f3ba36399d81f32ef3467048987ff3092abcb23a
Author: Philip Chimento <philip chimento gmail com>
Date:   Mon Apr 10 22:09:53 2017 -0700

    jsapi-util: Add static function spec to GJS_DEFINE_PROTO
    
    This allows the GJS_DEFINE_PROTO_* family of macros to have a JSFunctionSpec
    array for functions defined on the constructor, rather than on the
    prototype: i.e. static functions.
    
    We clean up an incongruity in cairo-image-surface.cpp where you had to pass
    the constructor into gjs_cairo_image_surface_init() in order to get the
    static functions defined.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=614413

 gi/gtype.cpp                      |    2 ++
 gjs/jsapi-class.h                 |    4 +++-
 modules/cairo-context.cpp         |    2 ++
 modules/cairo-gradient.cpp        |    2 ++
 modules/cairo-image-surface.cpp   |   14 +++++---------
 modules/cairo-linear-gradient.cpp |    2 ++
 modules/cairo-path.cpp            |    2 ++
 modules/cairo-pattern.cpp         |    2 ++
 modules/cairo-pdf-surface.cpp     |    2 ++
 modules/cairo-ps-surface.cpp      |    2 ++
 modules/cairo-radial-gradient.cpp |    2 ++
 modules/cairo-region.cpp          |    2 ++
 modules/cairo-solid-pattern.cpp   |    2 ++
 modules/cairo-surface-pattern.cpp |    2 ++
 modules/cairo-surface.cpp         |    2 ++
 modules/cairo-svg-surface.cpp     |    2 ++
 modules/cairo.cpp                 |    7 +------
 17 files changed, 37 insertions(+), 16 deletions(-)
---
diff --git a/gi/gtype.cpp b/gi/gtype.cpp
index bfd8d2c..d1d5669 100644
--- a/gi/gtype.cpp
+++ b/gi/gtype.cpp
@@ -145,6 +145,8 @@ JSFunctionSpec gjs_gtype_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_gtype_static_funcs[] = { JS_FS_END };
+
 JSObject *
 gjs_gtype_create_gtype_wrapper (JSContext *context,
                                 GType      gtype)
diff --git a/gjs/jsapi-class.h b/gjs/jsapi-class.h
index 86371fa..2a5984a 100644
--- a/gjs/jsapi-class.h
+++ b/gjs/jsapi-class.h
@@ -167,6 +167,7 @@ _GJS_DEFINE_PROTO_FULL(tn, cn, parent_cn, nullptr, G_TYPE_NONE, flags)
 #define _GJS_DEFINE_PROTO_FULL(type_name, cname, parent_cname, ctor, gtype, jsclass_flags) \
 extern JSPropertySpec gjs_##cname##_proto_props[];                           \
 extern JSFunctionSpec gjs_##cname##_proto_funcs[];                           \
+extern JSFunctionSpec gjs_##cname##_static_funcs[];                          \
 static void gjs_##cname##_finalize(JSFreeOp *fop, JSObject *obj);            \
 static struct JSClass gjs_##cname##_class = {                                \
     type_name,                                                               \
@@ -215,7 +216,8 @@ gjs_##cname##_define_proto(JSContext              *cx,                       \
     JS::RootedObject parent_proto(cx, gjs_##parent_cname##_get_proto(cx));   \
     proto.set(JS_InitClass(cx, in_obj, parent_proto, &gjs_##cname##_class,   \
                            ctor, 0, gjs_##cname##_proto_props,               \
-                           gjs_##cname##_proto_funcs, nullptr, nullptr));    \
+                           gjs_##cname##_proto_funcs, nullptr,               \
+                           gjs_##cname##_static_funcs));                     \
     if (!proto)                                                              \
         return false;                                                        \
     gjs_set_global_slot(cx, GJS_GLOBAL_SLOT_PROTOTYPE_##cname,               \
diff --git a/modules/cairo-context.cpp b/modules/cairo-context.cpp
index cc43992..f74d95f 100644
--- a/modules/cairo-context.cpp
+++ b/modules/cairo-context.cpp
@@ -923,6 +923,8 @@ JSFunctionSpec gjs_cairo_context_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_context_static_funcs[] = { JS_FS_END };
+
 JSObject *
 gjs_cairo_context_from_context(JSContext *context,
                                cairo_t *cr)
diff --git a/modules/cairo-gradient.cpp b/modules/cairo-gradient.cpp
index b551d34..76b311d 100644
--- a/modules/cairo-gradient.cpp
+++ b/modules/cairo-gradient.cpp
@@ -107,3 +107,5 @@ JSFunctionSpec gjs_cairo_gradient_proto_funcs[] = {
     // getColorStopRGBA
     JS_FS_END
 };
+
+JSFunctionSpec gjs_cairo_gradient_static_funcs[] = { JS_FS_END };
diff --git a/modules/cairo-image-surface.cpp b/modules/cairo-image-surface.cpp
index cca5256..90bbff3 100644
--- a/modules/cairo-image-surface.cpp
+++ b/modules/cairo-image-surface.cpp
@@ -212,6 +212,11 @@ JSFunctionSpec gjs_cairo_image_surface_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_image_surface_static_funcs[] = {
+    JS_FS("createFromPNG", createFromPNG_func, 1, GJS_MODULE_PROP_FLAGS),
+    JS_FS_END
+};
+
 JSObject *
 gjs_cairo_image_surface_from_surface(JSContext       *context,
                                      cairo_surface_t *surface)
@@ -234,12 +239,3 @@ gjs_cairo_image_surface_from_surface(JSContext       *context,
     return object;
 }
 
-void
-gjs_cairo_image_surface_init(JSContext       *cx,
-                             JS::HandleObject proto)
-{
-
-    if (!JS_DefineFunction(cx, proto, "createFromPNG", createFromPNG_func,
-                           1, GJS_MODULE_PROP_FLAGS))
-        return;
-}
diff --git a/modules/cairo-linear-gradient.cpp b/modules/cairo-linear-gradient.cpp
index cbe6be7..8d7d44c 100644
--- a/modules/cairo-linear-gradient.cpp
+++ b/modules/cairo-linear-gradient.cpp
@@ -77,6 +77,8 @@ JSFunctionSpec gjs_cairo_linear_gradient_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_linear_gradient_static_funcs[] = { JS_FS_END };
+
 JSObject *
 gjs_cairo_linear_gradient_from_pattern(JSContext       *context,
                                        cairo_pattern_t *pattern)
diff --git a/modules/cairo-path.cpp b/modules/cairo-path.cpp
index dbd990e..a62cc43 100644
--- a/modules/cairo-path.cpp
+++ b/modules/cairo-path.cpp
@@ -60,6 +60,8 @@ JSFunctionSpec gjs_cairo_path_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_path_static_funcs[] = { JS_FS_END };
+
 /**
  * gjs_cairo_path_from_path:
  * @context: the context
diff --git a/modules/cairo-pattern.cpp b/modules/cairo-pattern.cpp
index fbdb583..f82fbb9 100644
--- a/modules/cairo-pattern.cpp
+++ b/modules/cairo-pattern.cpp
@@ -91,6 +91,8 @@ JSFunctionSpec gjs_cairo_pattern_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_pattern_static_funcs[] = { JS_FS_END };
+
 /* Public API */
 
 /**
diff --git a/modules/cairo-pdf-surface.cpp b/modules/cairo-pdf-surface.cpp
index b1dc925..eceff27 100644
--- a/modules/cairo-pdf-surface.cpp
+++ b/modules/cairo-pdf-surface.cpp
@@ -83,6 +83,8 @@ JSFunctionSpec gjs_cairo_pdf_surface_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_pdf_surface_static_funcs[] = { JS_FS_END };
+
 JSObject *
 gjs_cairo_pdf_surface_from_surface(JSContext       *context,
                                    cairo_surface_t *surface)
diff --git a/modules/cairo-ps-surface.cpp b/modules/cairo-ps-surface.cpp
index b1051ed..b241c5e 100644
--- a/modules/cairo-ps-surface.cpp
+++ b/modules/cairo-ps-surface.cpp
@@ -92,6 +92,8 @@ JSFunctionSpec gjs_cairo_ps_surface_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_ps_surface_static_funcs[] = { JS_FS_END };
+
 JSObject *
 gjs_cairo_ps_surface_from_surface(JSContext       *context,
                                   cairo_surface_t *surface)
diff --git a/modules/cairo-radial-gradient.cpp b/modules/cairo-radial-gradient.cpp
index 7c54f51..356c4cf 100644
--- a/modules/cairo-radial-gradient.cpp
+++ b/modules/cairo-radial-gradient.cpp
@@ -79,6 +79,8 @@ JSFunctionSpec gjs_cairo_radial_gradient_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_radial_gradient_static_funcs[] = { JS_FS_END };
+
 JSObject *
 gjs_cairo_radial_gradient_from_pattern(JSContext       *context,
                                        cairo_pattern_t *pattern)
diff --git a/modules/cairo-region.cpp b/modules/cairo-region.cpp
index 23eb31a..19029e0 100644
--- a/modules/cairo-region.cpp
+++ b/modules/cairo-region.cpp
@@ -227,6 +227,8 @@ JSFunctionSpec gjs_cairo_region_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_region_static_funcs[] = { JS_FS_END };
+
 static void
 _gjs_cairo_region_construct_internal(JSContext       *context,
                                      JS::HandleObject obj,
diff --git a/modules/cairo-solid-pattern.cpp b/modules/cairo-solid-pattern.cpp
index edd91b7..0a0a50b 100644
--- a/modules/cairo-solid-pattern.cpp
+++ b/modules/cairo-solid-pattern.cpp
@@ -108,6 +108,8 @@ JSFunctionSpec gjs_cairo_solid_pattern_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_solid_pattern_static_funcs[] = { JS_FS_END };
+
 JSObject *
 gjs_cairo_solid_pattern_from_pattern(JSContext       *context,
                                      cairo_pattern_t *pattern)
diff --git a/modules/cairo-surface-pattern.cpp b/modules/cairo-surface-pattern.cpp
index fcf289d..232e8a8 100644
--- a/modules/cairo-surface-pattern.cpp
+++ b/modules/cairo-surface-pattern.cpp
@@ -182,6 +182,8 @@ JSFunctionSpec gjs_cairo_surface_pattern_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_surface_pattern_static_funcs[] = { JS_FS_END };
+
 JSObject *
 gjs_cairo_surface_pattern_from_pattern(JSContext       *context,
                                        cairo_pattern_t *pattern)
diff --git a/modules/cairo-surface.cpp b/modules/cairo-surface.cpp
index 5d31e4b..bcc4f54 100644
--- a/modules/cairo-surface.cpp
+++ b/modules/cairo-surface.cpp
@@ -129,6 +129,8 @@ JSFunctionSpec gjs_cairo_surface_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_surface_static_funcs[] = { JS_FS_END };
+
 /* Public API */
 
 /**
diff --git a/modules/cairo-svg-surface.cpp b/modules/cairo-svg-surface.cpp
index 2a409eb..a89db66 100644
--- a/modules/cairo-svg-surface.cpp
+++ b/modules/cairo-svg-surface.cpp
@@ -83,6 +83,8 @@ JSFunctionSpec gjs_cairo_svg_surface_proto_funcs[] = {
     JS_FS_END
 };
 
+JSFunctionSpec gjs_cairo_svg_surface_static_funcs[] = { JS_FS_END };
+
 JSObject *
 gjs_cairo_svg_surface_from_surface(JSContext       *context,
                                    cairo_surface_t *surface)
diff --git a/modules/cairo.cpp b/modules/cairo.cpp
index d414b6a..03f2546 100644
--- a/modules/cairo.cpp
+++ b/modules/cairo.cpp
@@ -74,13 +74,8 @@ gjs_js_define_cairo_stuff(JSContext              *context,
         return false;
     gjs_cairo_surface_init(context);
 
-    JS::RootedObject image_surface_proto(context);
-    if (!gjs_cairo_image_surface_define_proto(context, module,
-                                              &image_surface_proto))
-        return false;
-    gjs_cairo_image_surface_init(context, image_surface_proto);
-
     return
+        gjs_cairo_image_surface_define_proto(context, module, &proto) &&
         gjs_cairo_path_define_proto(context, module, &proto) &&
 #if CAIRO_HAS_PS_SURFACE
         gjs_cairo_ps_surface_define_proto(context, module, &proto) &&


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