private void WriteIsMatch(ILWriter writer, PropertyInfo property, IsMatchForAttribute isMatchAttribute) { var validationKind = ValidationKind.RegularExpressionMatch; var local = writer.DeclareLocal <string>(); if (property.PropertyType == typeof(string)) { writer.LoadFirstParameter(); writer.GetPropertyValue(property); writer.SetLocal(local); } else { var temp = writer.DeclareLocal(property.PropertyType); writer.LoadFirstParameter(); writer.GetPropertyValue(property); writer.SetLocal(temp); writer.LoadLocal(temp); var notNull = writer.IsNotNull(); WriteFailureResult(writer, validationKind, CommonResults.CannotValidateNullProperty.WithValues(property.ReflectedType.Name, property.Name)); writer.Return(); writer.MarkLabel(notNull); writer.LoadLocal(temp); writer.InstanceMethodCall(KnownMetadata.Methods.Object_ToString); writer.SetLocal(local); } writer.LoadLocal(local); writer.LoadString(isMatchAttribute.RegularExpression); writer.StaticMethodCall(KnownMetadata.Methods.Regex_IsMatch); var end = writer.IfFalseThen(); WriteFailureResult(writer, validationKind, CommonResults.RegularExpressionWasNotMatch.WithValues(property.ReflectedType.Name, property.Name)); writer.Return(); writer.MarkLabel(end); }
void WriteValidatorBody <T>(ILWriter writer) { if (typeof(T).IsValueType) { WritePropertyValidation <T>(writer); WriteSuccessResult(writer); writer.Return(); } else { writer.LoadFirstParameter(); //Load the parameter we're validating var isNull = writer.IsNotNull(); WritePropertyValidation <T>(writer); writer.MarkLabel(isNull); //Ending mark for initial parameter null check WriteSuccessResult(writer); writer.Return(); } }