From ff931046db8440046a89f9bbc0906a6b3e95cee4 Mon Sep 17 00:00:00 2001 From: Mark Crichton Date: Tue, 18 Feb 2003 17:28:51 +0000 Subject: [PATCH] generator/EnumGen.cs: Added support for different types. Useful for the GtkMozEmbed headers. svn path=/trunk/gtk-sharp/; revision=11696 --- ChangeLog | 4 ++++ generator/EnumGen.cs | 30 ++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 14dcc75fa..1487dfa10 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2003-02-18 Mark Crichton + + * generator/EnumGen.cs: Handle different enum types. + 2003-02-14 Duncan Mak * api/gtk-api.xml: diff --git a/generator/EnumGen.cs b/generator/EnumGen.cs index 579d35a56..da4f17742 100644 --- a/generator/EnumGen.cs +++ b/generator/EnumGen.cs @@ -61,9 +61,35 @@ namespace GtkSharp.Generation { if (Elem.GetAttribute("type") == "flags") 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"); - - sw.WriteLine ("\tpublic enum " + Name + " {"); + + if (enum_type != null) + sw.WriteLine ("\tpublic enum " + Name + " : " + enum_type + " {"); + else + sw.WriteLine ("\tpublic enum " + Name + " {"); + sw.WriteLine (); foreach (XmlNode node in Elem.ChildNodes) {