Merge pull request #1945 from AIexandrKotov/master

fix pascalabcnet/pascalabcnetide#117
This commit is contained in:
Mikhalkovich Stanislav 2019-05-21 15:55:25 +03:00 committed by GitHub
commit 9621194f9a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -518,9 +518,25 @@ namespace PascalABCCompiler.Parsers
return sb.ToString();
}
private bool enum_out_of_order(FieldInfo[] fields) //возвращает true, если значения полей этого enum'а идут не по порядку или не с нуля (IDE issue #117)
{
for (int i = 0; i < fields.Length; i++)
{
if (fields[i].Name != "value__")
{
if (i - 1 != (int)fields[i].GetRawConstantValue())
{
return true;
}
}
}
return false;
}
private string get_enum_constants(Type t)
{
FieldInfo[] fields = t.GetFields(BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Static);
bool outoforder = enum_out_of_order(fields);
StringBuilder sb = new StringBuilder();
sb.AppendLine("(");
for (int i = 0; i < fields.Length; i++)
@ -529,6 +545,11 @@ namespace PascalABCCompiler.Parsers
{
sb.Append(' ', 4);
sb.Append(fields[i].Name);
if (outoforder)
{
sb.Append(" = ");
sb.Append(fields[i].GetRawConstantValue());
}
if (i < fields.Length - 1)
sb.AppendLine(",");
else