seed r289 - trunk/libseed
- From: racarr svn gnome org
- To: svn-commits-list gnome org
- Subject: seed r289 - trunk/libseed
- Date: Sat, 22 Nov 2008 00:52:55 +0000 (UTC)
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]