Merge branch 'bug552566-timet/wip'
authorColin Walters <walters@src.gnome.org>
Tue, 23 Sep 2008 18:20:25 +0000 (18:20 +0000)
committerColin Walters <walters@src.gnome.org>
Tue, 23 Sep 2008 18:20:25 +0000 (18:20 +0000)
svn path=/trunk/; revision=624

girepository/ginfo.c
girepository/ginvoke.c
girepository/girepository.c
girepository/girepository.h
girepository/girnode.c
girepository/girparser.c
giscanner/ast.py
tests/scanner/foo-expected.gir
tests/scanner/foo.c
tests/scanner/foo.h
tools/generate.c

index 943d1c7..bc38472 100644 (file)
@@ -1720,6 +1720,9 @@ g_constant_info_get_value (GIConstantInfo *info,
            case GI_TYPE_TAG_DOUBLE:
              value->v_double = *(gdouble*)&base->typelib->data[blob->offset];
              break;
+           case GI_TYPE_TAG_TIME_T:
+             value->v_long = *(long*)&base->typelib->data[blob->offset];
+             break;
            case GI_TYPE_TAG_INT:
              value->v_int = *(gint*)&base->typelib->data[blob->offset];
              break;
index 919ca88..bbf152b 100644 (file)
@@ -89,6 +89,7 @@ get_ffi_type (GITypeInfo *info)
        rettype = &ffi_type_slong;
        break;
       case GI_TYPE_TAG_SIZE: /* FIXME */
+      case GI_TYPE_TAG_TIME_T: /* May not be portable */
       case GI_TYPE_TAG_ULONG:
        rettype = &ffi_type_ulong;
        break;
index 5320fd9..2517027 100644 (file)
@@ -748,6 +748,8 @@ g_type_tag_to_string (GITypeTag type)
       return "float";
     case GI_TYPE_TAG_DOUBLE:
       return "double";
+    case GI_TYPE_TAG_TIME_T:
+      return "time_t";
     case GI_TYPE_TAG_UTF8:
       return "utf8";
     case GI_TYPE_TAG_FILENAME:
index 0a7bbb7..d3f6818 100644 (file)
@@ -285,14 +285,15 @@ typedef enum {
   GI_TYPE_TAG_SIZE      = 15,
   GI_TYPE_TAG_FLOAT     = 16,
   GI_TYPE_TAG_DOUBLE    = 17,
-  GI_TYPE_TAG_UTF8      = 18,
-  GI_TYPE_TAG_FILENAME  = 19,
-  GI_TYPE_TAG_ARRAY     = 20,
-  GI_TYPE_TAG_INTERFACE = 21,
-  GI_TYPE_TAG_GLIST     = 22,
-  GI_TYPE_TAG_GSLIST    = 23,
-  GI_TYPE_TAG_GHASH     = 24,
-  GI_TYPE_TAG_ERROR     = 25
+  GI_TYPE_TAG_TIME_T    = 18,
+  GI_TYPE_TAG_UTF8      = 19,
+  GI_TYPE_TAG_FILENAME  = 20,
+  GI_TYPE_TAG_ARRAY     = 21,
+  GI_TYPE_TAG_INTERFACE = 22,
+  GI_TYPE_TAG_GLIST     = 23,
+  GI_TYPE_TAG_GSLIST    = 24,
+  GI_TYPE_TAG_GHASH     = 25,
+  GI_TYPE_TAG_ERROR     = 26
 } GITypeTag;
 
 const gchar*           g_type_tag_to_string            (GITypeTag   type);
index 47d40e1..fe618ad 100644 (file)
@@ -2117,6 +2117,7 @@ g_ir_node_build_typelib (GIrNode    *node,
            *(glong*)&data[blob->offset] = (glong) parse_int_value (constant->value);
            break;
          case GI_TYPE_TAG_SIZE: /* FIXME */
+         case GI_TYPE_TAG_TIME_T: 
          case GI_TYPE_TAG_ULONG:
            blob->size = sizeof (gulong);
            *(gulong*)&data[blob->offset] = (gulong) parse_uint_value (constant->value);
index fb95903..e960fb5 100644 (file)
@@ -252,6 +252,7 @@ static BasicTypeInfo basic_types[] = {
     { "size",     GI_TYPE_TAG_SIZE,    0 },
     { "float",    GI_TYPE_TAG_FLOAT,   0 },
     { "double",   GI_TYPE_TAG_DOUBLE,  0 },
+    { "time_t",   GI_TYPE_TAG_TIME_T,  0 },
     { "utf8",     GI_TYPE_TAG_UTF8,    1 },  
     { "filename", GI_TYPE_TAG_FILENAME,1 },
 
index 7cd9073..5b53417 100644 (file)
@@ -47,6 +47,7 @@ TYPE_LONG = 'long'
 TYPE_ULONG = 'ulong'
 TYPE_SSIZET = 'ssize_t'
 TYPE_SIZET = 'size_t'
+TYPE_TIMET = 'time_t'
 TYPE_FLOAT = 'float'
 TYPE_DOUBLE = 'double'
 TYPE_STRING = 'string' # requires zero-terminated
@@ -56,7 +57,7 @@ BASIC_GIR_TYPES = [TYPE_BOOLEAN, TYPE_INT8, TYPE_UINT8, TYPE_INT16,
                    TYPE_UINT16, TYPE_INT32, TYPE_UINT32, TYPE_INT64,
                    TYPE_UINT64, TYPE_INT, TYPE_UINT, TYPE_LONG,
                    TYPE_ULONG, TYPE_SSIZET, TYPE_SIZET, TYPE_FLOAT,
-                   TYPE_DOUBLE]
+                   TYPE_DOUBLE, TYPE_TIMET]
 GIR_TYPES = [TYPE_NONE, TYPE_ANY]
 GIR_TYPES.extend(BASIC_GIR_TYPES)
 GIR_TYPES.extend([TYPE_STRING, TYPE_FILENAME])
@@ -96,8 +97,7 @@ type_names['void*'] = TYPE_ANY
 type_names['void'] = TYPE_NONE
 type_names['size_t'] = TYPE_SIZET
 type_names['ssize_t'] = TYPE_SSIZET
-# FIXME - we should be evaluating these per-platform; maybe check glibconfig.h?
-type_names['time_t'] = TYPE_LONG
+# FIXME - can we make libraries use GPid?
 type_names['pid_t'] = TYPE_INT
 
 # Suppress some GLib names
index 14d3911..512e9fc 100644 (file)
           </parameter>
         </parameters>
       </method>
+      <method name="is_it_time_yet" c:identifier="foo_object_is_it_time_yet">
+        <return-value>
+          <type name="none" c:type="void"/>
+        </return-value>
+        <parameters>
+          <parameter name="object">
+            <type name="Object" c:type="FooObject*"/>
+          </parameter>
+          <parameter name="time">
+            <type name="time_t" c:type="time_t"/>
+          </parameter>
+        </parameters>
+      </method>
       <property name="string" writable="1">
         <type name="string" c:type="gchararray"/>
       </property>
index 3ea4fbd..ef841a3 100644 (file)
@@ -144,6 +144,11 @@ foo_do_foo (FooInterface *self)
 
 }
 
+void
+foo_object_is_it_time_yet (FooObject *object, time_t time)
+{
+}
+
 G_DEFINE_TYPE (FooSubobject, foo_subobject, FOO_TYPE_OBJECT);
 
 static void
index a2c6ddb..d00eff3 100644 (file)
@@ -62,6 +62,8 @@ typedef gpointer FooObjectCookie;
 
 FooObjectCookie       foo_object_new_cookie        (FooObject *object, const char *target);
 
+void                  foo_object_is_it_time_yet    (FooObject *object, time_t time);
+
 struct _FooSubobject
 {
   FooObject parent_instance;
index ada48cc..f10bdf9 100644 (file)
@@ -83,6 +83,7 @@ write_type_info (const gchar *namespace,
     "size",
     "float", 
     "double", 
+    "time_t", 
     "utf8",
     "filename"
   };