[gjs/wip/ptomato/mozjs45: 3/33] jsapi-util: Add static function spec to GJS_DEFINE_PROTO
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs/wip/ptomato/mozjs45: 3/33] jsapi-util: Add static function spec to GJS_DEFINE_PROTO
- Date: Mon, 17 Apr 2017 07:26:54 +0000 (UTC)
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]