seed r47 - in trunk: doc libseed



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]