summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Dahlin <johan@src.gnome.org>2008-08-07 12:36:23 +0000
committerJohan Dahlin <johan@src.gnome.org>2008-08-07 12:36:23 +0000
commitf62744c06e8e2f557209e2a9c506d4ee5dbeb9da (patch)
tree6dcbc91d709d70669da895847229e0ac36569814
parent5cf836d0ef66fb06456652d6cbf76f0d530acd30 (diff)
downloadgobject-introspection-f62744c06e8e2f557209e2a9c506d4ee5dbeb9da.tar.gz
Add GirNodeTypeId and GITypeTag struct marshalling functions for easy debugging
svn path=/branches/gir-compiler/; revision=313
-rw-r--r--tools/girnode.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/tools/girnode.c b/tools/girnode.c
index 5fa112e2..85a1c1cb 100644
--- a/tools/girnode.c
+++ b/tools/girnode.c
@@ -56,6 +56,116 @@ dump_stats (void)
(( ((unsigned long)(this)) + (((unsigned long)(boundary)) -1)) & (~(((unsigned long)(boundary))-1)))
+static const gchar *
+g_ir_node_type_to_string (GIrNodeTypeId type)
+{
+ switch (type)
+ {
+ case G_IR_NODE_FUNCTION:
+ return "function";
+ case G_IR_NODE_CALLBACK:
+ return "callback";
+ case G_IR_NODE_PARAM:
+ return "param";
+ case G_IR_NODE_TYPE:
+ return "type";
+ case G_IR_NODE_OBJECT:
+ return "object";
+ case G_IR_NODE_INTERFACE:
+ return "interface";
+ case G_IR_NODE_SIGNAL:
+ return "signal";
+ case G_IR_NODE_PROPERTY:
+ return "property";
+ case G_IR_NODE_VFUNC:
+ return "vfunc";
+ case G_IR_NODE_FIELD:
+ return "field";
+ case G_IR_NODE_ENUM:
+ return "enum";
+ case G_IR_NODE_FLAGS:
+ return "flags";
+ case G_IR_NODE_BOXED:
+ return "boxed";
+ case G_IR_NODE_STRUCT:
+ return "struct";
+ case G_IR_NODE_VALUE:
+ return "value";
+ case G_IR_NODE_CONSTANT:
+ return "constant";
+ case G_IR_NODE_ERROR_DOMAIN:
+ return "error-domain";
+ case G_IR_NODE_XREF:
+ return "xref";
+ case G_IR_NODE_UNION:
+ return "union";
+ default:
+ return "unknown";
+ }
+}
+
+static const gchar*
+gi_type_tag_to_string (GITypeTag type)
+{
+ switch (type)
+ {
+ case GI_TYPE_TAG_VOID:
+ return "void";
+ case GI_TYPE_TAG_BOOLEAN:
+ return "boolean";
+ case GI_TYPE_TAG_INT8:
+ return "int8";
+ case GI_TYPE_TAG_UINT8:
+ return "uint8";
+ case GI_TYPE_TAG_INT16:
+ return "int16";
+ case GI_TYPE_TAG_UINT16:
+ return "uint16";
+ case GI_TYPE_TAG_INT32:
+ return "int32";
+ case GI_TYPE_TAG_UINT32:
+ return "uint32";
+ case GI_TYPE_TAG_INT64:
+ return "int64";
+ case GI_TYPE_TAG_UINT64:
+ return "uint64";
+ case GI_TYPE_TAG_INT:
+ return "int";
+ case GI_TYPE_TAG_UINT:
+ return "uint";
+ case GI_TYPE_TAG_LONG:
+ return "long";
+ case GI_TYPE_TAG_ULONG:
+ return "ulong";
+ case GI_TYPE_TAG_SSIZE:
+ return "ssize";
+ case GI_TYPE_TAG_SIZE:
+ return "size";
+ case GI_TYPE_TAG_FLOAT:
+ return "float";
+ case GI_TYPE_TAG_DOUBLE:
+ return "double";
+ case GI_TYPE_TAG_UTF8:
+ return "utf8";
+ case GI_TYPE_TAG_FILENAME:
+ return "filename";
+ case GI_TYPE_TAG_ARRAY:
+ return "array";
+ case GI_TYPE_TAG_INTERFACE:
+ return "interface";
+ case GI_TYPE_TAG_GLIST:
+ return "glist";
+ case GI_TYPE_TAG_GSLIST:
+ return "gslist";
+ case GI_TYPE_TAG_GHASH:
+ return "ghash";
+ case GI_TYPE_TAG_ERROR:
+ return "error";
+ default:
+ return "unknown";
+ }
+}
+
GIrNode *
g_ir_node_new (GIrNodeTypeId type)
{
@@ -493,6 +603,9 @@ g_ir_node_get_full_size (GIrNode *node)
g_assert (node != NULL);
+ g_printerr ("node %p type %s\n", node,
+ g_ir_node_type_to_string (node->type));
+
switch (node->type)
{
case G_IR_NODE_CALLBACK:
@@ -536,6 +649,9 @@ g_ir_node_get_full_size (GIrNode *node)
size = 4;
else
{
+ g_printerr ("node %p type tag %s\n", node,
+ gi_type_tag_to_string (type->tag));
+
switch (type->tag)
{
case TYPE_TAG_ARRAY: