[gjs/wip/gobj-kitchen-sink: 11/21] Move GParamSpec registration together with the other infos



commit 9e9353668e445a087a9650c9a8c780f9e13cca3e
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Fri Dec 9 18:47:17 2011 +0100

    Move GParamSpec registration together with the other infos
    
    Instead of special casing it in ns_new_resolve(), now that it has
    correctly a GType, we can handle it together with the other objects.
    Also, check that the classes we define inherit from GObject, since
    we assume that around the code.

 gi/ns.c   |   22 ++++++++--------------
 gi/repo.c |   18 +++++++++++++++---
 2 files changed, 23 insertions(+), 17 deletions(-)
---
diff --git a/gi/ns.c b/gi/ns.c
index cea0882..e889cd0 100644
--- a/gi/ns.c
+++ b/gi/ns.c
@@ -95,20 +95,14 @@ ns_new_resolve(JSContext *context,
 
     JS_BeginRequest(context);
 
-    /* Special-case fallback hack for GParamSpec */
-    if (strcmp(name, "ParamSpec") == 0 &&
-        strcmp(priv->namespace, "GObject") == 0) {
-        if (!gjs_define_param_class(context,
-                                    obj,
-                                    NULL)) {
-            JS_EndRequest(context);
-            goto out;
-        } else {
-            *objp = obj; /* we defined the property in this object */
-            JS_EndRequest(context);
-            ret = JS_TRUE;
-            goto out;
-        }
+    repo = g_irepository_get_default();
+
+    info = g_irepository_find_by_name(repo, priv->namespace, name);
+    if (info == NULL) {
+        /* No property defined, but no error either, so return TRUE */
+        JS_EndRequest(context);
+        ret = JS_TRUE;
+        goto out;
     }
 
     repo = g_irepository_get_default();
diff --git a/gi/repo.c b/gi/repo.c
index fa6a585..5a34e20 100644
--- a/gi/repo.c
+++ b/gi/repo.c
@@ -27,6 +27,7 @@
 #include "ns.h"
 #include "function.h"
 #include "object.h"
+#include "param.h"
 #include "boxed.h"
 #include "union.h"
 #include "enumeration.h"
@@ -470,10 +471,21 @@ gjs_define_info(JSContext  *context,
             GType gtype;
             GIBaseInfo *info_for_gtype;
             gtype = g_registered_type_info_get_g_type((GIRegisteredTypeInfo*)info);
-            if (!gjs_define_object_class(context, in_object, gtype, NULL, NULL, &info_for_gtype))
+
+            if (g_type_is_a (gtype, G_TYPE_PARAM)) {
+                if (!gjs_define_param_class(context, in_object, NULL))
+                    return JS_FALSE;
+            } else if (g_type_is_a (gtype, G_TYPE_OBJECT)) {
+                if (!gjs_define_object_class(context, in_object, gtype, NULL, NULL, &info_for_gtype))
+                    return JS_FALSE;
+                g_assert(g_base_info_equal(info, info_for_gtype));
+                g_base_info_unref(info_for_gtype);
+            } else {
+                gjs_throw (context,
+                           "Unsupported type %s, deriving from fundamental %s",
+                           g_type_name(gtype), g_type_name(g_type_fundamental(gtype)));
                 return JS_FALSE;
-            g_assert(g_base_info_equal(info, info_for_gtype));
-            g_base_info_unref(info_for_gtype);
+            }
         }
         break;
     case GI_INFO_TYPE_STRUCT:



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