[gjs] GParamSpec: remove custom constructor



commit 221e15828e0170398db670325361bd09e2da4bee
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Sat Jul 7 15:07:14 2012 +0200

    GParamSpec: remove custom constructor
    
    With proper argument marshalling, we don't need the custom code
    anymore, the regular GObject functions works just as well.
    We still need a lot of JS override code, because the arguments
    are swapped...
    
    https://bugzilla.gnome.org/show_bug.cgi?id=725282

 gi/param.cpp                 |  227 ------------------------------------------
 modules/overrides/GObject.js |   46 +++------
 2 files changed, 17 insertions(+), 256 deletions(-)
---
diff --git a/gi/param.cpp b/gi/param.cpp
index 4bb3125..59c4188 100644
--- a/gi/param.cpp
+++ b/gi/param.cpp
@@ -178,232 +178,6 @@ param_finalize(JSFreeOp *fop,
     g_slice_free(Param, priv);
 }
 
-static JSBool
-param_new_internal(JSContext *cx,
-                   unsigned   argc,
-                   jsval     *vp)
-{
-    jsval *argv = JS_ARGV(cx, vp);
-    GParamSpec *pspec = NULL;
-    JSBool ret = JS_FALSE;
-    gchar *method_name;
-
-    gchar *prop_name;
-    JSObject *prop_gtype_jsobj;
-    GType prop_gtype;
-    GType prop_type;
-    gchar *nick;
-    gchar *blurb;
-    GParamFlags flags;
-    jsval foo;
-
-    if (!gjs_parse_args(cx, "GObject.ParamSpec._new_internal",
-                        "!sossi", argc, argv,
-                        "prop_name", &prop_name,
-                        "prop_gtype", &prop_gtype_jsobj,
-                        "nick", &nick,
-                        "blurb", &blurb,
-                        "flags", &flags))
-        return JS_FALSE;
-
-    prop_gtype = gjs_gtype_get_actual_gtype(cx, prop_gtype_jsobj);
-    prop_type = G_TYPE_FUNDAMENTAL(prop_gtype);
-
-    method_name = g_strdup_printf("GObject.ParamSpec.%s",
-                                  g_type_name(prop_type));
-
-    argv += 5;
-    argc -= 5;
-
-    switch (prop_type) {
-    case G_TYPE_UCHAR:
-    case G_TYPE_CHAR:
-       {
-           gchar *minimum, *maximum, *default_value;
-
-            if (!gjs_parse_args(cx, method_name,
-                                "sss", argc, argv,
-                                "minimum", &minimum,
-                                "maximum", &maximum,
-                                "default_value", &default_value))
-                goto out;
-
-            if (prop_type == G_TYPE_CHAR)
-                pspec = g_param_spec_char(prop_name, nick, blurb,
-                                          minimum[0], maximum[0], default_value[0],
-                                          flags);
-            else
-                pspec = g_param_spec_uchar(prop_name, nick, blurb,
-                                           minimum[0], maximum[0], default_value[0],
-                                           flags);
- 
-            g_free(minimum);
-            g_free(maximum);
-            g_free(default_value);
-       }
-       break;
-    case G_TYPE_INT:
-    case G_TYPE_UINT:
-    case G_TYPE_LONG:
-    case G_TYPE_ULONG:
-    case G_TYPE_INT64:
-    case G_TYPE_UINT64:
-        {
-            gint64 minimum, maximum, default_value;
-
-            if (!gjs_parse_args(cx, method_name,
-                                "ttt", argc, argv,
-                                "minimum", &minimum,
-                                "maximum", &maximum,
-                                "default_value", &default_value))
-                goto out;
-
-            switch (prop_type) {
-            case G_TYPE_INT:
-                pspec = g_param_spec_int(prop_name, nick, blurb,
-                                         minimum, maximum, default_value, flags);
-                break;
-            case G_TYPE_UINT:
-                pspec = g_param_spec_uint(prop_name, nick, blurb,
-                                          minimum, maximum, default_value, flags);
-                break;
-            case G_TYPE_LONG:
-                pspec = g_param_spec_long(prop_name, nick, blurb,
-                                          minimum, maximum, default_value, flags);
-                break;
-            case G_TYPE_ULONG:
-                pspec = g_param_spec_ulong(prop_name, nick, blurb,
-                                           minimum, maximum, default_value, flags);
-                break;
-            case G_TYPE_INT64:
-                pspec = g_param_spec_int64(prop_name, nick, blurb,
-                                           minimum, maximum, default_value, flags);
-                break;
-            case G_TYPE_UINT64:
-                pspec = g_param_spec_uint64(prop_name, nick, blurb,
-                                            minimum, maximum, default_value, flags);
-                break;
-            }
-        }
-        break;
-    case G_TYPE_BOOLEAN:
-        {
-            gboolean default_value;
-
-            if (!gjs_parse_args(cx, method_name,
-                                "b", argc, argv,
-                                "default_value", &default_value))
-                goto out;
-
-            default_value = JSVAL_TO_BOOLEAN(argv[0]);
-
-            pspec = g_param_spec_boolean(prop_name, nick, blurb,
-                                         default_value, flags);
-        }
-        break;
-    case G_TYPE_ENUM:
-        {
-            GIEnumInfo *info;
-            gint64 default_value;
-
-            if (!gjs_parse_args(cx, method_name,
-                                "t", argc, argv,
-                                "default_value", &default_value))
-                goto out;
-
-            info = g_irepository_find_by_gtype(g_irepository_get_default(), prop_gtype);
-
-            if (!_gjs_enum_value_is_valid(cx, info, default_value))
-                goto out;
-
-            pspec = g_param_spec_enum(prop_name, nick, blurb,
-                                      prop_gtype, default_value, flags);
-        }
-        break;
-    case G_TYPE_FLAGS:
-        {
-            gint64 default_value;
-
-            if (!gjs_parse_args(cx, method_name,
-                                "t", argc, argv,
-                                "default_value", &default_value))
-                goto out;
-
-            if (!_gjs_flags_value_is_valid(cx, prop_gtype, default_value))
-                goto out;
-
-            pspec = g_param_spec_flags(prop_name, nick, blurb,
-                                       prop_gtype, default_value, flags);
-        }
-        break;
-    case G_TYPE_FLOAT:
-    case G_TYPE_DOUBLE:
-        {
-           gfloat minimum, maximum, default_value;
-
-            if (!gjs_parse_args(cx, "GObject.ParamSpec.float",
-                                "fff", argc, argv,
-                                "minimum", &minimum,
-                                "maximum", &maximum,
-                                "default_value", &default_value))
-                goto out;
-
-            if (prop_type == G_TYPE_FLOAT)
-                pspec = g_param_spec_float(prop_name, nick, blurb,
-                                           minimum, maximum, default_value, flags);
-            else
-                pspec = g_param_spec_double(prop_name, nick, blurb,
-                                            minimum, maximum, default_value, flags);
-        }
-        break;
-    case G_TYPE_STRING:
-        {
-            gchar *default_value;
-
-            if (!gjs_parse_args(cx, method_name,
-                                "s", argc, argv,
-                                "default_value", &default_value))
-                goto out;
-
-            pspec = g_param_spec_string(prop_name, nick, blurb,
-                                        default_value, flags);
-
-            g_free (default_value);
-        }
-        break;
-    case G_TYPE_PARAM:
-        pspec = g_param_spec_param(prop_name, nick, blurb, prop_gtype, flags);
-        break;
-    case G_TYPE_BOXED:
-        pspec = g_param_spec_boxed(prop_name, nick, blurb, prop_gtype, flags);
-        break;
-    case G_TYPE_POINTER:
-        pspec = g_param_spec_pointer(prop_name, nick, blurb, flags);
-        break;
-    case G_TYPE_OBJECT:
-        pspec = g_param_spec_object(prop_name, nick, blurb, prop_gtype, flags);
-        break;
-    default:
-        gjs_throw(cx,
-                  "Could not create param spec for type '%s'",
-                  g_type_name(prop_gtype));
-        goto out;
-    }
-
-    ret = JS_TRUE;
-
-    foo = OBJECT_TO_JSVAL(gjs_param_from_g_param(cx, pspec));
-
-    JS_SET_RVAL(cx, vp, foo);
- out:
-
-    g_free(method_name);
-    g_free(prop_name);
-    g_free(nick);
-    g_free(blurb);
-
-    return ret;
-}
 
 /* The bizarre thing about this vtable is that it applies to both
  * instances of the object, and to the prototype that instances of the
@@ -435,7 +209,6 @@ JSFunctionSpec gjs_param_proto_funcs[] = {
 };
 
 static JSFunctionSpec gjs_param_constructor_funcs[] = {
-    { "_new_internal", JSOP_WRAPPER((JSNative)param_new_internal), 0, 0 },
     { NULL }
 };
 
diff --git a/modules/overrides/GObject.js b/modules/overrides/GObject.js
index 481a3ba..d17c34c 100644
--- a/modules/overrides/GObject.js
+++ b/modules/overrides/GObject.js
@@ -189,83 +189,71 @@ function _init() {
     _makeDummyClass(this, 'Type', 'GTYPE', 'GType', GObject.type_from_name);
 
     this.ParamSpec.char = function(name, nick, blurb, flags, minimum, maximum, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.Char,
-                                               nick, blurb, flags, minimum, maximum, default_value);
+        return GObject.param_spec_char(name, nick, blurb, minimum, maximum, default_value, flags);
     };
 
     this.ParamSpec.uchar = function(name, nick, blurb, flags, minimum, maximum, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.UChar,
-                                               nick, blurb, flags, minimum, maximum, default_value);
+        return GObject.param_spec_uchar(name, nick, blurb, minimum, maximum, default_value, flags);
     };
 
     this.ParamSpec.int = function(name, nick, blurb, flags, minimum, maximum, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.Int,
-                                               nick, blurb, flags, minimum, maximum, default_value);
+        return GObject.param_spec_int(name, nick, blurb, minimum, maxmium, default_value, flags);
     };
 
     this.ParamSpec.uint = function(name, nick, blurb, flags, minimum, maximum, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.UInt,
-                                               nick, blurb, flags, minimum, maximum, default_value);
+        return GObject.param_spec_uint(name, nick, blurb, minimum, maximum, default_value, flags);
     };
 
     this.ParamSpec.long = function(name, nick, blurb, flags, minimum, maximum, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.Long,
-                                               nick, blurb, flags, minimum, maximum, default_value);
+        return GObject.param_spec_long(name, nick, blurb, minimum, maximum, default_value, flags);
     };
 
     this.ParamSpec.ulong = function(name, nick, blurb, flags, minimum, maximum, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.ULong,
-                                               nick, blurb, flags, minimum, maximum, default_value);
+        return GObject.param_spec_ulong(name, nick, blurb, minimum, maximum, default_value, flags);
     };
 
     this.ParamSpec.int64 = function(name, nick, blurb, flags, minimum, maximum, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.Int64,
-                                               nick, blurb, flags, minimum, maximum, default_value);
+        return GObject.param_spec_int64(name, nick, blurb, minimum, maximum, default_value, flags);
     };
 
     this.ParamSpec.uint64 = function(name, nick, blurb, flags, minimum, maximum, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.UInt64,
-                                               nick, blurb, flags, minimum, maximum, default_value);
+        return GObject.param_spec_uint64(name, nick, blurb, minimum, maximum, default_value, flags);
     };
 
     this.ParamSpec.float = function(name, nick, blurb, flags, minimum, maximum, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.Float,
-                                               nick, blurb, flags, minimum, maximum, default_value);
+        return GObject.param_spec_float(name, nick, blurb, minimum, maximum, default_value, flags);
     };
 
     this.ParamSpec.boolean = function(name, nick, blurb, flags, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.Boolean,
-                                               nick, blurb, flags, default_value);
+        return GObject.param_spec_boolean(name, nick, blurb, default_value, flags);
     };
 
     this.ParamSpec.flags = function(name, nick, blurb, flags, flags_type, default_value) {
-        return GObject.ParamSpec._new_internal(name, flags_type, nick, blurb, flags, default_value);
+        return GObject.param_spec_flags(name, nick, blurb, flags_type, default_value, flags);
     };
 
     this.ParamSpec.enum = function(name, nick, blurb, flags, enum_type, default_value) {
-        return GObject.ParamSpec._new_internal(name, enum_type, nick, blurb, flags, default_value);
+        return GObject.param_spec_enum(name, nick, blurb, enum_type, default_value, flags);
     };
 
     this.ParamSpec.double = function(name, nick, blurb, flags, minimum, maximum, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.Double,
-                                               nick, blurb, flags, minimum, maximum, default_value);
+        return GObject.param_spec_double(name, nick, blurb, minimum, maximum, default_value, flags);
     };
 
     this.ParamSpec.string = function(name, nick, blurb, flags, default_value) {
-        return GObject.ParamSpec._new_internal(name, GObject.String,
-                                               nick, blurb, flags, default_value);
+        return GObject.param_spec_string(name, nick, blurb, default_value, flags);
     };
 
     this.ParamSpec.boxed = function(name, nick, blurb, flags, boxed_type) {
-       return GObject.ParamSpec._new_internal(name, boxed_type, nick, blurb, flags);
+        return GObject.param_spec_boxed(name, nick, blurb, boxed_type, flags);
     };
 
     this.ParamSpec.object = function(name, nick, blurb, flags, object_type) {
-       return GObject.ParamSpec._new_internal(name, object_type, nick, blurb, flags);
+        return GObject.param_spec_object(name, nick, blurb, object_type, flags);
     };
 
     this.ParamSpec.param = function(name, nick, blurb, flags, param_type) {
-       return GObject.ParamSpec._new_internal(name, param_type, nick, blurb, flags);
+        return GObject.param_spec_param(name, nick, blurb, param_type, flags);
     };
 
     this.Class = GObjectMeta;


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