[gjs] gi/private: Use more modern template functions to define symbol getters
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs] gi/private: Use more modern template functions to define symbol getters
- Date: Thu, 21 May 2020 05:02:19 +0000 (UTC)
commit 182db2d1e725e223e10634c5bd22947dbd32adec
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date: Mon May 11 15:47:41 2020 +0200
gi/private: Use more modern template functions to define symbol getters
No need to use macros when C++ gives us the ability to access to object
memers easily
gi/private.cpp | 38 +++++++++++++++-----------------------
1 file changed, 15 insertions(+), 23 deletions(-)
---
diff --git a/gi/private.cpp b/gi/private.cpp
index 36c53ad4..81760e18 100644
--- a/gi/private.cpp
+++ b/gi/private.cpp
@@ -414,23 +414,15 @@ static bool gjs_signal_new(JSContext* cx, unsigned argc, JS::Value* vp) {
return true;
}
-#define DEFINE_SYMBOL_ATOM_GETTER(symbol_name) \
- GJS_JSAPI_RETURN_CONVENTION \
- static bool symbol_name##_symbol_getter(JSContext* cx, unsigned argc, \
- JS::Value* vp) { \
- JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \
- const GjsAtoms& atoms = GjsContextPrivate::atoms(cx); \
- args.rval().setSymbol(JSID_TO_SYMBOL(atoms.symbol_name())); \
- return true; \
- }
-
-DEFINE_SYMBOL_ATOM_GETTER(hook_up_vfunc)
-DEFINE_SYMBOL_ATOM_GETTER(signal_find)
-DEFINE_SYMBOL_ATOM_GETTER(signals_block)
-DEFINE_SYMBOL_ATOM_GETTER(signals_unblock)
-DEFINE_SYMBOL_ATOM_GETTER(signals_disconnect)
-
-#undef DEFINE_SYMBOL_ATOM_GETTER
+template <GjsSymbolAtom GjsAtoms::*member>
+GJS_JSAPI_RETURN_CONVENTION static bool symbol_getter(JSContext* cx,
+ unsigned argc,
+ JS::Value* vp) {
+ JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
+ const GjsAtoms& atoms = GjsContextPrivate::atoms(cx);
+ args.rval().setSymbol(JSID_TO_SYMBOL((atoms.*member)()));
+ return true;
+}
static JSFunctionSpec module_funcs[] = {
JS_FN("override_property", gjs_override_property, 2, GJS_MODULE_PROP_FLAGS),
@@ -442,16 +434,16 @@ static JSFunctionSpec module_funcs[] = {
};
static JSPropertySpec module_props[] = {
- JS_PSG("hook_up_vfunc_symbol", hook_up_vfunc_symbol_getter,
- GJS_MODULE_PROP_FLAGS),
- JS_PSG("signal_find_symbol", signal_find_symbol_getter,
+ JS_PSG("hook_up_vfunc_symbol", symbol_getter<&GjsAtoms::hook_up_vfunc>,
GJS_MODULE_PROP_FLAGS),
- JS_PSG("signals_block_symbol", signals_block_symbol_getter,
+ JS_PSG("signal_find_symbol", symbol_getter<&GjsAtoms::signal_find>,
GJS_MODULE_PROP_FLAGS),
- JS_PSG("signals_unblock_symbol", signals_unblock_symbol_getter,
+ JS_PSG("signals_block_symbol", symbol_getter<&GjsAtoms::signals_block>,
GJS_MODULE_PROP_FLAGS),
- JS_PSG("signals_disconnect_symbol", signals_disconnect_symbol_getter,
+ JS_PSG("signals_unblock_symbol", symbol_getter<&GjsAtoms::signals_unblock>,
GJS_MODULE_PROP_FLAGS),
+ JS_PSG("signals_disconnect_symbol",
+ symbol_getter<&GjsAtoms::signals_disconnect>, GJS_MODULE_PROP_FLAGS),
JS_PS_END};
bool gjs_define_private_gi_stuff(JSContext* cx,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]