mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-09-28 10:07:13 +02:00
gdbus-codegen: Use direct-access GValue macros for marshallers and GValues
This is the same we're doing in code generated by glib-genmarshaller and what gmarshal does internally. Since the generated gdbus C code can be considered private too, this is safe to do, and will allow faster access to GValue objects.
This commit is contained in:
@@ -147,6 +147,51 @@ class TestCodegen(unittest.TestCase):
|
||||
"#ifdef G_OS_UNIX\n"
|
||||
"# include <gio/gunixfdlist.h>\n"
|
||||
"#endif",
|
||||
"private_gvalues_getters": """#ifdef G_ENABLE_DEBUG
|
||||
#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
|
||||
#define g_marshal_value_peek_char(v) g_value_get_schar (v)
|
||||
#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
|
||||
#define g_marshal_value_peek_int(v) g_value_get_int (v)
|
||||
#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
|
||||
#define g_marshal_value_peek_long(v) g_value_get_long (v)
|
||||
#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
|
||||
#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
|
||||
#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
|
||||
#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
|
||||
#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
|
||||
#define g_marshal_value_peek_float(v) g_value_get_float (v)
|
||||
#define g_marshal_value_peek_double(v) g_value_get_double (v)
|
||||
#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
|
||||
#define g_marshal_value_peek_param(v) g_value_get_param (v)
|
||||
#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
|
||||
#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
|
||||
#define g_marshal_value_peek_object(v) g_value_get_object (v)
|
||||
#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
|
||||
#else /* !G_ENABLE_DEBUG */
|
||||
/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
|
||||
* Do not access GValues directly in your code. Instead, use the
|
||||
* g_value_get_*() functions
|
||||
*/
|
||||
#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
|
||||
#define g_marshal_value_peek_char(v) (v)->data[0].v_int
|
||||
#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
|
||||
#define g_marshal_value_peek_int(v) (v)->data[0].v_int
|
||||
#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
|
||||
#define g_marshal_value_peek_long(v) (v)->data[0].v_long
|
||||
#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
|
||||
#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
|
||||
#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
|
||||
#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
|
||||
#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
|
||||
#define g_marshal_value_peek_float(v) (v)->data[0].v_float
|
||||
#define g_marshal_value_peek_double(v) (v)->data[0].v_double
|
||||
#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
|
||||
#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
|
||||
#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
|
||||
#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
|
||||
#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
|
||||
#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
|
||||
#endif /* !G_ENABLE_DEBUG */""",
|
||||
"standard_typedefs_and_helpers": "typedef struct\n"
|
||||
"{\n"
|
||||
" GDBusArgInfo parent_struct;\n"
|
||||
@@ -346,6 +391,8 @@ G_END_DECLS
|
||||
|
||||
{standard_header_includes}
|
||||
|
||||
{private_gvalues_getters}
|
||||
|
||||
{standard_typedefs_and_helpers}""".format(
|
||||
**result.subs
|
||||
),
|
||||
@@ -854,7 +901,7 @@ G_END_DECLS
|
||||
self.assertIs(stripped_out.count(f"{func_name} ("), 1)
|
||||
self.assertIs(
|
||||
stripped_out.count(
|
||||
f"g_value_get_{props['value_type']} (param_values + 1)"
|
||||
f"g_marshal_value_peek_{props['value_type']} (param_values + 1)"
|
||||
),
|
||||
1,
|
||||
)
|
||||
@@ -897,7 +944,7 @@ G_END_DECLS
|
||||
for props in self.ARGUMENTS_TYPES.values():
|
||||
self.assertIs(
|
||||
stripped_out.count(
|
||||
f"g_value_get_{props['value_type']} (param_values + {index})"
|
||||
f"g_marshal_value_peek_{props['value_type']} (param_values + {index})"
|
||||
),
|
||||
1,
|
||||
)
|
||||
@@ -931,7 +978,9 @@ G_END_DECLS
|
||||
self.assertIs(stripped_out.count(f"{func_name},"), 1)
|
||||
self.assertIs(stripped_out.count(f"{func_name} ("), 1)
|
||||
|
||||
self.assertIs(stripped_out.count("g_value_get_object (param_values + 1)"), 2)
|
||||
self.assertIs(
|
||||
stripped_out.count("g_marshal_value_peek_object (param_values + 1)"), 2
|
||||
)
|
||||
self.assertIs(
|
||||
stripped_out.count("g_value_set_boolean (return_value, v_return);"), 2
|
||||
)
|
||||
@@ -963,14 +1012,14 @@ G_END_DECLS
|
||||
self.assertIs(stripped_out.count(f"{func_name},"), 1)
|
||||
self.assertIs(stripped_out.count(f"{func_name} ("), 1)
|
||||
self.assertIs(
|
||||
stripped_out.count("g_value_get_object (param_values + 1)"), 1
|
||||
stripped_out.count("g_marshal_value_peek_object (param_values + 1)"), 1
|
||||
)
|
||||
self.assertIs(
|
||||
stripped_out.count("g_value_set_boolean (return_value, v_return);"), 1
|
||||
)
|
||||
self.assertIs(
|
||||
stripped_out.count(
|
||||
f"g_value_get_{props['value_type']} (param_values + 2)"
|
||||
f"g_marshal_value_peek_{props['value_type']} (param_values + 2)"
|
||||
),
|
||||
1,
|
||||
)
|
||||
@@ -1002,7 +1051,7 @@ G_END_DECLS
|
||||
self.assertIs(stripped_out.count(f"{func_name},"), 1)
|
||||
self.assertIs(stripped_out.count(f"{func_name} ("), 1)
|
||||
self.assertIs(
|
||||
stripped_out.count("g_value_get_object (param_values + 1)"), 1
|
||||
stripped_out.count("g_marshal_value_peek_object (param_values + 1)"), 1
|
||||
)
|
||||
self.assertIs(
|
||||
stripped_out.count("g_value_set_boolean (return_value, v_return);"), 1
|
||||
@@ -1040,14 +1089,15 @@ G_END_DECLS
|
||||
# Check access to MultipleArgsMethod arguments
|
||||
index = 1
|
||||
self.assertIs(
|
||||
stripped_out.count(f"g_value_get_object (param_values + {index})"), 1
|
||||
stripped_out.count(f"g_marshal_value_peek_object (param_values + {index})"),
|
||||
1,
|
||||
)
|
||||
index += 1
|
||||
|
||||
for props in self.ARGUMENTS_TYPES.values():
|
||||
self.assertIs(
|
||||
stripped_out.count(
|
||||
f"g_value_get_{props['value_type']} (param_values + {index})"
|
||||
f"g_marshal_value_peek_{props['value_type']} (param_values + {index})"
|
||||
),
|
||||
1,
|
||||
)
|
||||
@@ -1088,7 +1138,8 @@ G_END_DECLS
|
||||
# Check access to MultipleArgsMethod arguments
|
||||
index = 1
|
||||
self.assertIs(
|
||||
stripped_out.count(f"g_value_get_object (param_values + {index})"), 1
|
||||
stripped_out.count(f"g_marshal_value_peek_object (param_values + {index})"),
|
||||
1,
|
||||
)
|
||||
index += 1
|
||||
|
||||
@@ -1126,17 +1177,20 @@ G_END_DECLS
|
||||
|
||||
index = 1
|
||||
self.assertIs(
|
||||
stripped_out.count(f"g_value_get_object (param_values + {index})"), 1
|
||||
stripped_out.count(f"g_marshal_value_peek_object (param_values + {index})"),
|
||||
1,
|
||||
)
|
||||
index += 1
|
||||
|
||||
self.assertIs(
|
||||
stripped_out.count(f"g_value_get_object (param_values + {index})"), 1
|
||||
stripped_out.count(f"g_marshal_value_peek_object (param_values + {index})"),
|
||||
1,
|
||||
)
|
||||
|
||||
index += 1
|
||||
self.assertIs(
|
||||
stripped_out.count(f"g_value_get_string (param_values + {index})"), 1
|
||||
stripped_out.count(f"g_marshal_value_peek_string (param_values + {index})"),
|
||||
1,
|
||||
)
|
||||
index += 1
|
||||
|
||||
|
Reference in New Issue
Block a user