private void ConvertEnumField(PegNode node, BfsEnum block)
{
BfsEnumField field = new BfsEnumField();
StoreSourceRange(node, field);
for (PegNode enode = node.child_; enode != null; enode = enode.next_)
{
switch (GetNodeId(enode))
{
case EBinaryFileSchemaParser.number:
BfsEnumValue enumval = new BfsEnumValue();
StoreSourceRange(enode, enumval);
enumval.Value = long.Parse(GetNodeText(enode), CultureInfo.InvariantCulture);
field.EnumMatch = enumval;
break;
case EBinaryFileSchemaParser.enumrange:
BfsEnumRange enumrange = new BfsEnumRange();
StoreSourceRange(enode, enumrange);
enumrange.StartValue = long.Parse(GetNodeText(enode.child_.next_), CultureInfo.InvariantCulture);
enumrange.EndValue = long.Parse(GetNodeText(enode.child_.next_.next_), CultureInfo.InvariantCulture);
enumrange.StartInclusion =
(GetNodeText(enode.child_) == "[") ? BfsInclusionEnum.Included : BfsInclusionEnum.Excluded;
enumrange.EndInclusion =
(GetNodeText(enode.child_.next_.next_.next_) == "]") ? BfsInclusionEnum.Included : BfsInclusionEnum.Excluded;
field.EnumMatch = enumrange;
break;
case EBinaryFileSchemaParser.p_else:
field.EnumMatch = new BfsEnumElse();
StoreSourceRange(enode, field.EnumMatch);
break;
case EBinaryFileSchemaParser.action_list:
ConvertActionList(enode, field.Actions);
break;
case EBinaryFileSchemaParser.enumname:
field.Alias = GetNodeText(enode);
field.AliasSourceRange = GetSourceRange(enode);
break;
}
}
block.EnumFields.Add(field);
}