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
|
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; }
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user