1
0
mirror of https://github.com/twiglet/cs2j.git synced 2025-01-18 13:15:17 +01:00

do not generate dummy enums if the size would be greater than 500

This commit is contained in:
Kevin Glynn 2011-03-13 13:01:57 +01:00
parent 9a1febb5a9
commit 85e2e6a663
2 changed files with 24 additions and 10 deletions

View File

@ -13,6 +13,12 @@ namespace Twiglet.CS2J.Translator.Transform
{ {
public class CommonWalker : TreeParser 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 CS2JSettings Cfg { get; set; }
public string Filename { get; set; } public string Filename { get; set; }

View File

@ -1079,15 +1079,23 @@ enum_member_declarations
} }
@after{ @after{
$enum_member_declarations.tree = (CommonTree)adaptor.Nil; $enum_member_declarations.tree = (CommonTree)adaptor.Nil;
int dummyCounter = 0; if (next > 0 && next < MAX_DUMMY_ENUMS) {
for (int i = 0; i < next; i++) { int dummyCounter = 0;
if (members.ContainsKey(i)) { for (int i = 0; i < next; i++) {
adaptor.AddChild($enum_member_declarations.tree, members[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 {
} 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])* e=enum_member_declaration[members,ref next] (',' enum_member_declaration[members, ref next])*
@ -1100,7 +1108,7 @@ enum_member_declaration[ SortedList<int,CommonTree> members, ref int next]
// Fill in members, a map from enum's value to AST // Fill in members, a map from enum's value to AST
attributes? identifier { $members[$next] = $identifier.tree; $next++; } attributes? identifier { $members[$next] = $identifier.tree; $next++; }
((eq='=' ( ((NUMBER | Hex_number) (','|'}')) => ((eq='=' ( ((NUMBER | Hex_number) (','|'}')) =>
{ Console.Out.WriteLine($i); $members.Remove($next-1); } { $members.Remove($next-1); }
(i=NUMBER { calcValue = Int32.Parse($i.text); } (i=NUMBER { calcValue = Int32.Parse($i.text); }
| i=Hex_number { calcValue = Int32.Parse($i.text.Substring(2), NumberStyles.AllowHexSpecifier); } ) | i=Hex_number { calcValue = Int32.Parse($i.text.Substring(2), NumberStyles.AllowHexSpecifier); } )
{ if (calcValue < 0 || calcValue > Int32.MaxValue) { { if (calcValue < 0 || calcValue > Int32.MaxValue) {