made the object/class cast checks much more descriptive, based on

Sat Mar  7 20:20:53 1998  Tim Janik  <timj@gimp.org>

        * gtk/gtkobject.c:
        (gtk_object_check_cast):
        (gtk_object_check_class_cast):
        made the object/class cast checks much more descriptive, based on
        gtk-draco-980305-2.patch.gz and gtk-draco-980306-1.patch.gz but
        optimized for common code path.

        * gtk/gtkpreview.c: added a few extra checks for the visual
        (gtk-draco-980305-0.patch.gz).

        * gdk/gdk.c (gdk_signal): abort() on a signal if G_ENABLE_DEBUG
          is defined, so we dump core (gtk-draco-980305-0.patch.gz).
This commit is contained in:
Tim Janik
1998-03-07 20:32:59 +00:00
committed by Tim Janik
parent 640c75216d
commit 124d1e5caa
13 changed files with 180 additions and 21 deletions

View File

@ -1174,20 +1174,49 @@ gtk_object_get_user_data (GtkObject *object)
* results:
*****************************************/
static gchar*
gtk_object_descriptive_type_name (GtkType type)
{
gchar *name;
name = gtk_type_name (type);
if (!name)
name = "(unknown)";
return name;
}
GtkObject*
gtk_object_check_cast (GtkObject *obj,
GtkType cast_type)
{
if (obj && obj->klass && !gtk_type_is_a (obj->klass->type, cast_type))
if (!obj)
{
gchar *from_name = gtk_type_name (obj->klass->type);
gchar *to_name = gtk_type_name (cast_type);
g_warning ("invalid cast from \"%s\" to \"%s\"",
from_name ? from_name : "(unknown)",
to_name ? to_name : "(unknown)");
g_warning ("invalid cast from (NULL) pointer to `%s'",
gtk_object_descriptive_type_name (cast_type));
return obj;
}
if (!obj->klass)
{
g_warning ("invalid unclassed pointer in cast to `%s'",
gtk_object_descriptive_type_name (cast_type));
return obj;
}
if (obj->klass->type < GTK_TYPE_OBJECT)
{
g_warning ("invalid class type `%s' in cast to `%s'",
gtk_object_descriptive_type_name (obj->klass->type),
gtk_object_descriptive_type_name (cast_type));
return obj;
}
if (!gtk_type_is_a (obj->klass->type, cast_type))
{
g_warning ("invalid cast from `%s' to `%s'",
gtk_object_descriptive_type_name (obj->klass->type),
gtk_object_descriptive_type_name (cast_type));
return obj;
}
return obj;
}
@ -1203,10 +1232,26 @@ GtkObjectClass*
gtk_object_check_class_cast (GtkObjectClass *klass,
GtkType cast_type)
{
if (klass && !gtk_type_is_a (klass->type, cast_type))
g_warning ("invalid cast from \"%sClass\" to \"%sClass\"",
gtk_type_name (klass->type),
gtk_type_name (cast_type));
if (!klass)
{
g_warning ("invalid class cast from (NULL) pointer to `%s'",
gtk_object_descriptive_type_name (cast_type));
return klass;
}
if (klass->type < GTK_TYPE_OBJECT)
{
g_warning ("invalid class type `%s' in class cast to `%s'",
gtk_object_descriptive_type_name (klass->type),
gtk_object_descriptive_type_name (cast_type));
return klass;
}
if (!gtk_type_is_a (klass->type, cast_type))
{
g_warning ("invalid class cast from `%s' to `%s'",
gtk_object_descriptive_type_name (klass->type),
gtk_object_descriptive_type_name (cast_type));
return klass;
}
return klass;
}