From 9d215affce7e25e160a95c405ac7a19c69df39c9 Mon Sep 17 00:00:00 2001 From: Aaron Bockover Date: Thu, 28 May 2009 18:49:11 +0000 Subject: [PATCH] 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 svn path=/trunk/gtk-sharp/; revision=134980 --- ChangeLog | 6 ++++++ generator/EnumGen.cs | 23 ++++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) 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 ()