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:
parent
9a1febb5a9
commit
85e2e6a663
@ -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; }
|
||||
|
||||
|
@ -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<int,CommonTree> 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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user