From 85e2e6a663d1d0d3518639f4143dd621e2befeab Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Sun, 13 Mar 2011 13:01:57 +0100 Subject: [PATCH] do not generate dummy enums if the size would be greater than 500 --- .../CS2JTransform/CommonWalker.cs | 6 ++++ .../CS2JTranslator/CS2JTransform/JavaMaker.g | 28 ++++++++++++------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/CommonWalker.cs b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/CommonWalker.cs index 94dd0fc..ea30765 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/CommonWalker.cs +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/CommonWalker.cs @@ -13,6 +13,12 @@ namespace Twiglet.CS2J.Translator.Transform { public class CommonWalker : TreeParser { + // CONSTANTS + + // Max size of enum structure we will generate to match enums to arbitrary integer values + public const int MAX_DUMMY_ENUMS = 500; + + public CS2JSettings Cfg { get; set; } public string Filename { get; set; } diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g index f54e5d8..e0eeeea 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g @@ -1079,15 +1079,23 @@ enum_member_declarations } @after{ $enum_member_declarations.tree = (CommonTree)adaptor.Nil; - int dummyCounter = 0; - for (int i = 0; i < next; i++) { - if (members.ContainsKey(i)) { - adaptor.AddChild($enum_member_declarations.tree, members[i]); - } - else { - adaptor.AddChild($enum_member_declarations.tree, adaptor.Create(IDENTIFIER, $e.start.Token, "__dummyEnum__" + dummyCounter++)); - } - }; + if (next > 0 && next < MAX_DUMMY_ENUMS) { + int dummyCounter = 0; + for (int i = 0; i < next; i++) { + if (members.ContainsKey(i)) { + adaptor.AddChild($enum_member_declarations.tree, members[i]); + } + else { + adaptor.AddChild($enum_member_declarations.tree, adaptor.Create(IDENTIFIER, $e.start.Token, "__dummyEnum__" + dummyCounter++)); + } + } + } + else { + Warning($e.tree.Line, "[UNSUPPORTED] We do not yet generate dummy enum members for enums that need more than " + MAX_DUMMY_ENUMS + " entries."); + foreach (CommonTree en in members.Values) { + adaptor.AddChild($enum_member_declarations.tree, en); + } + } } : e=enum_member_declaration[members,ref next] (',' enum_member_declaration[members, ref next])* @@ -1100,7 +1108,7 @@ enum_member_declaration[ SortedList members, ref int next] // Fill in members, a map from enum's value to AST attributes? identifier { $members[$next] = $identifier.tree; $next++; } ((eq='=' ( ((NUMBER | Hex_number) (','|'}')) => - { Console.Out.WriteLine($i); $members.Remove($next-1); } + { $members.Remove($next-1); } (i=NUMBER { calcValue = Int32.Parse($i.text); } | i=Hex_number { calcValue = Int32.Parse($i.text.Substring(2), NumberStyles.AllowHexSpecifier); } ) { if (calcValue < 0 || calcValue > Int32.MaxValue) {