2005-01-28 Mike Kestner <mkestner@novell.com>

* generator/ReturnValue.cs : use ToNativeReturnType for ToNativeType
	instead of MarshalType.
	* generator/Signal.cs : deal with boxed return values. beef up return
	handling in the default handler generation code.
	* generator/SignalHandler.cs : use ToNative return types for native 
	callbacks. Remove redundant casting/conversion in callback impl.
	[Fixes #71899]

svn path=/trunk/gtk-sharp/; revision=39724
This commit is contained in:
Mike Kestner 2005-01-28 20:24:14 +00:00
parent de70fff09f
commit 8364dd2be1
4 changed files with 19 additions and 7 deletions

View File

@ -1,11 +1,19 @@
2005-01-28 Mike Kestner <mkestner@novell.com>
* generator/ReturnValue.cs : use ToNativeReturnType for ToNativeType
instead of MarshalType.
* generator/Signal.cs : deal with boxed return values. beef up return
handling in the default handler generation code.
* generator/SignalHandler.cs : use ToNative return types for native
callbacks. Remove redundant casting/conversion in callback impl.
[Fixes #71899]
2005-01-28 Dan Winship <danw@novell.com> 2005-01-28 Dan Winship <danw@novell.com>
* glib/Object.cs (AddNotification, RemoveNotification): methods to * glib/Object.cs (AddNotification, RemoveNotification): methods to
subscribe to the "notify" signal (with property details). [#71684] subscribe to the "notify" signal (with property details). [#71684]
* glib/GLibSharp.voidObjectIntPtrSignal.cs: autogenerated, for * glib/GLibSharp.voidObjectIntPtrSignal.cs: autogenerated, for
notifications notifications
* glib/NotifyHandler.cs: sort of autogenerated * glib/NotifyHandler.cs: sort of autogenerated
2005-01-28 Mike Kestner <mkestner@novell.com> 2005-01-28 Mike Kestner <mkestner@novell.com>

View File

@ -71,7 +71,7 @@ namespace GtkSharp.Generation {
public string ToNativeType { public string ToNativeType {
get { get {
return SymbolTable.Table.GetMarshalType (CType) + (IsArray ? "[]" : String.Empty); return SymbolTable.Table.GetToNativeReturnType (CType) + (IsArray ? "[]" : String.Empty);
} }
} }

View File

@ -130,6 +130,8 @@ namespace GtkSharp.Generation {
if (igen is ObjectGen) if (igen is ObjectGen)
return "GLib.GType.Object"; return "GLib.GType.Object";
if (igen is BoxedGen)
return retval.CSType + ".GType";
switch (retval.CSType) { switch (retval.CSType) {
case "bool": case "bool":
@ -237,9 +239,11 @@ namespace GtkSharp.Generation {
sw.WriteLine ("\t\t{"); sw.WriteLine ("\t\t{");
sw.WriteLine ("\t\t\t{0} obj = GLib.Object.GetObject ({1}, false) as {0};", implementor != null ? implementor.Name : container_type.Name, parms[0].Name); sw.WriteLine ("\t\t\t{0} obj = GLib.Object.GetObject ({1}, false) as {0};", implementor != null ? implementor.Name : container_type.Name, parms[0].Name);
sw.Write (call.Setup ("\t\t\t")); sw.Write (call.Setup ("\t\t\t"));
sw.Write ("\t\t\t{0}", IsVoid ? "" : "return "); sw.Write ("\t\t\t{0}", IsVoid ? "" : retval.CSType == retval.ToNativeType ? "return " : retval.CSType + " raw_ret = ");
sw.WriteLine ("obj.{0} ({1});", "On" + Name, call.ToString ()); sw.WriteLine ("obj.{0} ({1});", "On" + Name, call.ToString ());
sw.Write (call.Finish ("\t\t\t")); sw.Write (call.Finish ("\t\t\t"));
if (!IsVoid && retval.CSType != retval.ToNativeType)
sw.WriteLine ("\t\t\treturn {0};", SymbolTable.Table.ToNativeReturn (retval.CType, "raw_ret"));
sw.WriteLine ("\t\t}\n"); sw.WriteLine ("\t\t}\n");
string cname = "\"" + elem.GetAttribute("cname") + "\""; string cname = "\"" + elem.GetAttribute("cname") + "\"";
sw.WriteLine ("\t\tprivate static void Override" + Name + " (GLib.GType gtype)"); sw.WriteLine ("\t\tprivate static void Override" + Name + " (GLib.GType gtype)");

View File

@ -120,14 +120,14 @@ namespace GtkSharp.Generation {
sw.WriteLine("\tusing System;"); sw.WriteLine("\tusing System;");
sw.WriteLine("\tusing System.Runtime.InteropServices;"); sw.WriteLine("\tusing System.Runtime.InteropServices;");
sw.WriteLine(); sw.WriteLine();
sw.Write("\tinternal delegate " + retval.MarshalType + " "); sw.Write("\tinternal delegate " + retval.ToNativeType + " ");
sw.WriteLine(DelegateName + "(" + ISig + ", int key);"); sw.WriteLine(DelegateName + "(" + ISig + ", int key);");
sw.WriteLine(); sw.WriteLine();
sw.WriteLine("\tinternal class " + Name + " : GLib.SignalCallback {"); sw.WriteLine("\tinternal class " + Name + " : GLib.SignalCallback {");
sw.WriteLine(); sw.WriteLine();
sw.WriteLine("\t\tprivate static " + DelegateName + " _Delegate;"); sw.WriteLine("\t\tprivate static " + DelegateName + " _Delegate;");
sw.WriteLine(); sw.WriteLine();
sw.Write("\t\tprivate static " + retval.MarshalType + " "); sw.Write("\t\tprivate static " + retval.ToNativeType + " ");
sw.WriteLine(CallbackName + "(" + ISig + ", int key)"); sw.WriteLine(CallbackName + "(" + ISig + ", int key)");
sw.WriteLine("\t\t{"); sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tif (!_Instances.Contains(key))"); sw.WriteLine("\t\t\tif (!_Instances.Contains(key))");
@ -179,7 +179,7 @@ namespace GtkSharp.Generation {
else else
sw.WriteLine ("\t\t\t\tthrow new Exception(\"args.RetVal unset in callback\");"); sw.WriteLine ("\t\t\t\tthrow new Exception(\"args.RetVal unset in callback\");");
sw.WriteLine("\t\t\treturn (" + retval.MarshalType + ") " + table.ToNativeReturn (retval.CType, "((" + retval.CSType + ")args.RetVal)") + ";"); sw.WriteLine("\t\t\treturn " + table.ToNativeReturn (retval.CType, "((" + retval.CSType + ")args.RetVal)") + ";");
} }
sw.WriteLine("\t\t}"); sw.WriteLine("\t\t}");
sw.WriteLine(); sw.WriteLine();