bool IParseNodeValidator.Validate(ParseNode node, CompilerOptions options, IErrorHandler errorHandler) { EnumerationFieldNode enumFieldNode = (EnumerationFieldNode)node; object fieldValue = enumFieldNode.Value; if (fieldValue == null) { errorHandler.ReportNodeValidationError(DSharpStringResources.ENUM_CONSTANT_VALUE_MISSING_ERROR, enumFieldNode); return(false); } if (fieldValue is long || fieldValue is ulong) { errorHandler.ReportNodeValidationError(DSharpStringResources.ENUM_VALUE_TYPE_ERROR, enumFieldNode); } return(true); }
bool IParseNodeValidator.Validate(ParseNode node, CompilerOptions options, IErrorHandler errorHandler) { EnumerationFieldNode enumFieldNode = (EnumerationFieldNode)node; object fieldValue = enumFieldNode.Value; if (fieldValue == null) { errorHandler.ReportError("Enumeration fields must have an explicit constant value specified.", enumFieldNode.Token.Location); return(false); } if ((fieldValue is long) || (fieldValue is ulong)) { errorHandler.ReportError("Enumeration fields cannot have long or ulong underlying type.", enumFieldNode.Token.Location); } return(true); }
private EnumerationFieldSymbol BuildEnumField(EnumerationFieldNode fieldNode, TypeSymbol typeSymbol) { Debug.Assert(typeSymbol is EnumerationSymbol); EnumerationSymbol enumSymbol = (EnumerationSymbol)typeSymbol; TypeSymbol fieldTypeSymbol; if (enumSymbol.UseNamedValues) { fieldTypeSymbol = _symbols.ResolveIntrinsicType(IntrinsicType.String); } else { fieldTypeSymbol = _symbols.ResolveIntrinsicType(IntrinsicType.Integer); } EnumerationFieldSymbol fieldSymbol = new EnumerationFieldSymbol(fieldNode.Name, typeSymbol, fieldNode.Value, fieldTypeSymbol); BuildMemberDetails(fieldSymbol, typeSymbol, fieldNode, fieldNode.Attributes); return(fieldSymbol); }