seed r47 - in trunk: doc libseed
- From: racarr svn gnome org
- To: svn-commits-list gnome org
- Subject: seed r47 - in trunk: doc libseed
- Date: Sat, 1 Nov 2008 09:54:13 +0000 (UTC)
Author: racarr
Date: Sat Nov 1 09:54:12 2008
New Revision: 47
URL: http://svn.gnome.org/viewvc/seed?rev=47&view=rev
Log:
Add static constructors (i.e. poppler_document_new_from_file as
Poppler.Document.new_from_file) not very java-scripty, but useful for
some API that is still unconstructable otherwise. I.e. poppler, or parts
of Gio (DataInputStream). A common name for these is "new", so this is
mapped to _new, "new" being a javascript keyword and all.
Removed:
trunk/doc/tutorial.html
Modified:
trunk/libseed/seed-builtins.c
trunk/libseed/seed-engine.c
trunk/libseed/seed-engine.h
trunk/libseed/seed-types.c
Modified: trunk/libseed/seed-builtins.c
==============================================================================
--- trunk/libseed/seed-builtins.c (original)
+++ trunk/libseed/seed-builtins.c Sat Nov 1 09:54:12 2008
@@ -122,6 +122,7 @@
{
int i;
JSObjectRef arrayObj;
+ JSValueRef argcref;
JSObjectRef obj = (JSObjectRef)seed_value_get_property(eng->global, "Seed");
seed_create_function("include", &seed_include, obj);
@@ -138,6 +139,9 @@
seed_value_from_string((*argv)[i]), NULL);
}
+ argcref = seed_value_from_int(*argc);
+
+ seed_value_set_property(arrayObj, "length", argcref);
seed_value_set_property(obj, "argv", arrayObj);
}
Modified: trunk/libseed/seed-engine.c
==============================================================================
--- trunk/libseed/seed-engine.c (original)
+++ trunk/libseed/seed-engine.c Sat Nov 1 09:54:12 2008
@@ -229,12 +229,9 @@
}
- else
+ else if (dir == GI_DIRECTION_OUT)
{
- g_error("GI_DIRECTION_IN argument: %d"
- ". In function %s \n",i,
- g_base_info_get_name(
- (GIBaseInfo *) info));
+ n_out_args++;
}
g_base_info_unref((GIBaseInfo *) type_info);
@@ -270,7 +267,7 @@
return retval_ref;
}
-void seed_gobject_define_property_from_function_info(GIFunctionInfo *info, JSObjectRef object)
+void seed_gobject_define_property_from_function_info(GIFunctionInfo *info, JSObjectRef object, gboolean instance)
{
GIFunctionInfoFlags flags;
int n_args, i;
@@ -278,6 +275,7 @@
GITypeInfo *type_info;
GIDirection dir;
SeedValue method_ref;
+ const gchar * name;
//if (g_base_info_is_deprecated ((GIBaseInfo *) info))
// g_printf("Not defining deprecated symbol: %s \n",
@@ -285,9 +283,9 @@
flags = g_function_info_get_flags (info);
- if ((flags & GI_FUNCTION_IS_CONSTRUCTOR) ||
+ if (instance && ((flags & GI_FUNCTION_IS_CONSTRUCTOR) ||
(flags & GI_FUNCTION_IS_GETTER) ||
- (flags & GI_FUNCTION_IS_SETTER))
+ (flags & GI_FUNCTION_IS_SETTER)))
{
return;
}
@@ -297,9 +295,7 @@
{
arg_info = g_callable_info_get_arg((GICallableInfo *) info, i);
dir = g_arg_info_get_direction(arg_info);
- if (dir == GI_DIRECTION_OUT)//||
- // dir == GI_DIRECTION_INOUT)
- return;
+
type_info = g_arg_info_get_type(arg_info);
@@ -309,10 +305,12 @@
}
method_ref = JSObjectMake(eng->context, gobject_method_class, info);
- // This is not clear to me.
- // JSValueProtect(eng->context, (JSValueRef)method_ref);
+
+ name = g_base_info_get_name((GIBaseInfo *) info);
+ if (!strcmp(name, "new"))
+ name = "_new";
seed_value_set_property(object,
- g_base_info_get_name((GIBaseInfo *) info),
+ name,
method_ref);
}
@@ -336,7 +334,7 @@
{
function = g_interface_info_get_method(interface, k);
seed_gobject_define_property_from_function_info
- (function, object);
+ (function, object, TRUE);
}
// g_base_info_unref((GIBaseInfo*)interface);
}
@@ -353,7 +351,7 @@
for (i = 0; i < n_methods; i++)
{
info = g_object_info_get_method(oinfo, i);
- seed_gobject_define_property_from_function_info(info, object);
+ seed_gobject_define_property_from_function_info(info, object, TRUE);
}
}
@@ -619,7 +617,7 @@
(g_base_info_get_type(info) == GI_INFO_TYPE_FUNCTION))
{
seed_gobject_define_property_from_function_info(
- (GIFunctionInfo *) info, namespace_ref);
+ (GIFunctionInfo *) info, namespace_ref, FALSE);
}
else if (info &&
(g_base_info_get_type(info) == GI_INFO_TYPE_ENUM))
@@ -683,13 +681,38 @@
if (type != 0)
{
JSObjectRef constructor_ref;
+ int i, n_methods;
+ GIFunctionInfo * finfo;
+ GIFunctionInfoFlags flags;
+
class_ref =
seed_gobject_get_class_for_gtype(type);
-
+
constructor_ref =
JSObjectMake(eng->context,
gobject_constructor_class,
(gpointer)type);
+
+
+ n_methods = g_object_info_get_n_methods((GIObjectInfo *)info);
+ for (i = 0; i < n_methods; i++)
+ {
+ finfo = g_object_info_get_method((GIObjectInfo *)info, i);
+ flags = g_function_info_get_flags(finfo);
+ if (flags & GI_FUNCTION_IS_CONSTRUCTOR)
+ {
+ seed_gobject_define_property_from_function_info(finfo,
+ constructor_ref,
+ FALSE);
+ }
+ else
+ {
+ g_base_info_unref((GIBaseInfo*)finfo);
+ }
+ }
+
+
+
seed_value_set_property(namespace_ref,
g_base_info_get_name(
info),
Modified: trunk/libseed/seed-engine.h
==============================================================================
--- trunk/libseed/seed-engine.h (original)
+++ trunk/libseed/seed-engine.h Sat Nov 1 09:54:12 2008
@@ -40,6 +40,6 @@
JSObjectRef seed_gobject_get_prototype_for_gtype(GType type);
JSClassRef seed_gobject_get_class_for_gtype(GType type);
-void seed_gobject_define_property_from_function_info(GIFunctionInfo *info, JSObjectRef object);
+void seed_gobject_define_property_from_function_info(GIFunctionInfo *info, JSObjectRef object, gboolean instance);
void seed_create_function(char * name, gpointer func, JSObjectRef obj);
#endif
Modified: trunk/libseed/seed-types.c
==============================================================================
--- trunk/libseed/seed-types.c (original)
+++ trunk/libseed/seed-types.c Sat Nov 1 09:54:12 2008
@@ -85,7 +85,7 @@
{
function = g_interface_info_get_method((GIInterfaceInfo*)interface, k);
seed_gobject_define_property_from_function_info(function,
- (JSObjectRef)js_ref);
+ (JSObjectRef)js_ref, TRUE);
}
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]