[gjs: 5/9] arg-cache: Move generic out in function to Positioned, simplify ArrayLengthOut




commit 7bcdf92b28601a35520bdd6c9e4d61d4d5266b23
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Mon Oct 26 02:12:11 2020 +0100

    arg-cache: Move generic out in function to Positioned, simplify ArrayLengthOut
    
    We can avoid making ArrayLengthOut inherit from GenericOut so that it
    doesn't have to bring all the unneeded data. It only cares about being
    positioned.

 gi/arg-cache.cpp | 28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)
---
diff --git a/gi/arg-cache.cpp b/gi/arg-cache.cpp
index 67eb60af..91d00c8c 100644
--- a/gi/arg-cache.cpp
+++ b/gi/arg-cache.cpp
@@ -196,6 +196,12 @@ struct Positioned {
         m_arg_pos = pos;
     }
 
+    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;
+    }
+
     uint8_t m_arg_pos = 0;
 };
 
@@ -335,6 +341,13 @@ struct GenericReturn : ReturnValue {
     }
 };
 
+struct SimpleOut : SkipAll, Positioned {
+    bool in(JSContext*, GjsFunctionCallState* state, GIArgument* arg,
+            JS::HandleValue) override {
+        return set_out_parameter(state, arg);
+    };
+};
+
 struct ExplicitArray : GenericOut, Array, Nullable {
     GjsArgumentFlags flags() const override {
         return Argument::flags() | Nullable::flags();
@@ -377,16 +390,7 @@ struct ReturnArray : ExplicitArrayOut {
     };
 };
 
-struct ArrayLengthOut : GenericOut {
-    bool out(JSContext*, GjsFunctionCallState*, GIArgument*,
-             JS::MutableHandleValue) override {
-        return skip();
-    }
-    bool release(JSContext*, GjsFunctionCallState*, GIArgument*,
-                 GIArgument*) override {
-        return skip();
-    }
-};
+using ArrayLengthOut = SimpleOut;
 
 struct FallbackIn : GenericIn, Nullable {
     bool out(JSContext*, GjsFunctionCallState*, GIArgument*,
@@ -847,9 +851,7 @@ GJS_JSAPI_RETURN_CONVENTION
 bool GenericOut::in(JSContext*, GjsFunctionCallState* state, GIArgument* arg,
                     JS::HandleValue) {
     // Default value in case a broken C function doesn't fill in the pointer
-    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;
+    return set_out_parameter(state, arg);
 }
 
 GJS_JSAPI_RETURN_CONVENTION


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