private void GenerateRange(Range rangeNode)
{
TypeNode rangeClass = Templates.GetTypeTemplateByName("Range");
Debug.Assert(rangeClass.Members[0] is EnumNode);
EnumNode rangeEnum = (EnumNode)rangeClass.Members[0];
rangeEnum.Name = rangeNode.Name;
Replacer.Replace(rangeEnum, "_MinValue", rangeNode.Min);
Replacer.Replace(rangeEnum, "_MaxValue", rangeNode.Max);
InstallType(rangeEnum);
Debug.Assert(rangeClass.Members[1] is Field);
Field f = (Field)rangeClass.Members[1];
f.Name = new Identifier(rangeNode.Name.Name + "Choices");
choosableTypes.Add(rangeNode.Name, f.Name);
Debug.Assert(f.Initializer != null && f.Initializer is ConstructArray);
ConstructArray consArray = (ConstructArray)f.Initializer;
Debug.Assert(rangeNode.Min is Literal);
int min = (int)((Literal)rangeNode.Min).Value;
int max = (int)((Literal)rangeNode.Max).Value;
for (int i = min; i <= max; i++)
consArray.Initializers.Add(new Literal(i, SystemTypes.Int32));
appClass.Members.Add(f);
f.DeclaringType = appClass;
}