[gjs: 2/3] gi: Mark more functions using gjs_arg_* constexpr




commit 1c31d66b4e21d377e390ef8d2638e20c35cce890
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Thu Jun 2 04:31:15 2022 +0200

    gi: Mark more functions using gjs_arg_* constexpr

 gi/arg-cache.cpp | 35 ++++++-----------------------------
 gi/arg-cache.h   |  4 ----
 gi/arg-inl.h     | 26 ++++++++++++++++++++++++++
 3 files changed, 32 insertions(+), 33 deletions(-)
---
diff --git a/gi/arg-cache.cpp b/gi/arg-cache.cpp
index 1ec48c948..b1cd75c75 100644
--- a/gi/arg-cache.cpp
+++ b/gi/arg-cache.cpp
@@ -6,6 +6,7 @@
 #include <config.h>
 
 #include <inttypes.h>
+#include <stddef.h>  // for size_t
 #include <stdint.h>
 #include <string.h>
 
@@ -61,34 +62,9 @@ static const char* expected_type_names[] = {"object", "function", "string"};
 static_assert(G_N_ELEMENTS(expected_type_names) == ExpectedType::LAST,
               "Names must match the values in ExpectedType");
 
-// A helper function to retrieve array lengths from a GIArgument (letting the
-// compiler generate good instructions in case of big endian machines)
-[[nodiscard]] size_t gjs_g_argument_get_array_length(GITypeTag tag,
-                                                     GIArgument* arg) {
-    switch (tag) {
-        case GI_TYPE_TAG_INT8:
-            return gjs_arg_get<int8_t>(arg);
-        case GI_TYPE_TAG_UINT8:
-            return gjs_arg_get<uint8_t>(arg);
-        case GI_TYPE_TAG_INT16:
-            return gjs_arg_get<int16_t>(arg);
-        case GI_TYPE_TAG_UINT16:
-            return gjs_arg_get<uint16_t>(arg);
-        case GI_TYPE_TAG_INT32:
-            return gjs_arg_get<int32_t>(arg);
-        case GI_TYPE_TAG_UINT32:
-            return gjs_arg_get<uint32_t>(arg);
-        case GI_TYPE_TAG_INT64:
-            return gjs_arg_get<int64_t>(arg);
-        case GI_TYPE_TAG_UINT64:
-            return gjs_arg_get<uint64_t>(arg);
-        default:
-            g_assert_not_reached();
-    }
-}
-
-static void gjs_g_argument_set_array_length(GITypeTag tag, GIArgument* arg,
-                                            size_t value) {
+static constexpr void gjs_g_argument_set_array_length(GITypeTag tag,
+                                                      GIArgument* arg,
+                                                      size_t value) {
     switch (tag) {
         case GI_TYPE_TAG_INT8:
             gjs_arg_set<int8_t>(arg, value);
@@ -208,7 +184,8 @@ struct Positioned {
         m_arg_pos = pos;
     }
 
-    bool set_out_parameter(GjsFunctionCallState* state, GIArgument* arg) {
+    constexpr bool set_out_parameter(GjsFunctionCallState* state,
+                                     GIArgument* arg) {
         gjs_arg_unset<void*>(&state->out_cvalue(m_arg_pos));
         gjs_arg_set(arg, &gjs_arg_member<void*>(&state->out_cvalue(m_arg_pos)));
         return true;
diff --git a/gi/arg-cache.h b/gi/arg-cache.h
index 2a02869ba..ae73971dc 100644
--- a/gi/arg-cache.h
+++ b/gi/arg-cache.h
@@ -8,7 +8,6 @@
 
 #include <config.h>
 
-#include <stddef.h>
 #include <stdint.h>
 
 #include <limits>
@@ -231,7 +230,4 @@ struct ArgsCache {
 
 }  // namespace Gjs
 
-[[nodiscard]] size_t gjs_g_argument_get_array_length(GITypeTag tag,
-                                                     GIArgument* arg);
-
 #endif  // GI_ARG_CACHE_H_
diff --git a/gi/arg-inl.h b/gi/arg-inl.h
index 06fbbeb37..5b2408e1c 100644
--- a/gi/arg-inl.h
+++ b/gi/arg-inl.h
@@ -211,3 +211,29 @@ GJS_JSAPI_RETURN_CONVENTION inline bool gjs_arg_set_from_js_value(
 
     return true;
 }
+
+// A helper function to retrieve array lengths from a GIArgument (letting the
+// compiler generate good instructions in case of big endian machines)
+[[nodiscard]] constexpr size_t gjs_g_argument_get_array_length(
+    GITypeTag tag, GIArgument* arg) {
+    switch (tag) {
+        case GI_TYPE_TAG_INT8:
+            return gjs_arg_get<int8_t>(arg);
+        case GI_TYPE_TAG_UINT8:
+            return gjs_arg_get<uint8_t>(arg);
+        case GI_TYPE_TAG_INT16:
+            return gjs_arg_get<int16_t>(arg);
+        case GI_TYPE_TAG_UINT16:
+            return gjs_arg_get<uint16_t>(arg);
+        case GI_TYPE_TAG_INT32:
+            return gjs_arg_get<int32_t>(arg);
+        case GI_TYPE_TAG_UINT32:
+            return gjs_arg_get<uint32_t>(arg);
+        case GI_TYPE_TAG_INT64:
+            return gjs_arg_get<int64_t>(arg);
+        case GI_TYPE_TAG_UINT64:
+            return gjs_arg_get<uint64_t>(arg);
+        default:
+            g_assert_not_reached();
+    }
+}


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