seed r289 - trunk/libseed



Author: racarr
Date: Sat Nov 22 00:52:55 2008
New Revision: 289
URL: http://svn.gnome.org/viewvc/seed?rev=289&view=rev

Log:
Add seed_struct_privates, refactor seed_make_struct/pointer/union/boxed to use that rathewr than store the pointer directly on privates. Needed to have GIBaseInfo in seed_boxed_finalize and set/get property on structs.


Modified:
   trunk/libseed/seed-structs.c
   trunk/libseed/seed-structs.h
   trunk/libseed/seed-types.c

Modified: trunk/libseed/seed-structs.c
==============================================================================
--- trunk/libseed/seed-structs.c	(original)
+++ trunk/libseed/seed-structs.c	Sat Nov 22 00:52:55 2008
@@ -25,6 +25,21 @@
 JSClassRef seed_pointer_class = 0;
 JSClassRef seed_boxed_class = 0;
 
+typedef struct _seed_struct_privates
+{
+    gpointer pointer;
+    GIBaseInfo * info;
+} seed_struct_privates;
+
+static void seed_pointer_finalize(JSObjectRef object)
+{
+    seed_struct_privates * priv =
+	(seed_struct_privates *) JSObjectGetPrivate(object);
+    
+    g_free(priv);
+}
+
+
 JSClassDefinition seed_pointer_def = {
     0,				/* Version, always 0 */
     0,
@@ -33,7 +48,7 @@
     NULL,			/* Static Values */
     NULL,			/* Static Functions */
     NULL,
-    NULL,
+    seed_pointer_finalize,
     NULL,			/* Has Property */
     0,
     NULL,			/* Set Property */
@@ -85,24 +100,36 @@
     NULL			/* Convert To Type */
 };
 
-gpointer seed_pointer_get_pointer(JSValueRef strukt)
+gpointer seed_pointer_get_pointer(JSValueRef pointer)
 {
-    if (JSValueIsObjectOfClass(eng->context, strukt, seed_pointer_class))
-	return JSObjectGetPrivate((JSObjectRef) strukt);
+    if (JSValueIsObjectOfClass(eng->context, pointer, seed_pointer_class))
+    {
+	seed_struct_privates * priv = 
+	    JSObjectGetPrivate((JSObjectRef)pointer);
+	return priv->pointer;
+    }
     return 0;
 }
 
 JSObjectRef seed_make_pointer(gpointer pointer)
 {
-    return JSObjectMake(eng->context, seed_pointer_class, pointer);
+    seed_struct_privates * priv =
+	g_new0(seed_struct_privates, 1);
+    priv->pointer = pointer;
+
+    return JSObjectMake(eng->context, seed_pointer_class, priv);
 }
 
 JSObjectRef seed_make_union(gpointer younion, GIBaseInfo * info)
 {
     JSObjectRef object;
     gint i, n_methods;
+    seed_struct_privates * priv = g_new0(seed_struct_privates, 1);
+    
+    priv->pointer = younion;
+    priv->info = info;
 
-    object = JSObjectMake(eng->context, seed_struct_class, younion);
+    object = JSObjectMake(eng->context, seed_struct_class, priv);
 
     if (info)
     {
@@ -126,8 +153,12 @@
 {
     JSObjectRef object;
     gint i, n_methods;
+    seed_struct_privates * priv = g_new0(seed_struct_privates, 1);
+    
+    priv->info = info;
+    priv->pointer = strukt;
 
-    object = JSObjectMake(eng->context, seed_struct_class, strukt);
+    object = JSObjectMake(eng->context, seed_struct_class, priv);
 
     if (info)
     {

Modified: trunk/libseed/seed-structs.h
==============================================================================
--- trunk/libseed/seed-structs.h	(original)
+++ trunk/libseed/seed-structs.h	Sat Nov 22 00:52:55 2008
@@ -25,6 +25,8 @@
 
 JSObjectRef seed_make_union(gpointer younion, GIBaseInfo * info);
 JSObjectRef seed_make_struct(gpointer strukt, GIBaseInfo * info);
+JSObjectRef seed_make_boxed(gpointer boxed, GIBaseInfo * info);
+
 
 JSObjectRef seed_make_pointer(gpointer pointer);
 

Modified: trunk/libseed/seed-types.c
==============================================================================
--- trunk/libseed/seed-types.c	(original)
+++ trunk/libseed/seed-types.c	Sat Nov 22 00:52:55 2008
@@ -567,7 +567,7 @@
 	return seed_value_from_string((gchar *)
 				      g_value_get_string(gval), exception);
     case G_TYPE_POINTER:
-	return seed_make_struct(g_value_get_pointer(gval), 0);
+	return seed_make_pointer(g_value_get_pointer(gval));
     }
 
     if (g_type_is_a(G_VALUE_TYPE(gval), G_TYPE_ENUM) ||
@@ -601,7 +601,7 @@
 	}
 	else if (type == GI_INFO_TYPE_BOXED)
 	{
-	    // TODO
+	    return seed_make_boxed(g_value_dup_boxed(gval), info);
 	}
 
     }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]