summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Hervey <bilboed@bilboed.com>2009-12-01 22:09:00 +0100
committerEdward Hervey <bilboed@bilboed.com>2009-12-29 13:13:23 +0100
commit11586629bf07a528c98f184c32b13adcd8f33b9b (patch)
treed6fa7fe00d8a0b8bf9648e80d366de70c4032131
parentcb681a0702924c90d01c303c286322f9f001b2af (diff)
g_value_object_collect_value: Use faster argument checking.
The argument were already checked in the caller of this function (g_value_set_pointer). This shaves 20% cpu time of the call of this method.
-rw-r--r--gobject/gobject.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gobject/gobject.c b/gobject/gobject.c
index 9631e7581..66b532a80 100644
--- a/gobject/gobject.c
+++ b/gobject/gobject.c
@@ -2767,7 +2767,11 @@ g_value_object_collect_value (GValue *value,
G_VALUE_TYPE_NAME (value),
"'",
NULL);
- else if (!g_value_type_compatible (G_OBJECT_TYPE (object), G_VALUE_TYPE (value)))
+ /* This code previously used g_value_type_compatible which did too many checks,
+ * we replace it by the expanded unchecked version since the caller (g_value_set_instance)
+ * will have checked the validity of the arguments. */
+ else if (!g_type_is_a (G_OBJECT_TYPE (object), G_VALUE_TYPE (value)) ||
+ g_type_value_table_peek (G_OBJECT_TYPE (object)) != g_type_value_table_peek (G_VALUE_TYPE (value)))
return g_strconcat ("invalid object type `",
G_OBJECT_TYPE_NAME (object),
"' for value type `",