Browse Source

Moved enumeration name clean up code out of Transform.cs and into the CleanInvalidDeclNames pass.

pull/1/head
triton 13 years ago
parent
commit
657bd32e7b
  1. 28
      src/Generator/Passes/CleanInvalidDeclNamesPass.cs
  2. 20
      src/Generator/Transforms/Transform.cs

28
src/Generator/Passes/CleanInvalidDeclNamesPass.cs

@ -1,4 +1,5 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using Cxxi.Types; using Cxxi.Types;
@ -120,6 +121,31 @@ namespace Cxxi.Passes
typedef.ExplicityIgnored = true; typedef.ExplicityIgnored = true;
} }
} }
private void CheckEnumName(Enumeration @enum)
{
// If we still do not have a valid name, then try to guess one
// based on the enum value names.
if (!String.IsNullOrWhiteSpace(@enum.Name))
return;
var prefix = @enum.Items.Select(item => item.Name)
.ToArray().CommonPrefix();
// Try a simple heuristic to make sure we end up with a valid name.
if (prefix.Length < 3)
return;
prefix = prefix.Trim().Trim(new char[] { '_' });
@enum.Name = prefix;
}
public override bool ProcessEnum(Enumeration @enum)
{
CheckEnumName(@enum);
return base.ProcessEnum(@enum);
}
} }
public static class CleanInvalidDeclNamesExtensions public static class CleanInvalidDeclNamesExtensions

20
src/Generator/Transforms/Transform.cs

@ -115,26 +115,6 @@ namespace Cxxi.Passes
foreach (var pass in Passes.Passes) foreach (var pass in Passes.Passes)
pass.ProcessEnumItem(item); pass.ProcessEnumItem(item);
} }
// If we still do not have a valid name, then try to guess one
// based on the enum value names.
if (!String.IsNullOrWhiteSpace(@enum.Name))
return;
var names = new List<string>();
foreach (var item in @enum.Items)
names.Add(item.Name);
var prefix = names.ToArray().CommonPrefix();
// Try a simple heuristic to make sure we end up with a valid name.
if (prefix.Length >= 3)
{
prefix = prefix.Trim().Trim(new char[] { '_' });
@enum.Name = prefix;
}
} }
} }
} }
Loading…
Cancel
Save