2005-03-04 Mike Kestner <mkestner@novell.com>

* generator/Method.cs : refactor out some retval logic.
	* generator/ReturnValue.cs : add FromNative and IsVoid members.

svn path=/trunk/gtk-sharp/; revision=41446
This commit is contained in:
Mike Kestner 2005-03-04 16:02:44 +00:00
parent 8b6cf6e5ea
commit 2fcb8f1b79
3 changed files with 28 additions and 17 deletions

View File

@ -1,3 +1,8 @@
2005-03-04 Mike Kestner <mkestner@novell.com>
* generator/Method.cs : refactor out some retval logic.
* generator/ReturnValue.cs : add FromNative and IsVoid members.
2005-03-03 Mike Kestner <mkestner@novell.com> 2005-03-03 Mike Kestner <mkestner@novell.com>
* gdk/Gdk.metadata : remove unnecessary null_ok rules. * gdk/Gdk.metadata : remove unnecessary null_ok rules.

View File

@ -120,8 +120,8 @@ namespace GtkSharp.Generation {
return true; return true;
Parameters parms = Parameters; Parameters parms = Parameters;
is_get = ((((parms.IsAccessor && retval.CSType == "void") || (parms.Count == 0 && retval.CSType != "void")) || (parms.Count == 0 && retval.CSType != "void")) && Name.Length > 3 && (Name.StartsWith ("Get") || Name.StartsWith ("Is") || Name.StartsWith ("Has"))); is_get = ((((parms.IsAccessor && retval.IsVoid) || (parms.Count == 0 && !retval.IsVoid)) || (parms.Count == 0 && !retval.IsVoid)) && Name.Length > 3 && (Name.StartsWith ("Get") || Name.StartsWith ("Is") || Name.StartsWith ("Has")));
is_set = ((parms.IsAccessor || (parms.Count == 1 && retval.CSType == "void")) && (Name.Length > 3 && Name.Substring(0, 3) == "Set")); is_set = ((parms.IsAccessor || (parms.Count == 1 && retval.IsVoid)) && (Name.Length > 3 && Name.Substring(0, 3) == "Set"));
call = "(" + (IsStatic ? "" : container_type.CallByName () + (parms.Count > 0 ? ", " : "")) + Body.GetCallString (is_set) + ")"; call = "(" + (IsStatic ? "" : container_type.CallByName () + (parms.Count > 0 ? ", " : "")) + Body.GetCallString (is_set) + ")";
@ -178,7 +178,7 @@ namespace GtkSharp.Generation {
sw.Write("new "); sw.Write("new ");
if (is_get || is_set) { if (is_get || is_set) {
if (retval.CSType == "void") if (retval.IsVoid)
sw.Write (Parameters.AccessorReturnType); sw.Write (Parameters.AccessorReturnType);
else else
sw.Write(retval.CSType); sw.Write(retval.CSType);
@ -321,21 +321,12 @@ namespace GtkSharp.Generation {
Body.InitAccessor (sw, Signature, indent); Body.InitAccessor (sw, Signature, indent);
Body.Initialize(gen_info, is_get, is_set, indent); Body.Initialize(gen_info, is_get, is_set, indent);
SymbolTable table = SymbolTable.Table;
IGeneratable ret_igen = table [retval.CType];
sw.Write(indent + "\t\t\t"); sw.Write(indent + "\t\t\t");
if (retval.MarshalType == "void") { if (retval.IsVoid)
sw.WriteLine(CName + call + ";"); sw.WriteLine(CName + call + ";");
} else { else {
sw.WriteLine(retval.MarshalType + " raw_ret = " + CName + call + ";"); sw.WriteLine(retval.MarshalType + " raw_ret = " + CName + call + ";");
sw.Write(indent + "\t\t\t"); sw.WriteLine(indent + "\t\t\t" + retval.CSType + " ret = " + retval.FromNative ("raw_ret") + ";");
string raw_parms = "raw_ret";
if (retval.ElementType != String.Empty)
raw_parms += ", typeof (" + retval.ElementType + ")";
else if (retval.Owned)
raw_parms += ", true";
sw.WriteLine(retval.CSType + " ret = " + table.FromNativeReturn(retval.CType, raw_parms) + ";");
} }
Body.Finish (sw, indent); Body.Finish (sw, indent);
@ -343,7 +334,7 @@ namespace GtkSharp.Generation {
if (is_get && Parameters.Count > 0) if (is_get && Parameters.Count > 0)
sw.WriteLine (indent + "\t\t\treturn " + Parameters.AccessorName + ";"); sw.WriteLine (indent + "\t\t\treturn " + Parameters.AccessorName + ";");
else if (retval.MarshalType != "void") else if (!retval.IsVoid)
sw.WriteLine (indent + "\t\t\treturn ret;"); sw.WriteLine (indent + "\t\t\treturn ret;");
else if (IsAccessor) else if (IsAccessor)
Body.FinishAccessor (sw, Signature, indent); Body.FinishAccessor (sw, Signature, indent);
@ -353,7 +344,7 @@ namespace GtkSharp.Generation {
bool IsAccessor { bool IsAccessor {
get { get {
return retval.CSType == "void" && Signature.IsAccessor; return retval.IsVoid && Signature.IsAccessor;
} }
} }
} }

View File

@ -57,6 +57,12 @@ namespace GtkSharp.Generation {
} }
} }
public bool IsVoid {
get {
return CSType == "void";
}
}
public string MarshalType { public string MarshalType {
get { get {
return SymbolTable.Table.GetMarshalReturnType (CType) + (IsArray ? "[]" : String.Empty); return SymbolTable.Table.GetMarshalReturnType (CType) + (IsArray ? "[]" : String.Empty);
@ -75,6 +81,15 @@ namespace GtkSharp.Generation {
} }
} }
public string FromNative (string var)
{
if (Owned)
var += ", true";
else if (ElementType != String.Empty)
var += ", typeof (" + ElementType + ")";
return SymbolTable.Table.FromNativeReturn (CType, var);
}
public bool Validate () public bool Validate ()
{ {
if (MarshalType == "" || CSType == "") { if (MarshalType == "" || CSType == "") {