From 2fcb8f1b79264428d8b5a760fa23a0c90a9ea0fc Mon Sep 17 00:00:00 2001 From: Mike Kestner Date: Fri, 4 Mar 2005 16:02:44 +0000 Subject: [PATCH] 2005-03-04 Mike Kestner * generator/Method.cs : refactor out some retval logic. * generator/ReturnValue.cs : add FromNative and IsVoid members. svn path=/trunk/gtk-sharp/; revision=41446 --- ChangeLog | 5 +++++ generator/Method.cs | 25 ++++++++----------------- generator/ReturnValue.cs | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index ecd2fe04c..3d083fccc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-03-04 Mike Kestner + + * generator/Method.cs : refactor out some retval logic. + * generator/ReturnValue.cs : add FromNative and IsVoid members. + 2005-03-03 Mike Kestner * gdk/Gdk.metadata : remove unnecessary null_ok rules. diff --git a/generator/Method.cs b/generator/Method.cs index 1c38e3cea..24905653d 100644 --- a/generator/Method.cs +++ b/generator/Method.cs @@ -120,8 +120,8 @@ namespace GtkSharp.Generation { return true; 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_set = ((parms.IsAccessor || (parms.Count == 1 && retval.CSType == "void")) && (Name.Length > 3 && Name.Substring(0, 3) == "Set")); + 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.IsVoid)) && (Name.Length > 3 && Name.Substring(0, 3) == "Set")); call = "(" + (IsStatic ? "" : container_type.CallByName () + (parms.Count > 0 ? ", " : "")) + Body.GetCallString (is_set) + ")"; @@ -178,7 +178,7 @@ namespace GtkSharp.Generation { sw.Write("new "); if (is_get || is_set) { - if (retval.CSType == "void") + if (retval.IsVoid) sw.Write (Parameters.AccessorReturnType); else sw.Write(retval.CSType); @@ -321,21 +321,12 @@ namespace GtkSharp.Generation { Body.InitAccessor (sw, Signature, 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"); - if (retval.MarshalType == "void") { + if (retval.IsVoid) sw.WriteLine(CName + call + ";"); - } else { + else { sw.WriteLine(retval.MarshalType + " raw_ret = " + CName + call + ";"); - sw.Write(indent + "\t\t\t"); - 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) + ";"); + sw.WriteLine(indent + "\t\t\t" + retval.CSType + " ret = " + retval.FromNative ("raw_ret") + ";"); } Body.Finish (sw, indent); @@ -343,7 +334,7 @@ namespace GtkSharp.Generation { if (is_get && Parameters.Count > 0) sw.WriteLine (indent + "\t\t\treturn " + Parameters.AccessorName + ";"); - else if (retval.MarshalType != "void") + else if (!retval.IsVoid) sw.WriteLine (indent + "\t\t\treturn ret;"); else if (IsAccessor) Body.FinishAccessor (sw, Signature, indent); @@ -353,7 +344,7 @@ namespace GtkSharp.Generation { bool IsAccessor { get { - return retval.CSType == "void" && Signature.IsAccessor; + return retval.IsVoid && Signature.IsAccessor; } } } diff --git a/generator/ReturnValue.cs b/generator/ReturnValue.cs index bf4d062c2..7fe4001b1 100644 --- a/generator/ReturnValue.cs +++ b/generator/ReturnValue.cs @@ -57,6 +57,12 @@ namespace GtkSharp.Generation { } } + public bool IsVoid { + get { + return CSType == "void"; + } + } + public string MarshalType { get { 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 () { if (MarshalType == "" || CSType == "") {