seed r851 - in trunk: libseed tools



Author: hortont
Date: Sat Feb  7 09:19:31 2009
New Revision: 851
URL: http://svn.gnome.org/viewvc/seed?rev=851&view=rev

Log:
Indent session!


Modified:
   trunk/libseed/seed-api.c
   trunk/libseed/seed-builtins.c
   trunk/libseed/seed-closure.c
   trunk/libseed/seed-engine.c
   trunk/libseed/seed-types.c
   trunk/libseed/seed.h
   trunk/tools/indent.sh   (props changed)

Modified: trunk/libseed/seed-api.c
==============================================================================
--- trunk/libseed/seed-api.c	(original)
+++ trunk/libseed/seed-api.c	Sat Feb  7 09:19:31 2009
@@ -32,7 +32,7 @@
 }
 
 JSGlobalContextRef seed_context_create(JSContextGroupRef group,
-				       JSClassRef global_class)
+									   JSClassRef global_class)
 {
 	return JSGlobalContextCreateInGroup(group, global_class);
 }
@@ -53,33 +53,33 @@
 }
 
 JSObjectRef seed_make_object(JSContextRef ctx,
-			     JSClassRef class, gpointer private)
+							 JSClassRef class, gpointer private)
 {
 	return JSObjectMake(ctx, class, private);
 }
 
 void seed_object_set_property_at_index(JSContextRef ctx,
-				       JSObjectRef object,
-				       gint index,
-				       JSValueRef value, JSValueRef * exception)
+									   JSObjectRef object,
+									   gint index,
+									   JSValueRef value, JSValueRef * exception)
 {
 	JSObjectSetPropertyAtIndex(ctx, object, index, value, exception);
 }
 
 JSValueRef seed_object_call(JSContextRef ctx,
-			    JSObjectRef object,
-			    JSObjectRef this,
-			    size_t argument_count,
-			    const JSValueRef arguments[],
-			    JSValueRef * exception)
+							JSObjectRef object,
+							JSObjectRef this,
+							size_t argument_count,
+							const JSValueRef arguments[],
+							JSValueRef * exception)
 {
 	return JSObjectCallAsFunction(ctx, object, this,
-				      argument_count, arguments, exception);
+								  argument_count, arguments, exception);
 }
 
 SeedScript *seed_make_script(JSContextRef ctx,
-			     const gchar * js,
-			     const gchar * source_url, gint line_number)
+							 const gchar * js,
+							 const gchar * source_url, gint line_number)
 {
 	SeedScript *ret = g_new0(SeedScript, 1);
 
@@ -95,18 +95,17 @@
 	ret->line_number = line_number;
 
 	JSCheckScriptSyntax(ctx, ret->script,
-			    ret->source_url, ret->line_number, &ret->exception);
+						ret->source_url, ret->line_number, &ret->exception);
 
 	return ret;
 }
 
-SeedScript *seed_script_new_from_file(JSContextRef ctx, 
-				      gchar *file)
+SeedScript *seed_script_new_from_file(JSContextRef ctx, gchar * file)
 {
 	SeedScript *script;
 	GError *e = NULL;
 	gchar *contents = NULL;
-	
+
 	g_file_get_contents(file, &contents, NULL, &e);
 	script = seed_make_script(ctx, contents, file, 0);
 	if (e)
@@ -114,8 +113,8 @@
 		seed_make_exception_from_gerror(ctx, &script->exception, e);
 		g_error_free(e);
 	}
-	
-	return script;	
+
+	return script;
 }
 
 JSValueRef seed_evaluate(JSContextRef ctx, SeedScript * js, JSObjectRef this)
@@ -124,8 +123,8 @@
 
 	js->exception = 0;
 	ret = JSEvaluateScript(ctx,
-			       js->script, this, js->source_url,
-			       js->line_number, &js->exception);
+						   js->script, this, js->source_url,
+						   js->line_number, &js->exception);
 
 	return ret;
 }
@@ -152,7 +151,7 @@
 }
 
 gsize seed_string_to_utf8_buffer(JSStringRef string, gchar * buffer,
-				 size_t buffer_size)
+								 size_t buffer_size)
 {
 	return JSStringGetUTF8CString(string, buffer, buffer_size);
 }
@@ -183,8 +182,8 @@
 }
 
 JSObjectRef seed_make_constructor(JSContextRef ctx,
-				  JSClassRef class,
-				  JSObjectCallAsConstructorCallback constructor)
+								  JSClassRef class,
+								  JSObjectCallAsConstructorCallback constructor)
 {
 	return JSObjectMakeConstructor(ctx, class, constructor);
 }
@@ -199,22 +198,17 @@
 	JSObjectSetPrivate(object, value);
 }
 
-gboolean seed_value_is_null(JSContextRef ctx,
-			    JSValueRef value)
+gboolean seed_value_is_null(JSContextRef ctx, JSValueRef value)
 {
 	return JSValueIsNull(ctx, value);
 }
 
-gboolean seed_value_is_object(JSContextRef ctx,
-			      JSValueRef value)
+gboolean seed_value_is_object(JSContextRef ctx, JSValueRef value)
 {
-	return !seed_value_is_null(ctx, value) &&
-		JSValueIsObject(ctx, value);
+	return !seed_value_is_null(ctx, value) && JSValueIsObject(ctx, value);
 }
-gboolean seed_value_is_function(JSContextRef ctx,
-				JSObjectRef value)
+
+gboolean seed_value_is_function(JSContextRef ctx, JSObjectRef value)
 {
-	return seed_value_is_object(ctx, value) && 
-		JSObjectIsFunction(ctx, value);
+	return seed_value_is_object(ctx, value) && JSObjectIsFunction(ctx, value);
 }
-

Modified: trunk/libseed/seed-builtins.c
==============================================================================
--- trunk/libseed/seed-builtins.c	(original)
+++ trunk/libseed/seed-builtins.c	Sat Feb  7 09:19:31 2009
@@ -325,9 +325,8 @@
 			// TODO: exceptions!
 
 			JSObjectSetPropertyAtIndex(local_eng->context, arrayObj, i,
-									   seed_value_from_string(local_eng->
-															  context,
-															  (*argv)[i], 0),
+									   seed_value_from_string
+									   (local_eng->context, (*argv)[i], 0),
 									   NULL);
 		}
 

Modified: trunk/libseed/seed-closure.c
==============================================================================
--- trunk/libseed/seed-closure.c	(original)
+++ trunk/libseed/seed-closure.c	Sat Feb  7 09:19:31 2009
@@ -398,7 +398,7 @@
 	ffi_prep_cif(cif, FFI_DEFAULT_ABI, num_args,
 				 get_ffi_type(return_type), arg_types);
 	ffi_prep_closure(closure, cif, seed_handle_closure, privates);
-	
+
 	JSValueProtect(ctx, function);
 
 	seed_object_set_property(ctx, (JSObjectRef) function,

Modified: trunk/libseed/seed-engine.c
==============================================================================
--- trunk/libseed/seed-engine.c	(original)
+++ trunk/libseed/seed-engine.c	Sat Feb  7 09:19:31 2009
@@ -877,7 +877,7 @@
 	JSStringRef extension_script;
 	gint n, i;
 	GModule *extension;
-	
+
 	ctx = eng->context;
 
 	if (argumentCount == 0)

Modified: trunk/libseed/seed-types.c
==============================================================================
--- trunk/libseed/seed-types.c	(original)
+++ trunk/libseed/seed-types.c	Sat Feb  7 09:19:31 2009
@@ -31,1528 +31,1530 @@
 
 static gboolean seed_value_is_gobject(JSContextRef ctx, JSValueRef value)
 {
-  if (!JSValueIsObject(ctx, value) || JSValueIsNull(ctx, value))
-    return FALSE;
+	if (!JSValueIsObject(ctx, value) || JSValueIsNull(ctx, value))
+		return FALSE;
 
-  return JSValueIsObjectOfClass(ctx, value, gobject_class);
+	return JSValueIsObjectOfClass(ctx, value, gobject_class);
 }
 
 void seed_toggle_ref(gpointer data, GObject * object, gboolean is_last_ref)
 {
-  JSValueRef wrapper;
+	JSValueRef wrapper;
 
-  wrapper = (JSValueRef) data;
+	wrapper = (JSValueRef) data;
 
-  if (is_last_ref)
-    {
-      JSValueUnprotect(eng->context, wrapper);
-    }
-  else
-    {
-      JSValueProtect(eng->context, wrapper);
-    }
+	if (is_last_ref)
+	{
+		JSValueUnprotect(eng->context, wrapper);
+	}
+	else
+	{
+		JSValueProtect(eng->context, wrapper);
+	}
 }
 
 static void seed_gobject_destroyed(gpointer object)
 {
-  JSValueUnprotect(eng->context, (JSValueRef) object);
-  JSObjectSetPrivate((JSObjectRef) object, 0);
+	JSValueUnprotect(eng->context, (JSValueRef) object);
+	JSObjectSetPrivate((JSObjectRef) object, 0);
 }
 
 static JSValueRef seed_wrap_object(JSContextRef ctx, GObject * object)
 {
-  JSValueRef user_data;
-  JSValueRef js_ref;
-  JSClassRef class;
-  GType type;
-  JSValueRef prototype;
-
-  type = G_OBJECT_TYPE(object);
-
-  user_data = (JSValueRef) g_object_get_data(object, "js-ref");
-
-  if (user_data)
-    return user_data;
-
-  class = seed_gobject_get_class_for_gtype(ctx, type);
-
-  while (!class && (type = g_type_parent(type)))
-    {
-      class = seed_gobject_get_class_for_gtype(ctx, type);
-    }
-
-  prototype = seed_gobject_get_prototype_for_gtype(type);
-  js_ref = JSObjectMake(ctx, class, object);
-  if (prototype)
-    JSObjectSetPrototype(ctx, (JSObjectRef) js_ref, prototype);
-  else
-    {
-      g_assert_not_reached();
-    }
+	JSValueRef user_data;
+	JSValueRef js_ref;
+	JSClassRef class;
+	GType type;
+	JSValueRef prototype;
+
+	type = G_OBJECT_TYPE(object);
+
+	user_data = (JSValueRef) g_object_get_data(object, "js-ref");
 
-  g_object_set_data_full(object, "js-ref", (gpointer) js_ref,
-			 seed_gobject_destroyed);
+	if (user_data)
+		return user_data;
+
+	class = seed_gobject_get_class_for_gtype(ctx, type);
+
+	while (!class && (type = g_type_parent(type)))
+	{
+		class = seed_gobject_get_class_for_gtype(ctx, type);
+	}
+
+	prototype = seed_gobject_get_prototype_for_gtype(type);
+	js_ref = JSObjectMake(ctx, class, object);
+	if (prototype)
+		JSObjectSetPrototype(ctx, (JSObjectRef) js_ref, prototype);
+	else
+	{
+		g_assert_not_reached();
+	}
 
-  JSValueProtect(eng->context, js_ref);
-  g_object_add_toggle_ref(object, seed_toggle_ref, (gpointer) js_ref);
+	g_object_set_data_full(object, "js-ref", (gpointer) js_ref,
+						   seed_gobject_destroyed);
 
-  return js_ref;
+	JSValueProtect(eng->context, js_ref);
+	g_object_add_toggle_ref(object, seed_toggle_ref, (gpointer) js_ref);
+
+	return js_ref;
 }
 
 static gboolean seed_release_arg(GITransfer transfer,
-				 GITypeInfo * type_info,
-				 GITypeTag type_tag, GArgument * arg)
+								 GITypeInfo * type_info,
+								 GITypeTag type_tag, GArgument * arg)
 {
-  GType gtype;
+	GType gtype;
+
+	switch (type_tag)
+	{
+	case GI_TYPE_TAG_UTF8:
+	case GI_TYPE_TAG_FILENAME:
+		g_free(arg->v_string);
+		break;
+	case GI_TYPE_TAG_ARRAY:
+		if (arg->v_pointer)
+		{
+			GITypeInfo *param_type;
 
-  switch (type_tag)
-    {
-    case GI_TYPE_TAG_UTF8:
-    case GI_TYPE_TAG_FILENAME:
-      g_free(arg->v_string);
-      break;
-    case GI_TYPE_TAG_ARRAY:
-      if (arg->v_pointer)
-	{
-	  GITypeInfo *param_type;
-
-	  param_type = g_type_info_get_param_type(type_info, 0);
-			
-	  switch (g_type_info_get_tag(param_type))
-	    {
-	    case GI_TYPE_TAG_UTF8:
-	      if (transfer ==  GI_TRANSFER_EVERYTHING)
-		g_strfreev(arg->v_pointer);
-	      else if (transfer == GI_TRANSFER_CONTAINER)
-		g_free(arg->v_pointer);
-	      break;
-	    case GI_TYPE_TAG_GTYPE:
-	    case GI_TYPE_TAG_FLOAT:
-	    case GI_TYPE_TAG_UINT8:
-	      g_free(arg->v_pointer);
-	      break;
-	    case GI_TYPE_TAG_INTERFACE:
-	      // TODOOO FIXME
-	      break;
-	    default:
-	      g_assert_not_reached();
-	    }
-
-	  g_base_info_unref((GIBaseInfo *) param_type);
-	}
-      break;
-    case GI_TYPE_TAG_INTERFACE:
-      {
-	if (arg->v_pointer)
-	  {
-	    GIBaseInfo *interface_info;
-
-	    interface_info = g_type_info_get_interface(type_info);
-
-	    gtype =
-	      g_registered_type_info_get_g_type((GIRegisteredTypeInfo *)
-						interface_info);
-
-	    if (g_type_is_a(gtype, G_TYPE_OBJECT)
-		|| g_type_is_a(gtype, G_TYPE_INTERFACE))
-	      {
-		SEED_NOTE(MISC,
-			  "Unreffing object of type: %s in"
-			  "argument release. Reference count: %d\n",
-			  g_type_name(G_OBJECT_TYPE
-				      (G_OBJECT(arg->v_pointer))),
-			  G_OBJECT(arg->v_pointer)->ref_count);
-		g_object_unref(G_OBJECT(arg->v_pointer));
-	      }
-	    else if (g_type_is_a(gtype, G_TYPE_VALUE))
-	      {
-		GValue *gval = (GValue *) arg->v_pointer;
-		// Free/unref the GValue's contents.
-		g_value_unset(gval);
-		// Free the GValue.
-		g_slice_free1(sizeof(GValue), gval);
-	      }
-	    else if (g_type_is_a(gtype, G_TYPE_CLOSURE))
-	      {
-		g_closure_unref(arg->v_pointer);
-	      }
-
-	    g_base_info_unref(interface_info);
-	  }
-	break;
-      }
-    default:
-      break;
+			param_type = g_type_info_get_param_type(type_info, 0);
 
-    }
+			switch (g_type_info_get_tag(param_type))
+			{
+			case GI_TYPE_TAG_UTF8:
+				if (transfer == GI_TRANSFER_EVERYTHING)
+					g_strfreev(arg->v_pointer);
+				else if (transfer == GI_TRANSFER_CONTAINER)
+					g_free(arg->v_pointer);
+				break;
+			case GI_TYPE_TAG_GTYPE:
+			case GI_TYPE_TAG_FLOAT:
+			case GI_TYPE_TAG_UINT8:
+				g_free(arg->v_pointer);
+				break;
+			case GI_TYPE_TAG_INTERFACE:
+				// TODOOO FIXME
+				break;
+			default:
+				g_assert_not_reached();
+			}
 
-  return TRUE;
+			g_base_info_unref((GIBaseInfo *) param_type);
+		}
+		break;
+	case GI_TYPE_TAG_INTERFACE:
+		{
+			if (arg->v_pointer)
+			{
+				GIBaseInfo *interface_info;
+
+				interface_info = g_type_info_get_interface(type_info);
+
+				gtype =
+					g_registered_type_info_get_g_type((GIRegisteredTypeInfo *)
+													  interface_info);
+
+				if (g_type_is_a(gtype, G_TYPE_OBJECT)
+					|| g_type_is_a(gtype, G_TYPE_INTERFACE))
+				{
+					SEED_NOTE(MISC,
+							  "Unreffing object of type: %s in"
+							  "argument release. Reference count: %d\n",
+							  g_type_name(G_OBJECT_TYPE
+										  (G_OBJECT(arg->v_pointer))),
+							  G_OBJECT(arg->v_pointer)->ref_count);
+					g_object_unref(G_OBJECT(arg->v_pointer));
+				}
+				else if (g_type_is_a(gtype, G_TYPE_VALUE))
+				{
+					GValue *gval = (GValue *) arg->v_pointer;
+					// Free/unref the GValue's contents.
+					g_value_unset(gval);
+					// Free the GValue.
+					g_slice_free1(sizeof(GValue), gval);
+				}
+				else if (g_type_is_a(gtype, G_TYPE_CLOSURE))
+				{
+					g_closure_unref(arg->v_pointer);
+				}
+
+				g_base_info_unref(interface_info);
+			}
+			break;
+		}
+	default:
+		break;
+
+	}
+
+	return TRUE;
 }
 
 gboolean seed_gi_release_arg(GITransfer transfer,
-			     GITypeInfo * type_info, GArgument * arg)
+							 GITypeInfo * type_info, GArgument * arg)
 {
-  GITypeTag type_tag;
+	GITypeTag type_tag;
 
-  if (transfer == GI_TRANSFER_NOTHING)
-    return TRUE;
+	if (transfer == GI_TRANSFER_NOTHING)
+		return TRUE;
 
-  type_tag = g_type_info_get_tag((GITypeInfo *) type_info);
+	type_tag = g_type_info_get_tag((GITypeInfo *) type_info);
 
-  return seed_release_arg(transfer, type_info, type_tag, arg);
+	return seed_release_arg(transfer, type_info, type_tag, arg);
 }
 
 gboolean seed_gi_release_in_arg(GITransfer transfer,
-				GITypeInfo * type_info, GArgument * arg)
+								GITypeInfo * type_info, GArgument * arg)
 {
-  GITypeTag type_tag;
+	GITypeTag type_tag;
 
-  if (transfer == GI_TRANSFER_EVERYTHING)
-    return TRUE;
+	if (transfer == GI_TRANSFER_EVERYTHING)
+		return TRUE;
 
-  type_tag = g_type_info_get_tag((GITypeInfo *) type_info);
+	type_tag = g_type_info_get_tag((GITypeInfo *) type_info);
 
-  switch (type_tag)
-    {
-      // TODO: FIXME: Leaaaks?
-    case GI_TYPE_TAG_INTERFACE:
-      {
-	// TODO: FIXME: Need some safe way to look for GClosure.
-	break;
-      }
-    case GI_TYPE_TAG_UTF8:
-    case GI_TYPE_TAG_FILENAME:
-    case GI_TYPE_TAG_ARRAY:
-      return seed_release_arg(GI_TRANSFER_EVERYTHING,
-			      type_info, type_tag, arg);
-    default:
-      break;
-    }
+	switch (type_tag)
+	{
+		// TODO: FIXME: Leaaaks?
+	case GI_TYPE_TAG_INTERFACE:
+		{
+			// TODO: FIXME: Need some safe way to look for GClosure.
+			break;
+		}
+	case GI_TYPE_TAG_UTF8:
+	case GI_TYPE_TAG_FILENAME:
+	case GI_TYPE_TAG_ARRAY:
+		return seed_release_arg(GI_TRANSFER_EVERYTHING,
+								type_info, type_tag, arg);
+	default:
+		break;
+	}
 
-  return TRUE;
+	return TRUE;
 }
 
 static JSValueRef
 seed_gi_make_jsarray(JSContextRef ctx,
-		     void *array,
-		     GITypeInfo * param_type, JSValueRef * exception)
+					 void *array,
+					 GITypeInfo * param_type, JSValueRef * exception)
 {
-  GITypeTag element_type;
-  JSValueRef ret = JSValueMakeNull(ctx);
+	GITypeTag element_type;
+	JSValueRef ret = JSValueMakeNull(ctx);
 
-  element_type = g_type_info_get_tag(param_type);
+	element_type = g_type_info_get_tag(param_type);
 
-  if (element_type == GI_TYPE_TAG_UTF8)
-    {
-      JSValueRef *elements;
-      guint length, i;
-      gchar **str_array = (gchar **) array;
+	if (element_type == GI_TYPE_TAG_UTF8)
+	{
+		JSValueRef *elements;
+		guint length, i;
+		gchar **str_array = (gchar **) array;
+
+		length = g_strv_length(str_array);
+		if (!length)
+			return ret;
 
-      length = g_strv_length(str_array);
-      if (!length)
-	return ret;
+		elements = g_alloca(sizeof(JSValueRef) * length);
+		for (i = 0; i < length; ++i)
+		{
+			elements[i] = seed_value_from_string(ctx, str_array[i], exception);
+		}
 
-      elements = g_alloca(sizeof(JSValueRef) * length);
-      for (i = 0; i < length; ++i)
-	{
-	  elements[i] = seed_value_from_string(ctx, str_array[i], exception);
+		ret = (JSValueRef) JSObjectMakeArray(ctx, length, elements, exception);
 	}
 
-      ret = (JSValueRef) JSObjectMakeArray(ctx, length, elements, exception);
-    }
-
-  return ret;
+	return ret;
 }
 
 static gboolean
 seed_gi_make_array(JSContextRef ctx,
-		   JSValueRef array,
-		   guint length,
-		   GITypeInfo * param_type,
-		   void **array_p, JSValueRef * exception)
-{
-  GITypeTag element_type;
-
-  element_type = g_type_info_get_tag(param_type);
-
-  switch (element_type)
-    {
-    case GI_TYPE_TAG_UTF8:
-      {
-	char **result;
-	guint i;
-
-	result = g_new0(char *, length + 1);
-
-	for (i = 0; i < length; i++)
-	  {
-	    JSValueRef elem = JSObjectGetPropertyAtIndex(ctx,
-							 (JSObjectRef) array,
-							 i,
-							 exception);
-	    result[i] = seed_value_to_string(ctx, elem, exception);
-	  }
-
-	*array_p = result;
-      }
-      break;
-    case GI_TYPE_TAG_GTYPE:
-      {
-	GType *result;
-	guint i;
-
-	result = g_new0(GType, length + 1);
-
-	for (i = 0; i < length; i++)
-	  {
-	    JSValueRef elem = JSObjectGetPropertyAtIndex(ctx,
-							 (JSObjectRef) array,
-							 i,
-							 exception);
-	    result[i] = seed_value_to_int(ctx, elem, exception);
-	  }
-
-	*array_p = result;
-      }
-      break;
-    case GI_TYPE_TAG_FLOAT:
-      {
-	gfloat * result;
-	guint i;
-		
-	result = g_new0(gfloat, length+1);
-		
-	for (i = 0; i < length; i++)
-	  {
-	    JSValueRef elem = JSObjectGetPropertyAtIndex(ctx,
-							 (JSObjectRef) array,
-							 i,
-							 exception);
-	    result[i] = seed_value_to_float(ctx, elem, exception);
-	  }
-		
-	*array_p = result;
-      }
-      break;
-    case GI_TYPE_TAG_UINT8:
-      {
-	guint8 * result;
-	guint i;
-		
-	result = g_new0(guint8, length+1);
-		
-	for (i = 0; i < length; i++)
-	  {
-	    JSValueRef elem = JSObjectGetPropertyAtIndex(ctx,
-							 (JSObjectRef) array,
-							 i,
-							 exception);
-	    result[i] = seed_value_to_uchar(ctx, elem, exception);
-	  }
-		
-	*array_p = result;
-      }
-      break;
-    case GI_TYPE_TAG_INTERFACE:
-      {
-	GIBaseInfo *interface = 
-	  g_type_info_get_interface(param_type);
-	GIInfoType interface_type = g_base_info_get_type(interface);
-	if (interface_type == GI_INFO_TYPE_OBJECT
-	    || interface_type == GI_INFO_TYPE_INTERFACE
-	    || interface_type == GI_INFO_TYPE_STRUCT)
-	  {
-	    GType type =
-	      g_registered_type_info_get_g_type((GIRegisteredTypeInfo *) 
-						interface);
-	    if (g_type_is_a(type, G_TYPE_VALUE))
-	      {
-		GValue *result;
-		guint i;
-		
-		result = g_new0(GValue, length+1);
-		
-		for (i = 0; i < length; i++)
-		  {
-		    JSValueRef elem = JSObjectGetPropertyAtIndex(ctx,
-								 (JSObjectRef) array,
-								 i, 
-								 exception);
-		    seed_gvalue_from_seed_value(ctx, elem,
-						(GType) 0,
-						&result[i],
-						exception);
-		  }
-		*array_p = result;
-
-		g_base_info_unref(interface);
-		break;
-	      }
-	  }
-	  
-	  g_base_info_unref(interface);
-      }
-    default:
-      seed_make_exception(ctx, exception, "ArgumentError",
-			  "Unhandled array element type");
-      return FALSE;
-    }
+				   JSValueRef array,
+				   guint length,
+				   GITypeInfo * param_type,
+				   void **array_p, JSValueRef * exception)
+{
+	GITypeTag element_type;
 
-  return TRUE;
-}
+	element_type = g_type_info_get_tag(param_type);
 
-gboolean
-seed_gi_make_argument(JSContextRef ctx,
-		      JSValueRef value,
-		      GITypeInfo * type_info, GArgument * arg,
-		      JSValueRef * exception)
-{
-  GITypeTag gi_tag = g_type_info_get_tag(type_info);
-
-  // FIXME: Some types are not "nullable", also need to check if argument
-  // can be null before doing this.
-  if (!value || JSValueIsNull(ctx, value))
-    {
-      arg->v_pointer = 0;
-      return 1;
-    }
-
-  switch (gi_tag)
-    {
-    case GI_TYPE_TAG_VOID:
-      break;
-    case GI_TYPE_TAG_BOOLEAN:
-      arg->v_boolean = seed_value_to_boolean(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_INT8:
-      arg->v_int8 = seed_value_to_char(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_UINT8:
-      arg->v_uint8 = seed_value_to_uchar(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_INT16:
-      arg->v_int16 = seed_value_to_int(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_UINT16:
-      arg->v_uint16 = seed_value_to_uint(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_INT32:
-      arg->v_int32 = seed_value_to_int(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_UINT32:
-      arg->v_uint32 = seed_value_to_uint(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_LONG:
-    case GI_TYPE_TAG_INT64:
-      arg->v_int64 = seed_value_to_long(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_ULONG:
-    case GI_TYPE_TAG_UINT64:
-      arg->v_uint64 = seed_value_to_ulong(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_INT:
-      arg->v_int = seed_value_to_int(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_UINT:
-      arg->v_uint = seed_value_to_uint(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_SIZE:
-    case GI_TYPE_TAG_SSIZE:
-      arg->v_int = seed_value_to_int(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_FLOAT:
-      arg->v_float = seed_value_to_float(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_DOUBLE:
-      arg->v_double = seed_value_to_double(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_UTF8:
-      arg->v_string = seed_value_to_string(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_FILENAME:
-      arg->v_string = seed_value_to_filename(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_GTYPE:
-      arg->v_int = seed_value_to_int(ctx, value, exception);
-      break;
-    case GI_TYPE_TAG_INTERFACE:
-      {
-	GIBaseInfo *interface;
-	GIInfoType interface_type;
-	GType required_gtype;
-	GObject *gobject;
+	switch (element_type)
+	{
+	case GI_TYPE_TAG_UTF8:
+		{
+			char **result;
+			guint i;
+
+			result = g_new0(char *, length + 1);
+
+			for (i = 0; i < length; i++)
+			{
+				JSValueRef elem = JSObjectGetPropertyAtIndex(ctx,
+															 (JSObjectRef)
+															 array,
+															 i,
+															 exception);
+				result[i] = seed_value_to_string(ctx, elem, exception);
+			}
+
+			*array_p = result;
+		}
+		break;
+	case GI_TYPE_TAG_GTYPE:
+		{
+			GType *result;
+			guint i;
+
+			result = g_new0(GType, length + 1);
+
+			for (i = 0; i < length; i++)
+			{
+				JSValueRef elem = JSObjectGetPropertyAtIndex(ctx,
+															 (JSObjectRef)
+															 array,
+															 i,
+															 exception);
+				result[i] = seed_value_to_int(ctx, elem, exception);
+			}
+
+			*array_p = result;
+		}
+		break;
+	case GI_TYPE_TAG_FLOAT:
+		{
+			gfloat *result;
+			guint i;
 
-	interface = g_type_info_get_interface(type_info);
-	interface_type = g_base_info_get_type(interface);
+			result = g_new0(gfloat, length + 1);
 
-	arg->v_pointer = NULL;
+			for (i = 0; i < length; i++)
+			{
+				JSValueRef elem = JSObjectGetPropertyAtIndex(ctx,
+															 (JSObjectRef)
+															 array,
+															 i,
+															 exception);
+				result[i] = seed_value_to_float(ctx, elem, exception);
+			}
 
-	if (interface_type == GI_INFO_TYPE_OBJECT
-	    || interface_type == GI_INFO_TYPE_INTERFACE)
-	  {
-	    gobject = seed_value_to_object(ctx, value, exception);
-	    required_gtype =
-	      g_registered_type_info_get_g_type((GIRegisteredTypeInfo *)
-						interface);
-
-	    // FIXME: Not clear if the g_type_is_a check is desired here.
-	    // Possibly 'breaks things' when we don't have introspection
-	    // data for some things in an interface hierarchy. Hasn't
-	    // provided any problems so far.
-	    if (!gobject
-		|| !g_type_is_a(G_OBJECT_TYPE(gobject), required_gtype))
-	      {
-		g_base_info_unref(interface);
+			*array_p = result;
+		}
+		break;
+	case GI_TYPE_TAG_UINT8:
+		{
+			guint8 *result;
+			guint i;
+
+			result = g_new0(guint8, length + 1);
+
+			for (i = 0; i < length; i++)
+			{
+				JSValueRef elem = JSObjectGetPropertyAtIndex(ctx,
+															 (JSObjectRef)
+															 array,
+															 i,
+															 exception);
+				result[i] = seed_value_to_uchar(ctx, elem, exception);
+			}
+
+			*array_p = result;
+		}
+		break;
+	case GI_TYPE_TAG_INTERFACE:
+		{
+			GIBaseInfo *interface = g_type_info_get_interface(param_type);
+			GIInfoType interface_type = g_base_info_get_type(interface);
+			if (interface_type == GI_INFO_TYPE_OBJECT
+				|| interface_type == GI_INFO_TYPE_INTERFACE
+				|| interface_type == GI_INFO_TYPE_STRUCT)
+			{
+				GType type =
+					g_registered_type_info_get_g_type((GIRegisteredTypeInfo *)
+													  interface);
+				if (g_type_is_a(type, G_TYPE_VALUE))
+				{
+					GValue *result;
+					guint i;
+
+					result = g_new0(GValue, length + 1);
+
+					for (i = 0; i < length; i++)
+					{
+						JSValueRef elem = JSObjectGetPropertyAtIndex(ctx,
+																	 (JSObjectRef) array,
+																	 i,
+																	 exception);
+						seed_gvalue_from_seed_value(ctx, elem,
+													(GType) 0,
+													&result[i], exception);
+					}
+					*array_p = result;
+
+					g_base_info_unref(interface);
+					break;
+				}
+			}
+
+			g_base_info_unref(interface);
+		}
+	default:
+		seed_make_exception(ctx, exception, "ArgumentError",
+							"Unhandled array element type");
 		return FALSE;
-	      }
+	}
 
-	    arg->v_pointer = gobject;
-	    g_base_info_unref(interface);
-	    break;
-	  }
-	else if (interface_type == GI_INFO_TYPE_ENUM ||
-		 interface_type == GI_INFO_TYPE_FLAGS)
-	  {
-	    arg->v_long = seed_value_to_long(ctx, value, exception);
-	    g_base_info_unref(interface);
-	    break;
-	  }
-	else if (interface_type == GI_INFO_TYPE_STRUCT)
-	  {
-	    if (JSValueIsObjectOfClass(ctx, value, seed_struct_class))
-	      arg->v_pointer = seed_pointer_get_pointer(ctx, value);
-	    else
-	      {
-		GType type =
-		  g_registered_type_info_get_g_type((GIRegisteredTypeInfo
-						     *) interface);
-		if (!type)
-		  {
-		    g_base_info_unref(interface);
-		    return FALSE;
-		  }
-		else if (type == G_TYPE_VALUE)
-		  {
-		    GValue *gval = g_slice_alloc0(sizeof(GValue));
-		    seed_gvalue_from_seed_value(ctx,
-						value,
-						(GType) NULL,
-						gval, exception);
-		    arg->v_pointer = gval;
-
-		    g_base_info_unref(interface);
-		    break;
-		  }
-		// Automatically convert between functions and 
-		// GClosures where expected.
-		else if (g_type_is_a(type, G_TYPE_CLOSURE))
-		  {
-		    if (JSObjectIsFunction(ctx, (JSObjectRef) value))
-		      {
-			arg->v_pointer =
-			  seed_make_gclosure(ctx, (JSObjectRef) value, 0);
-		      }
-		  }
-		else
-		  {
-		    JSObjectRef strukt =
-		      seed_construct_struct_type_with_parameters(ctx,
-								 interface,
-								 (JSObjectRef) value,
-								 exception);
-		    arg->v_pointer = seed_pointer_get_pointer(ctx, strukt);
-		  }
-	      }
-	    g_base_info_unref(interface);
-	    break;
-	  }
-	else if (interface_type == GI_INFO_TYPE_CALLBACK)
-	  {
-	    if (JSValueIsNull(ctx, value))
-	      {
-		arg->v_pointer = NULL;
-		g_base_info_unref(interface);
-		break;
-	      }
-	    // Someone passes in a wrapper around a method where a 
-	    // callback is expected, i.e Clutter.sine_inc_func, as an alpha
-	    // Have to dlsym the symbol to be able to do this.
-	    // NOTE: Some cases where dlsym(NULL, symbol) doesn't work depending
-	    // On how libseed is loaded.
-	    else if (JSValueIsObjectOfClass(ctx,
-					    value, gobject_method_class))
-	      {
-		GIFunctionInfo *info =
-		  JSObjectGetPrivate((JSObjectRef) value);
-		const gchar *symbol = g_function_info_get_symbol(info);
-		gchar *error;
-		void *fp;
-
-		dlerror();
-		fp = (void *)dlsym(0, symbol);
-		if ((error = dlerror()) != NULL)
-		  {
-		    g_critical("dlerror: %s \n", error);
-		  }
-		else
-		  {
-		    arg->v_pointer = fp;
-		    g_base_info_unref(interface);
-		    break;
-		  }
-	      }
-	    // Somewhat deprecated from when it was necessary to manually
-	    // create closure objects...
-	    else if (JSValueIsObjectOfClass(ctx,
-					    value,
-					    seed_native_callback_class))
-	      {
-		SeedNativeClosure *privates =
-		  (SeedNativeClosure *)
-		  JSObjectGetPrivate((JSObjectRef) value);
-		arg->v_pointer = privates->closure;
-		g_base_info_unref(interface);
-		break;
-	      }
-	    // Automagically create closure around function passed in as 
-	    // callback. 
-	    else if (JSObjectIsFunction(ctx, (JSObjectRef) value))
-	      {
-		SeedNativeClosure *privates = seed_make_native_closure(ctx,
-								       (GICallableInfo *) interface,
-								       value);
-		arg->v_pointer = privates->closure;
-		g_base_info_unref(interface);
-		break;
-	      }
-
-	  }
-      }
-    case GI_TYPE_TAG_ARRAY:
-      {
-	if (JSValueIsNull(ctx, value))
-	  {
-	    arg->v_pointer = NULL;
-	    break;
-	  }
-	else if (!JSValueIsObject(ctx, value))
-	  {
-	    // TODO: FIXME: Is this right?
-	    return FALSE;
-	  }
-	else
-	  {
-	    GITypeInfo *param_type;
-	    //TODO: FIXME: Better array test like the cool one on reddit.
-	    guint length =
-	      seed_value_to_int(ctx, seed_object_get_property(ctx,
-							      (JSObjectRef) value,
-							      "length"),
-				exception);
-	    if (!length)
-	      {
-		arg->v_pointer = NULL;
-		break;
-	      }
-
-	    param_type = g_type_info_get_param_type(type_info, 0);
-	    if (!seed_gi_make_array(ctx, value, length, param_type,
-				    &arg->v_pointer, exception))
-	      {
-		g_base_info_unref((GIBaseInfo *) param_type);
+	return TRUE;
+}
+
+gboolean
+seed_gi_make_argument(JSContextRef ctx,
+					  JSValueRef value,
+					  GITypeInfo * type_info, GArgument * arg,
+					  JSValueRef * exception)
+{
+	GITypeTag gi_tag = g_type_info_get_tag(type_info);
+
+	// FIXME: Some types are not "nullable", also need to check if argument
+	// can be null before doing this.
+	if (!value || JSValueIsNull(ctx, value))
+	{
+		arg->v_pointer = 0;
+		return 1;
+	}
+
+	switch (gi_tag)
+	{
+	case GI_TYPE_TAG_VOID:
+		break;
+	case GI_TYPE_TAG_BOOLEAN:
+		arg->v_boolean = seed_value_to_boolean(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_INT8:
+		arg->v_int8 = seed_value_to_char(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_UINT8:
+		arg->v_uint8 = seed_value_to_uchar(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_INT16:
+		arg->v_int16 = seed_value_to_int(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_UINT16:
+		arg->v_uint16 = seed_value_to_uint(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_INT32:
+		arg->v_int32 = seed_value_to_int(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_UINT32:
+		arg->v_uint32 = seed_value_to_uint(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_LONG:
+	case GI_TYPE_TAG_INT64:
+		arg->v_int64 = seed_value_to_long(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_ULONG:
+	case GI_TYPE_TAG_UINT64:
+		arg->v_uint64 = seed_value_to_ulong(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_INT:
+		arg->v_int = seed_value_to_int(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_UINT:
+		arg->v_uint = seed_value_to_uint(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_SIZE:
+	case GI_TYPE_TAG_SSIZE:
+		arg->v_int = seed_value_to_int(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_FLOAT:
+		arg->v_float = seed_value_to_float(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_DOUBLE:
+		arg->v_double = seed_value_to_double(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_UTF8:
+		arg->v_string = seed_value_to_string(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_FILENAME:
+		arg->v_string = seed_value_to_filename(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_GTYPE:
+		arg->v_int = seed_value_to_int(ctx, value, exception);
+		break;
+	case GI_TYPE_TAG_INTERFACE:
+		{
+			GIBaseInfo *interface;
+			GIInfoType interface_type;
+			GType required_gtype;
+			GObject *gobject;
+
+			interface = g_type_info_get_interface(type_info);
+			interface_type = g_base_info_get_type(interface);
+
+			arg->v_pointer = NULL;
+
+			if (interface_type == GI_INFO_TYPE_OBJECT
+				|| interface_type == GI_INFO_TYPE_INTERFACE)
+			{
+				gobject = seed_value_to_object(ctx, value, exception);
+				required_gtype =
+					g_registered_type_info_get_g_type((GIRegisteredTypeInfo *)
+													  interface);
+
+				// FIXME: Not clear if the g_type_is_a check is desired here.
+				// Possibly 'breaks things' when we don't have introspection
+				// data for some things in an interface hierarchy. Hasn't
+				// provided any problems so far.
+				if (!gobject
+					|| !g_type_is_a(G_OBJECT_TYPE(gobject), required_gtype))
+				{
+					g_base_info_unref(interface);
+					return FALSE;
+				}
+
+				arg->v_pointer = gobject;
+				g_base_info_unref(interface);
+				break;
+			}
+			else if (interface_type == GI_INFO_TYPE_ENUM ||
+					 interface_type == GI_INFO_TYPE_FLAGS)
+			{
+				arg->v_long = seed_value_to_long(ctx, value, exception);
+				g_base_info_unref(interface);
+				break;
+			}
+			else if (interface_type == GI_INFO_TYPE_STRUCT)
+			{
+				if (JSValueIsObjectOfClass(ctx, value, seed_struct_class))
+					arg->v_pointer = seed_pointer_get_pointer(ctx, value);
+				else
+				{
+					GType type =
+						g_registered_type_info_get_g_type((GIRegisteredTypeInfo
+														   *) interface);
+					if (!type)
+					{
+						g_base_info_unref(interface);
+						return FALSE;
+					}
+					else if (type == G_TYPE_VALUE)
+					{
+						GValue *gval = g_slice_alloc0(sizeof(GValue));
+						seed_gvalue_from_seed_value(ctx,
+													value,
+													(GType) NULL,
+													gval, exception);
+						arg->v_pointer = gval;
+
+						g_base_info_unref(interface);
+						break;
+					}
+					// Automatically convert between functions and 
+					// GClosures where expected.
+					else if (g_type_is_a(type, G_TYPE_CLOSURE))
+					{
+						if (JSObjectIsFunction(ctx, (JSObjectRef) value))
+						{
+							arg->v_pointer =
+								seed_make_gclosure(ctx, (JSObjectRef) value, 0);
+						}
+					}
+					else
+					{
+						JSObjectRef strukt =
+							seed_construct_struct_type_with_parameters(ctx,
+																	   interface,
+																	   (JSObjectRef) value,
+																	   exception);
+						arg->v_pointer = seed_pointer_get_pointer(ctx, strukt);
+					}
+				}
+				g_base_info_unref(interface);
+				break;
+			}
+			else if (interface_type == GI_INFO_TYPE_CALLBACK)
+			{
+				if (JSValueIsNull(ctx, value))
+				{
+					arg->v_pointer = NULL;
+					g_base_info_unref(interface);
+					break;
+				}
+				// Someone passes in a wrapper around a method where a 
+				// callback is expected, i.e Clutter.sine_inc_func, as an alpha
+				// Have to dlsym the symbol to be able to do this.
+				// NOTE: Some cases where dlsym(NULL, symbol) doesn't work depending
+				// On how libseed is loaded.
+				else if (JSValueIsObjectOfClass(ctx,
+												value, gobject_method_class))
+				{
+					GIFunctionInfo *info =
+						JSObjectGetPrivate((JSObjectRef) value);
+					const gchar *symbol = g_function_info_get_symbol(info);
+					gchar *error;
+					void *fp;
+
+					dlerror();
+					fp = (void *)dlsym(0, symbol);
+					if ((error = dlerror()) != NULL)
+					{
+						g_critical("dlerror: %s \n", error);
+					}
+					else
+					{
+						arg->v_pointer = fp;
+						g_base_info_unref(interface);
+						break;
+					}
+				}
+				// Somewhat deprecated from when it was necessary to manually
+				// create closure objects...
+				else if (JSValueIsObjectOfClass(ctx,
+												value,
+												seed_native_callback_class))
+				{
+					SeedNativeClosure *privates =
+						(SeedNativeClosure *)
+						JSObjectGetPrivate((JSObjectRef) value);
+					arg->v_pointer = privates->closure;
+					g_base_info_unref(interface);
+					break;
+				}
+				// Automagically create closure around function passed in as 
+				// callback. 
+				else if (JSObjectIsFunction(ctx, (JSObjectRef) value))
+				{
+					SeedNativeClosure *privates = seed_make_native_closure(ctx,
+																		   (GICallableInfo *) interface,
+																		   value);
+					arg->v_pointer = privates->closure;
+					g_base_info_unref(interface);
+					break;
+				}
+
+			}
+		}
+	case GI_TYPE_TAG_ARRAY:
+		{
+			if (JSValueIsNull(ctx, value))
+			{
+				arg->v_pointer = NULL;
+				break;
+			}
+			else if (!JSValueIsObject(ctx, value))
+			{
+				// TODO: FIXME: Is this right?
+				return FALSE;
+			}
+			else
+			{
+				GITypeInfo *param_type;
+				//TODO: FIXME: Better array test like the cool one on reddit.
+				guint length =
+					seed_value_to_int(ctx, seed_object_get_property(ctx,
+																	(JSObjectRef) value,
+																	"length"),
+									  exception);
+				if (!length)
+				{
+					arg->v_pointer = NULL;
+					break;
+				}
+
+				param_type = g_type_info_get_param_type(type_info, 0);
+				if (!seed_gi_make_array(ctx, value, length, param_type,
+										&arg->v_pointer, exception))
+				{
+					g_base_info_unref((GIBaseInfo *) param_type);
+					return FALSE;
+				}
+				g_base_info_unref((GIBaseInfo *) param_type);
+				break;
+			}
+		}
+	default:
 		return FALSE;
-	      }
-	    g_base_info_unref((GIBaseInfo *) param_type);
-	    break;
-	  }
-      }
-    default:
-      return FALSE;
 
-    }
-  return TRUE;
+	}
+	return TRUE;
 
 }
 
 JSValueRef
 seed_gi_argument_make_js(JSContextRef ctx,
-			 GArgument * arg, GITypeInfo * type_info,
-			 JSValueRef * exception)
+						 GArgument * arg, GITypeInfo * type_info,
+						 JSValueRef * exception)
 {
-  GITypeTag gi_tag = g_type_info_get_tag(type_info);
-  switch (gi_tag)
-    {
-    case GI_TYPE_TAG_VOID:
-      return 0;
-    case GI_TYPE_TAG_BOOLEAN:
-      return seed_value_from_boolean(ctx, arg->v_boolean, exception);
-    case GI_TYPE_TAG_INT8:
-      return seed_value_from_char(ctx, arg->v_int8, exception);
-    case GI_TYPE_TAG_UINT8:
-      return seed_value_from_uchar(ctx, arg->v_uint8, exception);
-    case GI_TYPE_TAG_INT16:
-      return seed_value_from_int(ctx, arg->v_int16, exception);
-    case GI_TYPE_TAG_UINT16:
-      return seed_value_from_uint(ctx, arg->v_uint16, exception);
-    case GI_TYPE_TAG_INT32:
-      return seed_value_from_int(ctx, arg->v_int32, exception);
-    case GI_TYPE_TAG_UINT32:
-      return seed_value_from_uint(ctx, arg->v_uint32, exception);
-    case GI_TYPE_TAG_LONG:
-    case GI_TYPE_TAG_INT64:
-      return seed_value_from_long(ctx, arg->v_int64, exception);
-    case GI_TYPE_TAG_ULONG:
-    case GI_TYPE_TAG_UINT64:
-      return seed_value_from_ulong(ctx, arg->v_uint64, exception);
-    case GI_TYPE_TAG_INT:
-      return seed_value_from_int(ctx, arg->v_int32, exception);
-    case GI_TYPE_TAG_UINT:
-      return seed_value_from_uint(ctx, arg->v_uint32, exception);
-    case GI_TYPE_TAG_SSIZE:
-    case GI_TYPE_TAG_SIZE:
-      return seed_value_from_int(ctx, arg->v_int, exception);
-    case GI_TYPE_TAG_FLOAT:
-      return seed_value_from_float(ctx, arg->v_float, exception);
-    case GI_TYPE_TAG_DOUBLE:
-      return seed_value_from_double(ctx, arg->v_double, exception);
-    case GI_TYPE_TAG_UTF8:
-      return seed_value_from_string(ctx, arg->v_string, exception);
-    case GI_TYPE_TAG_FILENAME:
-      return seed_value_from_filename(ctx, arg->v_string, exception);
-    case GI_TYPE_TAG_GTYPE:
-      return seed_value_from_int(ctx, arg->v_int, exception);
-    case GI_TYPE_TAG_ARRAY:
-      {
-	GITypeInfo *param_type;
-	JSValueRef ret;
-
-	if (arg->v_pointer == NULL)
-	  return JSValueMakeNull(ctx);
-	if (!g_type_info_is_zero_terminated(type_info))
-	  break;
+	GITypeTag gi_tag = g_type_info_get_tag(type_info);
+	switch (gi_tag)
+	{
+	case GI_TYPE_TAG_VOID:
+		return 0;
+	case GI_TYPE_TAG_BOOLEAN:
+		return seed_value_from_boolean(ctx, arg->v_boolean, exception);
+	case GI_TYPE_TAG_INT8:
+		return seed_value_from_char(ctx, arg->v_int8, exception);
+	case GI_TYPE_TAG_UINT8:
+		return seed_value_from_uchar(ctx, arg->v_uint8, exception);
+	case GI_TYPE_TAG_INT16:
+		return seed_value_from_int(ctx, arg->v_int16, exception);
+	case GI_TYPE_TAG_UINT16:
+		return seed_value_from_uint(ctx, arg->v_uint16, exception);
+	case GI_TYPE_TAG_INT32:
+		return seed_value_from_int(ctx, arg->v_int32, exception);
+	case GI_TYPE_TAG_UINT32:
+		return seed_value_from_uint(ctx, arg->v_uint32, exception);
+	case GI_TYPE_TAG_LONG:
+	case GI_TYPE_TAG_INT64:
+		return seed_value_from_long(ctx, arg->v_int64, exception);
+	case GI_TYPE_TAG_ULONG:
+	case GI_TYPE_TAG_UINT64:
+		return seed_value_from_ulong(ctx, arg->v_uint64, exception);
+	case GI_TYPE_TAG_INT:
+		return seed_value_from_int(ctx, arg->v_int32, exception);
+	case GI_TYPE_TAG_UINT:
+		return seed_value_from_uint(ctx, arg->v_uint32, exception);
+	case GI_TYPE_TAG_SSIZE:
+	case GI_TYPE_TAG_SIZE:
+		return seed_value_from_int(ctx, arg->v_int, exception);
+	case GI_TYPE_TAG_FLOAT:
+		return seed_value_from_float(ctx, arg->v_float, exception);
+	case GI_TYPE_TAG_DOUBLE:
+		return seed_value_from_double(ctx, arg->v_double, exception);
+	case GI_TYPE_TAG_UTF8:
+		return seed_value_from_string(ctx, arg->v_string, exception);
+	case GI_TYPE_TAG_FILENAME:
+		return seed_value_from_filename(ctx, arg->v_string, exception);
+	case GI_TYPE_TAG_GTYPE:
+		return seed_value_from_int(ctx, arg->v_int, exception);
+	case GI_TYPE_TAG_ARRAY:
+		{
+			GITypeInfo *param_type;
+			JSValueRef ret;
 
-	param_type = g_type_info_get_param_type(type_info, 0);
+			if (arg->v_pointer == NULL)
+				return JSValueMakeNull(ctx);
+			if (!g_type_info_is_zero_terminated(type_info))
+				break;
 
-	ret = seed_gi_make_jsarray(ctx, arg->v_pointer, param_type,
-				   exception);
+			param_type = g_type_info_get_param_type(type_info, 0);
 
-	g_base_info_unref((GIBaseInfo *) param_type);
+			ret = seed_gi_make_jsarray(ctx, arg->v_pointer, param_type,
+									   exception);
 
-	return ret;
-      }
-    case GI_TYPE_TAG_INTERFACE:
-      {
-	GIBaseInfo *interface;
-	GIInfoType interface_type;
-
-	interface = g_type_info_get_interface(type_info);
-	interface_type = g_base_info_get_type(interface);
-
-	if (interface_type == GI_INFO_TYPE_OBJECT ||
-	    interface_type == GI_INFO_TYPE_INTERFACE)
-	  {
-	    if (arg->v_pointer == 0)
-	      {
-		g_base_info_unref(interface);
-		return JSValueMakeNull(ctx);
-	      }
-	    g_base_info_unref(interface);
-	    return seed_value_from_object(ctx, arg->v_pointer, exception);
-	  }
-	else if (interface_type == GI_INFO_TYPE_ENUM
-		 || interface_type == GI_INFO_TYPE_FLAGS)
-	  {
-	    g_base_info_unref(interface);
-	    return seed_value_from_double(ctx, arg->v_double, exception);
-	  }
-	else if (interface_type == GI_INFO_TYPE_STRUCT)
-	  {
-	    JSValueRef strukt;
-
-	    strukt = seed_make_struct(ctx, arg->v_pointer, interface);
-	    g_base_info_unref(interface);
-
-	    return strukt;
-	  }
-      }
-    case GI_TYPE_TAG_GLIST:
-      {
-	GITypeInfo *list_type;
-	JSObjectRef ret;
-	GArgument larg;
-	gint i = 0;
-	GList *list = arg->v_pointer;
-
-	ret = JSObjectMakeArray(ctx, 0, NULL, exception);
-	list_type = g_type_info_get_param_type(type_info, 0);
-
-	for (; list != NULL; list = list->next)
-	  {
-	    JSValueRef ival;
-
-	    larg.v_pointer = list->data;
-	    ival =
-	      (JSValueRef) seed_gi_argument_make_js(ctx, &larg,
-						    list_type, exception);
-	    if (!ival)
-	      ival = JSValueMakeNull(ctx);
-	    JSObjectSetPropertyAtIndex(ctx, ret, i, ival, NULL);
-	    i++;
-	  }
-	return ret;
+			g_base_info_unref((GIBaseInfo *) param_type);
 
-      }
-    case GI_TYPE_TAG_GSLIST:
-      {
-	GITypeInfo *list_type;
-	JSObjectRef ret;
-	GArgument larg;
-	gint i = 0;
-	GSList *list = arg->v_pointer;
-
-	ret = JSObjectMakeArray(ctx, 0, NULL, exception);
-	list_type = g_type_info_get_param_type(type_info, 0);
-
-	for (; list != NULL; list = list->next)
-	  {
-	    JSValueRef ival;
-
-	    larg.v_pointer = list->data;
-	    ival =
-	      (JSValueRef) seed_gi_argument_make_js(ctx, &larg,
-						    list_type, exception);
-	    if (!ival)
-	      ival = JSValueMakeNull(ctx);
-	    JSObjectSetPropertyAtIndex(ctx, ret, i, ival, NULL);
-	    i++;
-	  }
-	return ret;
-      }
+			return ret;
+		}
+	case GI_TYPE_TAG_INTERFACE:
+		{
+			GIBaseInfo *interface;
+			GIInfoType interface_type;
+
+			interface = g_type_info_get_interface(type_info);
+			interface_type = g_base_info_get_type(interface);
+
+			if (interface_type == GI_INFO_TYPE_OBJECT ||
+				interface_type == GI_INFO_TYPE_INTERFACE)
+			{
+				if (arg->v_pointer == 0)
+				{
+					g_base_info_unref(interface);
+					return JSValueMakeNull(ctx);
+				}
+				g_base_info_unref(interface);
+				return seed_value_from_object(ctx, arg->v_pointer, exception);
+			}
+			else if (interface_type == GI_INFO_TYPE_ENUM
+					 || interface_type == GI_INFO_TYPE_FLAGS)
+			{
+				g_base_info_unref(interface);
+				return seed_value_from_double(ctx, arg->v_double, exception);
+			}
+			else if (interface_type == GI_INFO_TYPE_STRUCT)
+			{
+				JSValueRef strukt;
 
-    default:
-      return FALSE;
+				strukt = seed_make_struct(ctx, arg->v_pointer, interface);
+				g_base_info_unref(interface);
+
+				return strukt;
+			}
+		}
+	case GI_TYPE_TAG_GLIST:
+		{
+			GITypeInfo *list_type;
+			JSObjectRef ret;
+			GArgument larg;
+			gint i = 0;
+			GList *list = arg->v_pointer;
+
+			ret = JSObjectMakeArray(ctx, 0, NULL, exception);
+			list_type = g_type_info_get_param_type(type_info, 0);
+
+			for (; list != NULL; list = list->next)
+			{
+				JSValueRef ival;
+
+				larg.v_pointer = list->data;
+				ival =
+					(JSValueRef) seed_gi_argument_make_js(ctx, &larg,
+														  list_type, exception);
+				if (!ival)
+					ival = JSValueMakeNull(ctx);
+				JSObjectSetPropertyAtIndex(ctx, ret, i, ival, NULL);
+				i++;
+			}
+			return ret;
 
-    }
-  return 0;
+		}
+	case GI_TYPE_TAG_GSLIST:
+		{
+			GITypeInfo *list_type;
+			JSObjectRef ret;
+			GArgument larg;
+			gint i = 0;
+			GSList *list = arg->v_pointer;
+
+			ret = JSObjectMakeArray(ctx, 0, NULL, exception);
+			list_type = g_type_info_get_param_type(type_info, 0);
+
+			for (; list != NULL; list = list->next)
+			{
+				JSValueRef ival;
+
+				larg.v_pointer = list->data;
+				ival =
+					(JSValueRef) seed_gi_argument_make_js(ctx, &larg,
+														  list_type, exception);
+				if (!ival)
+					ival = JSValueMakeNull(ctx);
+				JSObjectSetPropertyAtIndex(ctx, ret, i, ival, NULL);
+				i++;
+			}
+			return ret;
+		}
+
+	default:
+		return FALSE;
+
+	}
+	return 0;
 }
 
 JSValueRef seed_value_from_gvalue(JSContextRef ctx,
-				  GValue * gval, JSValueRef * exception)
+								  GValue * gval, JSValueRef * exception)
 {
-  if (!G_IS_VALUE(gval))
-    {
-      return false;
-    }
-  switch (G_VALUE_TYPE(gval))
-    {
-    case G_TYPE_BOOLEAN:
-      return seed_value_from_boolean(ctx,
-				     g_value_get_boolean(gval), exception);
-    case G_TYPE_CHAR:
-      return seed_value_from_char(ctx, g_value_get_char(gval), exception);
-    case G_TYPE_UCHAR:
-      return seed_value_from_uchar(ctx, g_value_get_uchar(gval), exception);
-    case G_TYPE_INT:
-      return seed_value_from_int(ctx, g_value_get_int(gval), exception);
-    case G_TYPE_UINT:
-      return seed_value_from_uint(ctx, g_value_get_uint(gval), exception);
-    case G_TYPE_LONG:
-      return seed_value_from_long(ctx, g_value_get_long(gval), exception);
-    case G_TYPE_ULONG:
-      return seed_value_from_ulong(ctx, g_value_get_ulong(gval), exception);
-    case G_TYPE_INT64:
-      return seed_value_from_int64(ctx, g_value_get_int64(gval), exception);
-    case G_TYPE_UINT64:
-      return seed_value_from_uint64(ctx, g_value_get_uint64(gval), exception);
-    case G_TYPE_FLOAT:
-      return seed_value_from_float(ctx, g_value_get_float(gval), exception);
-    case G_TYPE_DOUBLE:
-      return seed_value_from_double(ctx, g_value_get_double(gval), exception);
-    case G_TYPE_STRING:
-      return seed_value_from_string(ctx, (gchar *)
-				    g_value_get_string(gval), exception);
-    case G_TYPE_POINTER:
-      return seed_make_pointer(ctx, g_value_get_pointer(gval));
-    case G_TYPE_PARAM:
-      // Might need to dup and make a boxed.
-      return seed_make_pointer(ctx, g_value_get_param(gval));
-    }
-
-  if (g_type_is_a(G_VALUE_TYPE(gval), G_TYPE_ENUM) ||
-      g_type_is_a(G_VALUE_TYPE(gval), G_TYPE_FLAGS))
-    return seed_value_from_long(ctx, gval->data[0].v_long, exception);
-  else if (g_type_is_a(G_VALUE_TYPE(gval), G_TYPE_ENUM))
-    return seed_value_from_long(ctx, gval->data[0].v_long, exception);
-  else if (g_type_is_a(G_VALUE_TYPE(gval), G_TYPE_OBJECT))
-    {
-      GObject *obj = g_value_get_object(gval);
-      return seed_value_from_object(ctx, obj, exception);
-    }
-  else
-    {
-      GIBaseInfo *info;
-      GIInfoType type;
-
-      info = g_irepository_find_by_gtype(0, G_VALUE_TYPE(gval));
-      if (!info)
-	return FALSE;
-      type = g_base_info_get_type(info);
-
-      if (type == GI_INFO_TYPE_UNION)
+	if (!G_IS_VALUE(gval))
 	{
-	  return seed_make_union(ctx, g_value_peek_pointer(gval), info);
+		return false;
 	}
-      else if (type == GI_INFO_TYPE_STRUCT)
+	switch (G_VALUE_TYPE(gval))
 	{
-	  return seed_make_struct(ctx, g_value_peek_pointer(gval), info);
+	case G_TYPE_BOOLEAN:
+		return seed_value_from_boolean(ctx,
+									   g_value_get_boolean(gval), exception);
+	case G_TYPE_CHAR:
+		return seed_value_from_char(ctx, g_value_get_char(gval), exception);
+	case G_TYPE_UCHAR:
+		return seed_value_from_uchar(ctx, g_value_get_uchar(gval), exception);
+	case G_TYPE_INT:
+		return seed_value_from_int(ctx, g_value_get_int(gval), exception);
+	case G_TYPE_UINT:
+		return seed_value_from_uint(ctx, g_value_get_uint(gval), exception);
+	case G_TYPE_LONG:
+		return seed_value_from_long(ctx, g_value_get_long(gval), exception);
+	case G_TYPE_ULONG:
+		return seed_value_from_ulong(ctx, g_value_get_ulong(gval), exception);
+	case G_TYPE_INT64:
+		return seed_value_from_int64(ctx, g_value_get_int64(gval), exception);
+	case G_TYPE_UINT64:
+		return seed_value_from_uint64(ctx, g_value_get_uint64(gval), exception);
+	case G_TYPE_FLOAT:
+		return seed_value_from_float(ctx, g_value_get_float(gval), exception);
+	case G_TYPE_DOUBLE:
+		return seed_value_from_double(ctx, g_value_get_double(gval), exception);
+	case G_TYPE_STRING:
+		return seed_value_from_string(ctx, (gchar *)
+									  g_value_get_string(gval), exception);
+	case G_TYPE_POINTER:
+		return seed_make_pointer(ctx, g_value_get_pointer(gval));
+	case G_TYPE_PARAM:
+		// Might need to dup and make a boxed.
+		return seed_make_pointer(ctx, g_value_get_param(gval));
 	}
-      else if (type == GI_INFO_TYPE_BOXED)
+
+	if (g_type_is_a(G_VALUE_TYPE(gval), G_TYPE_ENUM) ||
+		g_type_is_a(G_VALUE_TYPE(gval), G_TYPE_FLAGS))
+		return seed_value_from_long(ctx, gval->data[0].v_long, exception);
+	else if (g_type_is_a(G_VALUE_TYPE(gval), G_TYPE_ENUM))
+		return seed_value_from_long(ctx, gval->data[0].v_long, exception);
+	else if (g_type_is_a(G_VALUE_TYPE(gval), G_TYPE_OBJECT))
 	{
-	  return seed_make_boxed(ctx, g_value_dup_boxed(gval), info);
+		GObject *obj = g_value_get_object(gval);
+		return seed_value_from_object(ctx, obj, exception);
 	}
+	else
+	{
+		GIBaseInfo *info;
+		GIInfoType type;
 
-    }
+		info = g_irepository_find_by_gtype(0, G_VALUE_TYPE(gval));
+		if (!info)
+			return FALSE;
+		type = g_base_info_get_type(info);
 
-  return NULL;
+		if (type == GI_INFO_TYPE_UNION)
+		{
+			return seed_make_union(ctx, g_value_peek_pointer(gval), info);
+		}
+		else if (type == GI_INFO_TYPE_STRUCT)
+		{
+			return seed_make_struct(ctx, g_value_peek_pointer(gval), info);
+		}
+		else if (type == GI_INFO_TYPE_BOXED)
+		{
+			return seed_make_boxed(ctx, g_value_dup_boxed(gval), info);
+		}
+
+	}
+
+	return NULL;
 }
 
 gboolean
 seed_gvalue_from_seed_value(JSContextRef ctx,
-			    JSValueRef val,
-			    GType type, GValue * ret, JSValueRef * exception)
+							JSValueRef val,
+							GType type, GValue * ret, JSValueRef * exception)
 {
-  switch (type)
-    {
-    case G_TYPE_BOOLEAN:
-      {
-	g_value_init(ret, G_TYPE_BOOLEAN);
-	g_value_set_boolean(ret, seed_value_to_boolean(ctx,
-						       val, exception));
-	return TRUE;
-      }
-    case G_TYPE_INT:
-    case G_TYPE_UINT:
-      {
-	g_value_init(ret, type);
-	if (type == G_TYPE_INT)
-	  g_value_set_int(ret, seed_value_to_int(ctx, val, exception));
-	else
-	  g_value_set_uint(ret, seed_value_to_uint(ctx, val, exception));
-	return TRUE;
-      }
-    case G_TYPE_CHAR:
-      {
-	g_value_init(ret, G_TYPE_CHAR);
-	g_value_set_char(ret, seed_value_to_char(ctx, val, exception));
-	return TRUE;
-      }
-    case G_TYPE_UCHAR:
-      {
-	g_value_init(ret, G_TYPE_UCHAR);
-	g_value_set_uchar(ret, seed_value_to_uchar(ctx, val, exception));
-	return TRUE;
-      }
-    case G_TYPE_LONG:
-    case G_TYPE_ULONG:
-    case G_TYPE_INT64:
-    case G_TYPE_UINT64:
-    case G_TYPE_FLOAT:
-    case G_TYPE_DOUBLE:
-      {
 	switch (type)
-	  {
-	  case G_TYPE_LONG:
-	    g_value_init(ret, G_TYPE_LONG);
-	    g_value_set_long(ret, seed_value_to_long(ctx, val, exception));
-	    break;
-	  case G_TYPE_ULONG:
-	    g_value_init(ret, G_TYPE_ULONG);
-	    g_value_set_ulong(ret, seed_value_to_ulong(ctx,
-						       val, exception));
-	    break;
-	  case G_TYPE_INT64:
-	    g_value_init(ret, G_TYPE_INT64);
-	    g_value_set_int64(ret, seed_value_to_int64(ctx,
-						       val, exception));
-	    break;
-	  case G_TYPE_UINT64:
-	    g_value_init(ret, G_TYPE_UINT64);
-	    g_value_set_uint64(ret, seed_value_to_uint64(ctx,
-							 val, exception));
-	    break;
-	  case G_TYPE_FLOAT:
-	    g_value_init(ret, G_TYPE_FLOAT);
-	    g_value_set_float(ret, seed_value_to_float(ctx,
-						       val, exception));
-	    break;
-	  case G_TYPE_DOUBLE:
-	    g_value_init(ret, G_TYPE_DOUBLE);
-	    g_value_set_double(ret, seed_value_to_double(ctx,
-							 val, exception));
-	    break;
-	  }
-	return TRUE;
-      }
-    case G_TYPE_STRING:
-      {
-	gchar *cval = seed_value_to_string(ctx, val, exception);
+	{
+	case G_TYPE_BOOLEAN:
+		{
+			g_value_init(ret, G_TYPE_BOOLEAN);
+			g_value_set_boolean(ret, seed_value_to_boolean(ctx,
+														   val, exception));
+			return TRUE;
+		}
+	case G_TYPE_INT:
+	case G_TYPE_UINT:
+		{
+			g_value_init(ret, type);
+			if (type == G_TYPE_INT)
+				g_value_set_int(ret, seed_value_to_int(ctx, val, exception));
+			else
+				g_value_set_uint(ret, seed_value_to_uint(ctx, val, exception));
+			return TRUE;
+		}
+	case G_TYPE_CHAR:
+		{
+			g_value_init(ret, G_TYPE_CHAR);
+			g_value_set_char(ret, seed_value_to_char(ctx, val, exception));
+			return TRUE;
+		}
+	case G_TYPE_UCHAR:
+		{
+			g_value_init(ret, G_TYPE_UCHAR);
+			g_value_set_uchar(ret, seed_value_to_uchar(ctx, val, exception));
+			return TRUE;
+		}
+	case G_TYPE_LONG:
+	case G_TYPE_ULONG:
+	case G_TYPE_INT64:
+	case G_TYPE_UINT64:
+	case G_TYPE_FLOAT:
+	case G_TYPE_DOUBLE:
+		{
+			switch (type)
+			{
+			case G_TYPE_LONG:
+				g_value_init(ret, G_TYPE_LONG);
+				g_value_set_long(ret, seed_value_to_long(ctx, val, exception));
+				break;
+			case G_TYPE_ULONG:
+				g_value_init(ret, G_TYPE_ULONG);
+				g_value_set_ulong(ret, seed_value_to_ulong(ctx,
+														   val, exception));
+				break;
+			case G_TYPE_INT64:
+				g_value_init(ret, G_TYPE_INT64);
+				g_value_set_int64(ret, seed_value_to_int64(ctx,
+														   val, exception));
+				break;
+			case G_TYPE_UINT64:
+				g_value_init(ret, G_TYPE_UINT64);
+				g_value_set_uint64(ret, seed_value_to_uint64(ctx,
+															 val, exception));
+				break;
+			case G_TYPE_FLOAT:
+				g_value_init(ret, G_TYPE_FLOAT);
+				g_value_set_float(ret, seed_value_to_float(ctx,
+														   val, exception));
+				break;
+			case G_TYPE_DOUBLE:
+				g_value_init(ret, G_TYPE_DOUBLE);
+				g_value_set_double(ret, seed_value_to_double(ctx,
+															 val, exception));
+				break;
+			}
+			return TRUE;
+		}
+	case G_TYPE_STRING:
+		{
+			gchar *cval = seed_value_to_string(ctx, val, exception);
 
-	g_value_init(ret, G_TYPE_STRING);
-	g_value_take_string(ret, cval);
+			g_value_init(ret, G_TYPE_STRING);
+			g_value_take_string(ret, cval);
 
-	return TRUE;
-      }
-    default:
-      {
-	// TODO: FIXME: This whole undefined type area
-	// needs some heaaavy improvement.
-
-	// Support [GObject.TYPE_INT, 3]
-	// TODO: FIXME: Might crash.
-	if (type == 0 && JSValueIsObject(ctx, val))
-	  {
-	    // TODO: FIXME: Better array test like the cool one on reddit.
-	    guint length = seed_value_to_int(ctx,
-					     seed_object_get_property(ctx,
-								      (JSObjectRef) val,
-								      "length"),
-					     exception);
-
-	    if (length)
-	      {
-		type = seed_value_to_int(ctx,
-					 JSObjectGetPropertyAtIndex(ctx,
-								    (JSObjectRef)
-								    val, 0,
-								    exception),
-					 exception);
-		val =
-		  JSObjectGetPropertyAtIndex(ctx, (JSObjectRef) val, 1,
-					     exception);
-		if (type)	// Prevents recursion.
-		  {
-		    return seed_gvalue_from_seed_value(ctx, val,
-						       type, ret,
-						       exception);
-		  }
-		// TODO: FIXME: Handle better?
-		else
-		  g_assert_not_reached();
-	      }
-	  }
-	switch (JSValueGetType(ctx, val))
-	  {
-	  case kJSTypeBoolean:
-	    {
-	      g_value_init(ret, G_TYPE_BOOLEAN);
-	      g_value_set_boolean(ret,
-				  seed_value_to_boolean(ctx,
-							val, exception));
-	      return TRUE;
-	    }
-	  case kJSTypeNumber:
-	    {
-	      g_value_init(ret, G_TYPE_DOUBLE);
-	      g_value_set_double(ret,
-				 seed_value_to_double(ctx,
-						      val, exception));
-	      return TRUE;
-	    }
-	  case kJSTypeString:
-	    {
-	      gchar *cv = seed_value_to_string(ctx, val,
-					       exception);
-
-	      g_value_init(ret, G_TYPE_STRING);
-	      g_value_take_string(ret, cv);
-	      return TRUE;
-	    }
-	  default:
-	    break;
-	  }
-	break;
-      }
-    }
-
-  if (g_type_is_a(type, G_TYPE_ENUM) && JSValueIsNumber(ctx, val))
-    {
-      g_value_init(ret, type);
-      ret->data[0].v_long = seed_value_to_long(ctx, val, exception);
-      return TRUE;
-    }
-  else if (g_type_is_a(type, G_TYPE_FLAGS) && JSValueIsNumber(ctx, val))
-    {
-      g_value_init(ret, type);
-      ret->data[0].v_long = seed_value_to_long(ctx, val, exception);
-      return TRUE;
-    }
-  else if (g_type_is_a(type, G_TYPE_OBJECT)
-	   && (JSValueIsNull(ctx, val) || seed_value_is_gobject(ctx, val)))
-    {
-      GObject *o = seed_value_to_object(ctx,
-					val, exception);
-
-      if (o == NULL || g_type_is_a(G_OBJECT_TYPE(o), type))
-	{
-	  g_value_init(ret, G_TYPE_OBJECT);
-	  g_value_set_object(ret, o);
-
-	  return TRUE;
-	}
-    }
-  /* Boxed handling is broken. Will be fixed in struct overhall. */
-  else if (g_type_is_a(type, G_TYPE_BOXED))
-    {
-      gpointer p = seed_pointer_get_pointer(ctx, val);
-      if (p)
-	{
-	  g_value_init(ret, type);
-	  g_value_set_boxed(ret, p);
-	  return TRUE;
-	}
-      else
-	{
-	  if (JSValueIsObject(ctx, val))
-	    {
-	      GIBaseInfo *info = g_irepository_find_by_gtype(0, type);
-	      JSObjectRef new_struct;
-	      if (!info)
-		return FALSE;
+			return TRUE;
+		}
+	default:
+		{
+			// TODO: FIXME: This whole undefined type area
+			// needs some heaaavy improvement.
 
-	      new_struct =
-		seed_construct_struct_type_with_parameters(ctx,
-							   info,
-							   (JSObjectRef)
-							   val, exception);
-	      p = seed_pointer_get_pointer(ctx, new_struct);
-	      if (p)
-		{
-		  g_value_init(ret, type);
-		  g_value_set_boxed(ret, p);
-		  g_base_info_unref(info);
-		  return TRUE;
+			// Support [GObject.TYPE_INT, 3]
+			// TODO: FIXME: Might crash.
+			if (type == 0 && JSValueIsObject(ctx, val))
+			{
+				// TODO: FIXME: Better array test like the cool one on reddit.
+				guint length = seed_value_to_int(ctx,
+												 seed_object_get_property(ctx,
+																		  (JSObjectRef) val,
+																		  "length"),
+												 exception);
+
+				if (length)
+				{
+					type = seed_value_to_int(ctx,
+											 JSObjectGetPropertyAtIndex(ctx,
+																		(JSObjectRef)
+																		val, 0,
+																		exception),
+											 exception);
+					val =
+						JSObjectGetPropertyAtIndex(ctx, (JSObjectRef) val, 1,
+												   exception);
+					if (type)	// Prevents recursion.
+					{
+						return seed_gvalue_from_seed_value(ctx, val,
+														   type, ret,
+														   exception);
+					}
+					// TODO: FIXME: Handle better?
+					else
+						g_assert_not_reached();
+				}
+			}
+			switch (JSValueGetType(ctx, val))
+			{
+			case kJSTypeBoolean:
+				{
+					g_value_init(ret, G_TYPE_BOOLEAN);
+					g_value_set_boolean(ret,
+										seed_value_to_boolean(ctx,
+															  val, exception));
+					return TRUE;
+				}
+			case kJSTypeNumber:
+				{
+					g_value_init(ret, G_TYPE_DOUBLE);
+					g_value_set_double(ret,
+									   seed_value_to_double(ctx,
+															val, exception));
+					return TRUE;
+				}
+			case kJSTypeString:
+				{
+					gchar *cv = seed_value_to_string(ctx, val,
+													 exception);
+
+					g_value_init(ret, G_TYPE_STRING);
+					g_value_take_string(ret, cv);
+					return TRUE;
+				}
+			default:
+				break;
+			}
+			break;
 		}
-	      g_base_info_unref(info);
-	    }
 	}
-    }
 
-  return FALSE;
+	if (g_type_is_a(type, G_TYPE_ENUM) && JSValueIsNumber(ctx, val))
+	{
+		g_value_init(ret, type);
+		ret->data[0].v_long = seed_value_to_long(ctx, val, exception);
+		return TRUE;
+	}
+	else if (g_type_is_a(type, G_TYPE_FLAGS) && JSValueIsNumber(ctx, val))
+	{
+		g_value_init(ret, type);
+		ret->data[0].v_long = seed_value_to_long(ctx, val, exception);
+		return TRUE;
+	}
+	else if (g_type_is_a(type, G_TYPE_OBJECT)
+			 && (JSValueIsNull(ctx, val) || seed_value_is_gobject(ctx, val)))
+	{
+		GObject *o = seed_value_to_object(ctx,
+										  val, exception);
+
+		if (o == NULL || g_type_is_a(G_OBJECT_TYPE(o), type))
+		{
+			g_value_init(ret, G_TYPE_OBJECT);
+			g_value_set_object(ret, o);
+
+			return TRUE;
+		}
+	}
+	/* Boxed handling is broken. Will be fixed in struct overhall. */
+	else if (g_type_is_a(type, G_TYPE_BOXED))
+	{
+		gpointer p = seed_pointer_get_pointer(ctx, val);
+		if (p)
+		{
+			g_value_init(ret, type);
+			g_value_set_boxed(ret, p);
+			return TRUE;
+		}
+		else
+		{
+			if (JSValueIsObject(ctx, val))
+			{
+				GIBaseInfo *info = g_irepository_find_by_gtype(0, type);
+				JSObjectRef new_struct;
+				if (!info)
+					return FALSE;
+
+				new_struct =
+					seed_construct_struct_type_with_parameters(ctx,
+															   info,
+															   (JSObjectRef)
+															   val, exception);
+				p = seed_pointer_get_pointer(ctx, new_struct);
+				if (p)
+				{
+					g_value_init(ret, type);
+					g_value_set_boxed(ret, p);
+					g_base_info_unref(info);
+					return TRUE;
+				}
+				g_base_info_unref(info);
+			}
+		}
+	}
+
+	return FALSE;
 }
 
 JSValueRef seed_object_get_property(JSContextRef ctx,
-				    JSObjectRef val, const gchar * name)
+									JSObjectRef val, const gchar * name)
 {
 
-  JSStringRef jname = JSStringCreateWithUTF8CString(name);
-  JSValueRef ret = JSObjectGetProperty(ctx,
-				       (JSObjectRef) val,
-				       jname, NULL);
+	JSStringRef jname = JSStringCreateWithUTF8CString(name);
+	JSValueRef ret = JSObjectGetProperty(ctx,
+										 (JSObjectRef) val,
+										 jname, NULL);
 
-  JSStringRelease(jname);
+	JSStringRelease(jname);
 
-  return ret;
+	return ret;
 }
 
 gboolean
 seed_object_set_property(JSContextRef ctx, JSObjectRef object,
-			 const gchar * name, JSValueRef value)
+						 const gchar * name, JSValueRef value)
 {
-  JSStringRef jname = JSStringCreateWithUTF8CString(name);
+	JSStringRef jname = JSStringCreateWithUTF8CString(name);
 
-  if (value)
-    {
-      JSObjectSetProperty(ctx, (JSObjectRef) object, jname, value, 0, 0);
-    }
+	if (value)
+	{
+		JSObjectSetProperty(ctx, (JSObjectRef) object, jname, value, 0, 0);
+	}
 
-  JSStringRelease(jname);
+	JSStringRelease(jname);
 
-  return TRUE;
+	return TRUE;
 }
 
 /* TODO: Make some macros or something for making exceptions, code is littered
    with annoyingness right now */
 gboolean seed_value_to_boolean(JSContextRef ctx,
-			       JSValueRef val, JSValueRef * exception)
+							   JSValueRef val, JSValueRef * exception)
 {
-  if (!JSValueIsBoolean(ctx, val))
-    {
-      if (!JSValueIsNull(ctx, val))
+	if (!JSValueIsBoolean(ctx, val))
 	{
-	  seed_make_exception(eng->context, exception, "ConversionError",
-			      "Can not convert Javascript value to boolean");
-	  return 0;
-	}
+		if (!JSValueIsNull(ctx, val))
+		{
+			seed_make_exception(eng->context, exception, "ConversionError",
+								"Can not convert Javascript value to boolean");
+			return 0;
+		}
 
-      return 0;
-    }
+		return 0;
+	}
 
-  return JSValueToBoolean(ctx, val);
+	return JSValueToBoolean(ctx, val);
 }
 
 JSValueRef seed_value_from_boolean(JSContextRef ctx,
-				   gboolean val, JSValueRef * exception)
+								   gboolean val, JSValueRef * exception)
 {
-  return JSValueMakeBoolean(ctx, val);
+	return JSValueMakeBoolean(ctx, val);
 }
 
 guint seed_value_to_uint(JSContextRef ctx,
-			 JSValueRef val, JSValueRef * exception)
+						 JSValueRef val, JSValueRef * exception)
 {
-  if (!JSValueIsNumber(ctx, val))
-    {
-      if (!JSValueIsNull(ctx, val))
+	if (!JSValueIsNumber(ctx, val))
 	{
-	  seed_make_exception(ctx, exception, "ConversionError",
-			      "Can not convert Javascript value to"
-			      " boolean");
+		if (!JSValueIsNull(ctx, val))
+		{
+			seed_make_exception(ctx, exception, "ConversionError",
+								"Can not convert Javascript value to"
+								" boolean");
+		}
+		return 0;
 	}
-      return 0;
-    }
 
-  return (guint) JSValueToNumber(ctx, val, NULL);
+	return (guint) JSValueToNumber(ctx, val, NULL);
 }
 
 JSValueRef seed_value_from_uint(JSContextRef ctx,
-				guint val, JSValueRef * exception)
+								guint val, JSValueRef * exception)
 {
-  return JSValueMakeNumber(ctx, (gdouble) val);
+	return JSValueMakeNumber(ctx, (gdouble) val);
 }
 
 gint seed_value_to_int(JSContextRef ctx, JSValueRef val, JSValueRef * exception)
 {
-  if (!JSValueIsNumber(ctx, val))
-    {
-      if (!JSValueIsNull(ctx, val))
-	seed_make_exception(ctx, exception, "ConversionError",
-			    "Can not convert Javascript value to" " int");
-      return 0;
-    }
+	if (!JSValueIsNumber(ctx, val))
+	{
+		if (!JSValueIsNull(ctx, val))
+			seed_make_exception(ctx, exception, "ConversionError",
+								"Can not convert Javascript value to" " int");
+		return 0;
+	}
 
-  return (gint) JSValueToNumber(ctx, val, NULL);
+	return (gint) JSValueToNumber(ctx, val, NULL);
 }
 
 JSValueRef seed_value_from_int(JSContextRef ctx,
-			       gint val, JSValueRef * exception)
+							   gint val, JSValueRef * exception)
 {
-  return JSValueMakeNumber(ctx, (gdouble) val);
+	return JSValueMakeNumber(ctx, (gdouble) val);
 }
 
 gchar seed_value_to_char(JSContextRef ctx,
-			 JSValueRef val, JSValueRef * exception)
+						 JSValueRef val, JSValueRef * exception)
 {
-  gint cv;
+	gint cv;
 
-  if (!JSValueIsNumber(ctx, val))
-    {
-      if (!JSValueIsNull(ctx, val))
-	seed_make_exception(ctx, exception, "ConversionError",
-			    "Can not convert Javascript value to" " gchar");
-      return 0;
-    }
-
-  cv = JSValueToNumber(ctx, val, NULL);
-
-  if (cv < G_MININT8 || cv > G_MAXINT8)
-    {
-      seed_make_exception(ctx, exception, "ConversionError",
-			  "Javascript number out of range of gchar");
-      return 0;
-    }
+	if (!JSValueIsNumber(ctx, val))
+	{
+		if (!JSValueIsNull(ctx, val))
+			seed_make_exception(ctx, exception, "ConversionError",
+								"Can not convert Javascript value to" " gchar");
+		return 0;
+	}
 
-  return (char)cv;
+	cv = JSValueToNumber(ctx, val, NULL);
+
+	if (cv < G_MININT8 || cv > G_MAXINT8)
+	{
+		seed_make_exception(ctx, exception, "ConversionError",
+							"Javascript number out of range of gchar");
+		return 0;
+	}
+
+	return (char)cv;
 }
 
 JSValueRef seed_value_from_char(JSContextRef ctx,
-				gchar val, JSValueRef * exception)
+								gchar val, JSValueRef * exception)
 {
-  return JSValueMakeNumber(ctx, (gdouble) val);
+	return JSValueMakeNumber(ctx, (gdouble) val);
 }
 
 guchar seed_value_to_uchar(JSContextRef ctx,
-			   JSValueRef val, JSValueRef * exception)
+						   JSValueRef val, JSValueRef * exception)
 {
-  guint cv;
+	guint cv;
 
-  if (!JSValueIsNumber(ctx, val))
-    {
-      if (!JSValueIsNull(ctx, val))
-	seed_make_exception(ctx, exception, "ConversionError",
-			    "Can not convert Javascript value to"
-			    " guchar");
-      return 0;
-    }
-
-  cv = JSValueToNumber(ctx, val, NULL);
-
-  if (cv > G_MAXUINT8)
-    {
-      seed_make_exception(ctx, exception, "ConversionError",
-			  "Javascript number out of range of guchar");
-      return 0;
-    }
+	if (!JSValueIsNumber(ctx, val))
+	{
+		if (!JSValueIsNull(ctx, val))
+			seed_make_exception(ctx, exception, "ConversionError",
+								"Can not convert Javascript value to"
+								" guchar");
+		return 0;
+	}
 
-  return (guchar) cv;
+	cv = JSValueToNumber(ctx, val, NULL);
+
+	if (cv > G_MAXUINT8)
+	{
+		seed_make_exception(ctx, exception, "ConversionError",
+							"Javascript number out of range of guchar");
+		return 0;
+	}
+
+	return (guchar) cv;
 }
 
 JSValueRef seed_value_from_uchar(JSContextRef ctx,
-				 guchar val, JSValueRef * exception)
+								 guchar val, JSValueRef * exception)
 {
-  return JSValueMakeNumber(ctx, (gdouble) val);
+	return JSValueMakeNumber(ctx, (gdouble) val);
 }
 
 glong seed_value_to_long(JSContextRef ctx,
-			 JSValueRef val, JSValueRef * exception)
+						 JSValueRef val, JSValueRef * exception)
 {
-  if (!JSValueIsNumber(ctx, val))
-    {
-      if (!JSValueIsNull(ctx, val))
-	seed_make_exception(ctx, exception, "ConversionError",
-			    "Can not convert Javascript value to" " long");
-      return 0;
-    }
+	if (!JSValueIsNumber(ctx, val))
+	{
+		if (!JSValueIsNull(ctx, val))
+			seed_make_exception(ctx, exception, "ConversionError",
+								"Can not convert Javascript value to" " long");
+		return 0;
+	}
 
-  return (glong) JSValueToNumber(ctx, val, NULL);
+	return (glong) JSValueToNumber(ctx, val, NULL);
 }
 
 JSValueRef seed_value_from_long(JSContextRef ctx,
-				glong val, JSValueRef * exception)
+								glong val, JSValueRef * exception)
 {
-  return JSValueMakeNumber(ctx, (gdouble) val);
+	return JSValueMakeNumber(ctx, (gdouble) val);
 }
 
 gulong seed_value_to_ulong(JSContextRef ctx,
-			   JSValueRef val, JSValueRef * exception)
+						   JSValueRef val, JSValueRef * exception)
 {
-  if (!JSValueIsNumber(ctx, val))
-    {
-      if (!JSValueIsNull(ctx, val))
-	seed_make_exception(ctx, exception, "ConversionError",
-			    "Can not convert Javascript value to" " ulong");
+	if (!JSValueIsNumber(ctx, val))
+	{
+		if (!JSValueIsNull(ctx, val))
+			seed_make_exception(ctx, exception, "ConversionError",
+								"Can not convert Javascript value to" " ulong");
 
-      return 0;
-    }
+		return 0;
+	}
 
-  return (gulong) JSValueToNumber(ctx, val, NULL);
+	return (gulong) JSValueToNumber(ctx, val, NULL);
 }
 
 JSValueRef seed_value_from_ulong(JSContextRef ctx,
-				 gulong val, JSValueRef * exception)
+								 gulong val, JSValueRef * exception)
 {
-  return JSValueMakeNumber(ctx, (gdouble) val);
+	return JSValueMakeNumber(ctx, (gdouble) val);
 }
 
 gint64 seed_value_to_int64(JSContextRef ctx,
-			   JSValueRef val, JSValueRef * exception)
+						   JSValueRef val, JSValueRef * exception)
 {
-  if (!JSValueIsNumber(ctx, val))
-    {
-      if (!JSValueIsNull(ctx, val))
-	seed_make_exception(ctx, exception, "ConversionError",
-			    "Can not convert Javascript value to"
-			    " gint64");
+	if (!JSValueIsNumber(ctx, val))
+	{
+		if (!JSValueIsNull(ctx, val))
+			seed_make_exception(ctx, exception, "ConversionError",
+								"Can not convert Javascript value to"
+								" gint64");
 
-      return 0;
-    }
+		return 0;
+	}
 
-  return (gint64) JSValueToNumber(ctx, val, NULL);
+	return (gint64) JSValueToNumber(ctx, val, NULL);
 }
 
 JSValueRef seed_value_from_int64(JSContextRef ctx,
-				 gint64 val, JSValueRef * exception)
+								 gint64 val, JSValueRef * exception)
 {
-  return JSValueMakeNumber(ctx, (gdouble) val);
+	return JSValueMakeNumber(ctx, (gdouble) val);
 }
 
 guint64 seed_value_to_uint64(JSContextRef ctx,
-			     JSValueRef val, JSValueRef * exception)
+							 JSValueRef val, JSValueRef * exception)
 {
-  if (!JSValueIsNumber(ctx, val))
-    {
-      if (!JSValueIsNull(ctx, val))
-	seed_make_exception(ctx, exception, "ConversionError",
-			    "Can not convert Javascript value to"
-			    " guint64");
+	if (!JSValueIsNumber(ctx, val))
+	{
+		if (!JSValueIsNull(ctx, val))
+			seed_make_exception(ctx, exception, "ConversionError",
+								"Can not convert Javascript value to"
+								" guint64");
 
-      return 0;
-    }
+		return 0;
+	}
 
-  return (guint64) JSValueToNumber(ctx, val, NULL);
+	return (guint64) JSValueToNumber(ctx, val, NULL);
 }
 
 JSValueRef seed_value_from_uint64(JSContextRef ctx,
-				  guint64 val, JSValueRef * exception)
+								  guint64 val, JSValueRef * exception)
 {
-  return JSValueMakeNumber(ctx, (gdouble) val);
+	return JSValueMakeNumber(ctx, (gdouble) val);
 }
 
 gfloat seed_value_to_float(JSContextRef ctx,
-			   JSValueRef val, JSValueRef * exception)
+						   JSValueRef val, JSValueRef * exception)
 {
-  if (!JSValueIsNumber(ctx, val))
-    {
-      if (!JSValueIsNull(ctx, val))
-	seed_make_exception(ctx, exception, "ConversionError",
-			    "Can not convert Javascript value to"
-			    " gfloat");
-      return 0;
-    }
+	if (!JSValueIsNumber(ctx, val))
+	{
+		if (!JSValueIsNull(ctx, val))
+			seed_make_exception(ctx, exception, "ConversionError",
+								"Can not convert Javascript value to"
+								" gfloat");
+		return 0;
+	}
 
-  return (gfloat) JSValueToNumber(ctx, val, NULL);
+	return (gfloat) JSValueToNumber(ctx, val, NULL);
 }
 
 JSValueRef seed_value_from_float(JSContextRef ctx,
-				 gfloat val, JSValueRef * exception)
+								 gfloat val, JSValueRef * exception)
 {
-  return JSValueMakeNumber(ctx, (gdouble) val);
+	return JSValueMakeNumber(ctx, (gdouble) val);
 }
 
 gdouble seed_value_to_double(JSContextRef ctx,
-			     JSValueRef val, JSValueRef * exception)
+							 JSValueRef val, JSValueRef * exception)
 {
-  if (!JSValueIsNumber(ctx, val))
-    {
-      if (!JSValueIsNull(ctx, val))
-	seed_make_exception(ctx, exception, "ConversionError",
-			    "Can not convert Javascript value to"
-			    " double");
-      return 0;
-    }
+	if (!JSValueIsNumber(ctx, val))
+	{
+		if (!JSValueIsNull(ctx, val))
+			seed_make_exception(ctx, exception, "ConversionError",
+								"Can not convert Javascript value to"
+								" double");
+		return 0;
+	}
 
-  return (gdouble) JSValueToNumber(ctx, val, NULL);
+	return (gdouble) JSValueToNumber(ctx, val, NULL);
 }
 
 JSValueRef seed_value_from_double(JSContextRef ctx,
-				  gdouble val, JSValueRef * exception)
+								  gdouble val, JSValueRef * exception)
 {
-  return JSValueMakeNumber(ctx, (gdouble) val);
+	return JSValueMakeNumber(ctx, (gdouble) val);
 }
 
 gchar *seed_value_to_string(JSContextRef ctx,
-			    JSValueRef val, JSValueRef * exception)
+							JSValueRef val, JSValueRef * exception)
 {
-  JSStringRef jsstr = 0;
-  JSValueRef func, str;
-  gchar *buf = 0;
-  gint length;
-
-  if (val == NULL)
-    return NULL;
-
-  if (JSValueIsBoolean(ctx, val) || JSValueIsNumber(ctx, val))
-    {
-      buf = g_strdup_printf("%lf", JSValueToNumber(ctx, val, NULL));
-    }
-  else if (JSValueIsNull(ctx, val) || JSValueIsUndefined(ctx, val))
-    {
-      buf = strdup("[null]");
-    }
-  else
-    {
-      if (!JSValueIsString(ctx, val))	// In this case,
-	// it's an object
-	{
-	  func = seed_object_get_property(ctx, (JSObjectRef) val, "toString");
-	  str =
-	    JSObjectCallAsFunction(ctx,
-				   (JSObjectRef) func,
-				   (JSObjectRef) val, 0, NULL, NULL);
-	}
-
-      jsstr = JSValueToStringCopy(ctx, val, NULL);
-      length = JSStringGetMaximumUTF8CStringSize(jsstr);
-      if (length > 0)
+	JSStringRef jsstr = 0;
+	JSValueRef func, str;
+	gchar *buf = 0;
+	gint length;
+
+	if (val == NULL)
+		return NULL;
+
+	if (JSValueIsBoolean(ctx, val) || JSValueIsNumber(ctx, val))
 	{
-	  buf = g_malloc(length * sizeof(gchar));
-	  JSStringGetUTF8CString(jsstr, buf, length);
+		buf = g_strdup_printf("%lf", JSValueToNumber(ctx, val, NULL));
+	}
+	else if (JSValueIsNull(ctx, val) || JSValueIsUndefined(ctx, val))
+	{
+		buf = strdup("[null]");
+	}
+	else
+	{
+		if (!JSValueIsString(ctx, val))	// In this case,
+			// it's an object
+		{
+			func = seed_object_get_property(ctx, (JSObjectRef) val, "toString");
+			str =
+				JSObjectCallAsFunction(ctx,
+									   (JSObjectRef) func,
+									   (JSObjectRef) val, 0, NULL, NULL);
+		}
+
+		jsstr = JSValueToStringCopy(ctx, val, NULL);
+		length = JSStringGetMaximumUTF8CStringSize(jsstr);
+		if (length > 0)
+		{
+			buf = g_malloc(length * sizeof(gchar));
+			JSStringGetUTF8CString(jsstr, buf, length);
+		}
+		if (jsstr)
+			JSStringRelease(jsstr);
 	}
-      if (jsstr)
-	JSStringRelease(jsstr);
-    }
 
-  return buf;
+	return buf;
 }
 
 JSValueRef seed_value_from_string(JSContextRef ctx,
-				  const gchar * val, JSValueRef * exception)
+								  const gchar * val, JSValueRef * exception)
 {
-  JSStringRef jsstr = JSStringCreateWithUTF8CString(val);
-  JSValueRef valstr = JSValueMakeString(ctx, jsstr);
-  JSStringRelease(jsstr);
+	JSStringRef jsstr = JSStringCreateWithUTF8CString(val);
+	JSValueRef valstr = JSValueMakeString(ctx, jsstr);
+	JSStringRelease(jsstr);
 
-  return valstr;
+	return valstr;
 }
 
 JSValueRef seed_value_from_filename(JSContextRef ctx,
-				    const gchar * filename,
-				    JSValueRef * exception)
+									const gchar * filename,
+									JSValueRef * exception)
 {
-  GError *e = NULL;
-  gchar *utf8;
+	GError *e = NULL;
+	gchar *utf8;
 
-  utf8 = g_filename_to_utf8(filename, -1, NULL, NULL, &e);
-  if (e)
-    {
-      seed_make_exception_from_gerror(ctx, exception, e);
-      g_error_free(e);
-      // TODO: FIXMEShould be JS Null maybe?
-      return NULL;
-    }
+	utf8 = g_filename_to_utf8(filename, -1, NULL, NULL, &e);
+	if (e)
+	{
+		seed_make_exception_from_gerror(ctx, exception, e);
+		g_error_free(e);
+		// TODO: FIXMEShould be JS Null maybe?
+		return NULL;
+	}
 
-  return seed_value_from_string(ctx, utf8, exception);
+	return seed_value_from_string(ctx, utf8, exception);
 }
 
 gchar *seed_value_to_filename(JSContextRef ctx,
-			      JSValueRef val, JSValueRef * exception)
+							  JSValueRef val, JSValueRef * exception)
 {
-  GError *e = NULL;
-  gchar *utf8 = seed_value_to_string(ctx, val, exception);
-  gchar *filename;
-
-  filename = g_filename_from_utf8(utf8, -1, NULL, NULL, &e);
-  g_free(utf8);
-  if (e)
-    {
-      seed_make_exception_from_gerror(ctx, exception, e);
-      g_error_free(e);
-      return NULL;
-    }
+	GError *e = NULL;
+	gchar *utf8 = seed_value_to_string(ctx, val, exception);
+	gchar *filename;
+
+	filename = g_filename_from_utf8(utf8, -1, NULL, NULL, &e);
+	g_free(utf8);
+	if (e)
+	{
+		seed_make_exception_from_gerror(ctx, exception, e);
+		g_error_free(e);
+		return NULL;
+	}
 
-  return filename;
+	return filename;
 }
 
 GObject *seed_value_to_object(JSContextRef ctx,
-			      JSValueRef val, JSValueRef * exception)
+							  JSValueRef val, JSValueRef * exception)
 {
-  GObject *gobject;
+	GObject *gobject;
 
-  /* 
-   * Worth investigating if this is the best way to handle null. Some of 
-   * the existing code depends on null Objects not throwing an exception 
-   * however, needs testing at higher level if value can be null 
-   * (through GI) 
-   */
-
-  if (JSValueIsNull(ctx, val))
-    return 0;
-  if (!seed_value_is_gobject(ctx, val))
-    {
-      seed_make_exception(ctx, exception, "ConversionError",
-			  "Attempt to convert from"
-			  " non GObject to GObject");
-      return NULL;
-    }
+	/* 
+	 * Worth investigating if this is the best way to handle null. Some of 
+	 * the existing code depends on null Objects not throwing an exception 
+	 * however, needs testing at higher level if value can be null 
+	 * (through GI) 
+	 */
+
+	if (JSValueIsNull(ctx, val))
+		return 0;
+	if (!seed_value_is_gobject(ctx, val))
+	{
+		seed_make_exception(ctx, exception, "ConversionError",
+							"Attempt to convert from"
+							" non GObject to GObject");
+		return NULL;
+	}
 
-  gobject = (GObject *) JSObjectGetPrivate((JSObjectRef) val);
+	gobject = (GObject *) JSObjectGetPrivate((JSObjectRef) val);
 
-  return gobject;
+	return gobject;
 }
 
 JSValueRef seed_value_from_object(JSContextRef ctx,
-				  GObject * val, JSValueRef * exception)
+								  GObject * val, JSValueRef * exception)
 {
-  if (val == NULL)
-    return JSValueMakeNull(ctx);
-  else
-    return seed_wrap_object(ctx, val);
+	if (val == NULL)
+		return JSValueMakeNull(ctx);
+	else
+		return seed_wrap_object(ctx, val);
 }

Modified: trunk/libseed/seed.h
==============================================================================
--- trunk/libseed/seed.h	(original)
+++ trunk/libseed/seed.h	Sat Feb  7 09:19:31 2009
@@ -75,8 +75,7 @@
 SeedScript *seed_make_script(SeedContext ctx,
 							 const gchar * s, const gchar * source_url,
 							 gint line_number);
-SeedScript *seed_script_new_from_file(SeedContext ctx, 
-				      gchar *file);
+SeedScript *seed_script_new_from_file(SeedContext ctx, gchar * file);
 SeedException seed_script_exception(SeedScript * s);
 void seed_make_exception(SeedContext ctx, SeedException e,
 						 gchar * name, gchar * message);
@@ -114,12 +113,9 @@
 gboolean seed_string_is_equal(SeedString a, SeedString b);
 gboolean seed_string_is_equal_utf8(SeedString a, const gchar * b);
 
-gboolean seed_value_is_null(SeedContext ctx,
-			    SeedValue value);
-gboolean seed_value_is_object(SeedContext ctx,
-			      SeedValue value);
-gboolean seed_value_is_function(SeedContext ctx,
-				 SeedObject value);
+gboolean seed_value_is_null(SeedContext ctx, SeedValue value);
+gboolean seed_value_is_object(SeedContext ctx, SeedValue value);
+gboolean seed_value_is_function(SeedContext ctx, SeedObject value);
 
 SeedValue seed_object_call(SeedContext ctx,
 						   SeedObject object,



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