From bf9ed959443d482a8cb0992b0b67a85ed0b2e6ac Mon Sep 17 00:00:00 2001 From: Mike Kestner Date: Mon, 27 Dec 2004 20:00:55 +0000 Subject: [PATCH] 2004-12-27 Mike Kestner * generator/EnumGen.cs : rework for a single pass thru ChildNodes. * generator/Parameters.cs : simplify PassAs logic. * generator/SimpleBase.cs : mark abstract. svn path=/trunk/gtk-sharp/; revision=38111 --- ChangeLog | 6 ++++ generator/EnumGen.cs | 68 ++++++++++++++++------------------------- generator/Parameters.cs | 10 ++---- generator/SimpleBase.cs | 2 +- 4 files changed, 35 insertions(+), 51 deletions(-) diff --git a/ChangeLog b/ChangeLog index d0754c02e..41ce58f15 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2004-12-27 Mike Kestner + + * generator/EnumGen.cs : rework for a single pass thru ChildNodes. + * generator/Parameters.cs : simplify PassAs logic. + * generator/SimpleBase.cs : mark abstract. + 2004-12-27 Mike Kestner * generator/AliasGen.cs : derive from SimpleBase. diff --git a/generator/EnumGen.cs b/generator/EnumGen.cs index a884bda9c..b075f36f8 100644 --- a/generator/EnumGen.cs +++ b/generator/EnumGen.cs @@ -22,12 +22,34 @@ namespace GtkSharp.Generation { using System; + using System.Collections; using System.IO; using System.Xml; public class EnumGen : GenBase { - public EnumGen (XmlElement ns, XmlElement elem) : base (ns, elem) {} + string enum_type = String.Empty; + ArrayList members = new ArrayList (); + + public EnumGen (XmlElement ns, XmlElement elem) : base (ns, elem) + { + foreach (XmlElement member in elem.ChildNodes) { + if (member.Name != "member") + continue; + + string result = "\t\t" + member.GetAttribute("name"); + if (member.HasAttribute("value")) { + string value = member.GetAttribute("value"); + if (value.EndsWith("U")) { + enum_type = " : uint"; + value = value.TrimEnd('U'); + } + result += " = " + value; + } + members.Add (result + ","); + } + } + public override string MarshalType { get { @@ -59,51 +81,13 @@ namespace GtkSharp.Generation { sw.WriteLine ("\t[Flags]"); } - // Ok, this is obscene. We need to go through the enums first - // to find "large" values. If we find some, we need to change - // the base type of the enum. - - string enum_type = null; - - foreach (XmlNode node in Elem.ChildNodes) { - if (!(node is XmlElement) || node.Name != "member") { - continue; - } - - XmlElement member = (XmlElement) node; - - if (member.HasAttribute("value")) { - string value = member.GetAttribute("value"); - if (value.EndsWith("U")) { - enum_type = "uint"; - member.SetAttribute("value", value.TrimEnd('U')); - } - } - } - sw.WriteLine ("#region Autogenerated code"); - if (enum_type != null) - sw.WriteLine ("\tpublic enum " + Name + " : " + enum_type + " {"); - else - sw.WriteLine ("\tpublic enum " + Name + " {"); - + sw.WriteLine ("\tpublic enum " + Name + enum_type + " {"); sw.WriteLine (); - foreach (XmlNode node in Elem.ChildNodes) { - if (!(node is XmlElement) || node.Name != "member") { - continue; - } - - XmlElement member = (XmlElement) node; - - sw.Write ("\t\t" + member.GetAttribute("name")); - if (member.HasAttribute("value")) { - sw.WriteLine (" = " + member.GetAttribute("value") + ","); - } else { - sw.WriteLine (","); - } - } + foreach (string member in members) + sw.WriteLine (member); sw.WriteLine ("\t}"); sw.WriteLine ("#endregion"); diff --git a/generator/Parameters.cs b/generator/Parameters.cs index e444b4235..769d9748c 100644 --- a/generator/Parameters.cs +++ b/generator/Parameters.cs @@ -172,16 +172,10 @@ namespace GtkSharp.Generation { if (elem.HasAttribute ("pass_as")) return elem.GetAttribute ("pass_as"); - if (IsArray) + if (IsArray || CSType.EndsWith ("IntPtr")) return ""; - if (Generatable is SimpleGen && !(Generatable is ConstStringGen) && CType.EndsWith ("*") && !CSType.EndsWith ("IntPtr")) - return "out"; - - if ((Generatable is LPGen || Generatable is LPUGen) && CType.EndsWith ("*")) - return "out"; - - if (Generatable is EnumGen && CType.EndsWith ("*")) + if (CType.EndsWith ("*") && (Generatable is SimpleGen || Generatable is EnumGen)) return "out"; return ""; diff --git a/generator/SimpleBase.cs b/generator/SimpleBase.cs index ae3a3f983..b245fea32 100644 --- a/generator/SimpleBase.cs +++ b/generator/SimpleBase.cs @@ -23,7 +23,7 @@ namespace GtkSharp.Generation { using System; - public class SimpleBase : IGeneratable { + public abstract class SimpleBase : IGeneratable { string type; string ctype;