diff --git a/ChangeLog b/ChangeLog index 214f5d51e..05fbfb5bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-05-28 Aaron Bockover + + * generator/EnumGen.cs: Fix enum generator to properly parse integer + values with type modifier suffixes (UL, L, U), and not accidentally + munge named values that happen to end in one of these suffixes + 2009-05-18 Stephane Delcroix * configure.in.in: diff --git a/generator/EnumGen.cs b/generator/EnumGen.cs index 2be39b558..87e3810e7 100644 --- a/generator/EnumGen.cs +++ b/generator/EnumGen.cs @@ -24,7 +24,8 @@ namespace GtkSharp.Generation { using System; using System.Collections; using System.IO; - using System.Xml; + using System.Xml; + using System.Text.RegularExpressions; public class EnumGen : GenBase { @@ -38,21 +39,21 @@ namespace GtkSharp.Generation { 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'); - } else if (value.EndsWith("L")) { - enum_type = " : long"; - value = value.TrimEnd('L'); - } + if (member.HasAttribute ("value")) { + string value = member.GetAttribute ("value").Trim (); + foreach (Match match in Regex.Matches (value, "[0-9]+([UL]{1,2})", RegexOptions.IgnoreCase)) { + switch (match.Groups[1].Value.ToUpper ()) { + case "U": enum_type = " : uint"; break; + case "L": enum_type = " : long"; break; + case "UL": enum_type = " : ulong"; break; + } + } result += " = " + value; } members.Add (result + ","); } if (elem.HasAttribute ("enum_type")) - enum_type = ": " + elem.GetAttribute ("enum_type"); + enum_type = " : " + elem.GetAttribute ("enum_type"); } public override bool Validate ()