Correctly handle GLib.List, GLib.Error etc
authorColin Walters <walters@src.gnome.org>
Fri, 29 Aug 2008 18:19:26 +0000 (18:19 +0000)
committerColin Walters <walters@src.gnome.org>
Fri, 29 Aug 2008 18:19:26 +0000 (18:19 +0000)
* girepository/girparser.c: Accept both List (for
compiling GLib) and GLib.List (what the scanner
generates).
* tests/ - Update.
* tools/generate.c: Generate canonical form.

svn path=/trunk/; revision=522

girepository/girparser.c
tests/boxed.gir
tests/invoke/testfns.gir
tools/generate.c

index f357cb1..0e7c030 100644 (file)
@@ -337,22 +337,26 @@ parse_type_internal (gchar *str, gchar **rest)
 
   if (i < n_basic)
     /* found a basic type */;
-  else if (g_str_has_prefix (*rest, "GList") ||
-          g_str_has_prefix (*rest, "GSList"))
+  else if (g_str_has_prefix (*rest, "GLib.List") ||
+          g_str_has_prefix (*rest, "GLib.SList") ||
+          g_str_has_prefix (*rest, "List") ||
+          g_str_has_prefix (*rest, "SList"))
     {
-      if (g_str_has_prefix (*rest, "GList"))
+      if (g_str_has_prefix (*rest, "GLib."))
+       *rest += strlen ("GLib.");
+      if (g_str_has_prefix (*rest, "List"))
        {
          type->tag = GI_TYPE_TAG_GLIST;
          type->is_glist = TRUE;
          type->is_pointer = TRUE;
-         *rest += strlen ("GList");
+         *rest += strlen ("List");
        }
       else
        {
          type->tag = GI_TYPE_TAG_GSLIST;
          type->is_gslist = TRUE;
          type->is_pointer = TRUE;
-         *rest += strlen ("GSList");
+         *rest += strlen ("SList");
        }
       
       *rest = g_strchug (*rest);
@@ -376,12 +380,16 @@ parse_type_internal (gchar *str, gchar **rest)
          type->parameter_type1 = create_pointer ();
        }
     }
-  else if (g_str_has_prefix (*rest, "GHashTable"))
+  else if (g_str_has_prefix (*rest, "HashTable") ||
+          g_str_has_prefix (*rest, "GLib.HashTable"))
     {
+      if (g_str_has_prefix (*rest, "GLib."))
+       *rest += strlen ("GLib.");
+
       type->tag = GI_TYPE_TAG_GHASH;
       type->is_ghashtable = TRUE;
       type->is_pointer = TRUE;
-      *rest += strlen ("GHashTable");
+      *rest += strlen ("HashTable");
       
       *rest = g_strchug (*rest);
       
@@ -414,8 +422,12 @@ parse_type_internal (gchar *str, gchar **rest)
        }
 
     }
-  else if (g_str_has_prefix (*rest, "GError"))
+  else if (g_str_has_prefix (*rest, "GLib.Error")
+          || g_str_has_prefix (*rest, "Error"))
     {
+      if (g_str_has_prefix (*rest, "GLib."))
+       *rest += strlen ("GLib.");
+
       type->tag = GI_TYPE_TAG_ERROR;
       type->is_error = TRUE;
       type->is_pointer = TRUE;
index 70ca0e3..8b680ae 100644 (file)
             <type name="BoxedType1"/>
           </parameter>
           <parameter name="w" direction="in">
-            <type name="GList<boxed2>"/>
+            <type name="GLib.List<boxed2>"/>
           </parameter>
           <parameter name="t" transfer="full" direction="in">
-            <type name="GHashTable<utf8,int64>"/>
+            <type name="GLib.HashTable<utf8,int64>"/>
           </parameter>
           <parameter name="e" transfer="full" direction="out">
-            <type name="GError"/>
+            <type name="GLib.Error"/>
           </parameter>
         </parameters>
       </method>
index df323c9..3067bcd 100755 (executable)
@@ -71,7 +71,7 @@
       </return-value>
       <parameters>
         <parameter name="list" direction="in">
-          <type name="GList<gint>*" c:type="GList*"/>
+          <type name="GLib.List<gint>*" c:type="GList*"/>
         </parameter>
       </parameters>
     </function>
@@ -83,7 +83,7 @@
       </return-value>
       <parameters>
         <parameter name="list" direction="in">
-          <type name="GList<utf8>*" c:type="GList*"/>
+          <type name="GLib.List<utf8>*" c:type="GList*"/>
         </parameter>
       </parameters>
     </function>
index 02152df..40c497b 100644 (file)
@@ -107,7 +107,7 @@ write_type_info (const gchar *namespace,
   else if (tag == 22)
     {
       type = g_type_info_get_param_type (info, 0);
-      g_fprintf (file, "GList");
+      g_fprintf (file, "GLib.List");
       if (type)
        {
          g_fprintf (file, "<"); 
@@ -119,7 +119,7 @@ write_type_info (const gchar *namespace,
   else if (tag == 23)
     {
       type = g_type_info_get_param_type (info, 0);
-      g_fprintf (file, "GSList");
+      g_fprintf (file, "GLib.SList");
       if (type)
        {
          g_fprintf (file, "<"); 
@@ -131,7 +131,7 @@ write_type_info (const gchar *namespace,
   else if (tag == 24)
     {
       type = g_type_info_get_param_type (info, 0);
-      g_fprintf (file, "GHashTable");
+      g_fprintf (file, "GLib.HashTable");
       if (type)
        {
          g_fprintf (file, "<"); 
@@ -148,7 +148,7 @@ write_type_info (const gchar *namespace,
     {
       gint n;
 
-      g_fprintf (file, "GError");
+      g_fprintf (file, "GLib.Error");
       n = g_type_info_get_n_error_domains (info);
       if (n > 0)
        {