gjs r130 - trunk/gi



Author: jobi
Date: Tue Dec  2 16:11:57 2008
New Revision: 130
URL: http://svn.gnome.org/viewvc/gjs?rev=130&view=rev

Log:
Handle the GValue case before struct/union

Modified:
   trunk/gi/arg.c

Modified: trunk/gi/arg.c
==============================================================================
--- trunk/gi/arg.c	(original)
+++ trunk/gi/arg.c	Tue Dec  2 16:11:57 2008
@@ -889,8 +889,20 @@
 
                 value = JSVAL_VOID;
 
+                gtype = g_registered_type_info_get_g_type((GIRegisteredTypeInfo*)symbol_info);
+
+                gjs_debug_marshal(GJS_DEBUG_GFUNCTION,
+                                  "gtype of SYMBOL is %s", g_type_name(gtype));
+
+                if (g_type_is_a(gtype, G_TYPE_VALUE)) {
+                    if (!gjs_value_from_g_value(context, &value, arg->v_pointer)) {
+                        g_base_info_unref( (GIBaseInfo*) symbol_info);
+                        return JS_FALSE;
+                    }
+
+                    goto out;
                 /* Handle Struct/Union first since we don't necessarily need a GType for them */
-                if (symbol_type == GI_INFO_TYPE_STRUCT || symbol_type == GI_INFO_TYPE_BOXED) {
+                } else if (symbol_type == GI_INFO_TYPE_STRUCT || symbol_type == GI_INFO_TYPE_BOXED) {
                     JSObject *obj;
                     obj = gjs_boxed_from_c_struct(context, (GIStructInfo *)symbol_info, arg->v_pointer);
                     if (obj)
@@ -906,21 +918,11 @@
                     goto out;
                 }
 
-                gtype = g_registered_type_info_get_g_type((GIRegisteredTypeInfo*)symbol_info);
-
-                gjs_debug_marshal(GJS_DEBUG_GFUNCTION,
-                                  "gtype of SYMBOL is %s", g_type_name(gtype));
-
                 if (g_type_is_a(gtype, G_TYPE_OBJECT) || g_type_is_a(gtype, G_TYPE_INTERFACE)) {
                     JSObject *obj;
                     obj = gjs_object_from_g_object(context, G_OBJECT(arg->v_pointer));
                     if (obj)
                         value = OBJECT_TO_JSVAL(obj);
-                } else if (g_type_is_a(gtype, G_TYPE_VALUE)) {
-                    if (!gjs_value_from_g_value(context, &value, arg->v_pointer)) {
-                        g_base_info_unref( (GIBaseInfo*) symbol_info);
-                        return JS_FALSE;
-                    }
                 } else if (g_type_is_a(gtype, G_TYPE_BOXED)) {
                     /* Should have been caught above as STRUCT/BOXED/UNION */
                     gjs_throw(context,



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