protected override QilNode VisitEq(QilBinary local0) {
QilNode local1 = local0[0];
QilNode local2 = local0[1];
if (this[XmlILOptimization.FoldNone]) {
if ( (object) ( (local1).XmlType ) == (object) XmlQueryTypeFactory.None ) {
if (AllowReplace(XmlILOptimization.FoldNone, local0)) {
return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(local1)));
}
}
}
if (this[XmlILOptimization.FoldNone]) {
if ( (object) ( (local2).XmlType ) == (object) XmlQueryTypeFactory.None ) {
if (AllowReplace(XmlILOptimization.FoldNone, local0)) {
return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(local2)));
}
}
}
if (this[XmlILOptimization.EliminateEq]) {
if ( IsLiteral((local1)) ) {
if ( IsLiteral((local2)) ) {
if (AllowReplace(XmlILOptimization.EliminateEq, local0)) {
return Replace(XmlILOptimization.EliminateEq, local0, FoldComparison(QilNodeType.Eq, local1, local2) );
}
}
}
}
if (this[XmlILOptimization.NormalizeEqLiteral]) {
if ( IsLiteral((local1)) ) {
if (!( IsLiteral((local2)) )) {
if (AllowReplace(XmlILOptimization.NormalizeEqLiteral, local0)) {
return Replace(XmlILOptimization.NormalizeEqLiteral, local0, VisitEq(f.Eq(local2, local1)));
}
}
}
}
if (this[XmlILOptimization.NormalizeXsltConvertEq]) {
if (local1.NodeType == QilNodeType.XsltConvert) {
QilNode local3 = local1[0];
QilNode local4 = local1[1];
if (local4.NodeType == QilNodeType.LiteralType) {
XmlQueryType local5 = (XmlQueryType)((QilLiteral)local4).Value;
if (( IsPrimitiveNumeric( (local3).XmlType ) ) && ( IsPrimitiveNumeric(local5) )) {
if (( IsLiteral((local2)) ) && ( CanFoldXsltConvertNonLossy(local2, (local3).XmlType ) )) {
if (AllowReplace(XmlILOptimization.NormalizeXsltConvertEq, local0)) {
return Replace(XmlILOptimization.NormalizeXsltConvertEq, local0, VisitEq(f.Eq(local3, FoldXsltConvert(local2, (local3).XmlType ) )));
}
}
}
}
}
}
if (this[XmlILOptimization.NormalizeAddEq]) {
if (local1.NodeType == QilNodeType.Add) {
QilNode local3 = local1[0];
QilNode local4 = local1[1];
if ( IsLiteral((local4)) ) {
if (( IsLiteral((local2)) ) && ( CanFoldArithmetic(QilNodeType.Subtract, (QilLiteral) local2, (QilLiteral) local4) )) {
if (AllowReplace(XmlILOptimization.NormalizeAddEq, local0)) {
return Replace(XmlILOptimization.NormalizeAddEq, local0, VisitEq(f.Eq(local3, FoldArithmetic(QilNodeType.Subtract, (QilLiteral) local2, (QilLiteral) local4) )));
}
}
}
}
}
if (this[XmlILOptimization.NormalizeIdEq]) {
if (local1.NodeType == QilNodeType.XsltGenerateId) {
QilNode local3 = local1[0];
if ( ( (local3).XmlType ).IsSingleton ) {
if (local2.NodeType == QilNodeType.XsltGenerateId) {
QilNode local4 = local2[0];
if ( ( (local4).XmlType ).IsSingleton ) {
if (AllowReplace(XmlILOptimization.NormalizeIdEq, local0)) {
return Replace(XmlILOptimization.NormalizeIdEq, local0, VisitIs(f.Is(local3, local4)));
}
}
}
}
}
}
if (this[XmlILOptimization.NormalizeIdEq]) {
if (local1.NodeType == QilNodeType.XsltGenerateId) {
QilNode local3 = local1[0];
if ( ( (local3).XmlType ).IsSingleton ) {
if (local2.NodeType == QilNodeType.StrConcat) {
QilNode local5 = local2[1];
if (local5.NodeType == QilNodeType.Loop) {
QilNode local6 = local5[0];
QilNode local8 = local5[1];
if (local6.NodeType == QilNodeType.For) {
QilNode local7 = local6[0];
if ( !( (local7).XmlType ).MaybeMany ) {
if (local8.NodeType == QilNodeType.XsltGenerateId) {
QilNode local9 = local8[0];
if (local9 == local6) {
if (AllowReplace(XmlILOptimization.NormalizeIdEq, local0)) {
QilNode local10 = VisitFor(f.For(local7));
return Replace(XmlILOptimization.NormalizeIdEq, local0, VisitNot(f.Not(VisitIsEmpty(f.IsEmpty(VisitFilter(f.Filter(local10, VisitIs(f.Is(local3, local10)))))))));
}
}
}
}
}
}
}
}
}
}
if (this[XmlILOptimization.NormalizeIdEq]) {
if (local1.NodeType == QilNodeType.StrConcat) {
QilNode local4 = local1[1];
if (local4.NodeType == QilNodeType.Loop) {
QilNode local5 = local4[0];
QilNode local7 = local4[1];
if (local5.NodeType == QilNodeType.For) {
QilNode local6 = local5[0];
if ( !( (local6).XmlType ).MaybeMany ) {
if (local7.NodeType == QilNodeType.XsltGenerateId) {
QilNode local8 = local7[0];
if (local8 == local5) {
if (local2.NodeType == QilNodeType.XsltGenerateId) {
QilNode local9 = local2[0];
if ( ( (local9).XmlType ).IsSingleton ) {
if (AllowReplace(XmlILOptimization.NormalizeIdEq, local0)) {
QilNode local10 = VisitFor(f.For(local6));
return Replace(XmlILOptimization.NormalizeIdEq, local0, VisitNot(f.Not(VisitIsEmpty(f.IsEmpty(VisitFilter(f.Filter(local10, VisitIs(f.Is(local9, local10)))))))));
}
}
}
}
}
}
}
}
}
}
if (this[XmlILOptimization.NormalizeMuenchian]) {
if (local1.NodeType == QilNodeType.Length) {
QilNode local3 = local1[0];
if (local3.NodeType == QilNodeType.Union) {
QilNode local4 = local3[0];
QilNode local5 = local3[1];
if (( ( (local4).XmlType ).IsSingleton ) && ( !( (local5).XmlType ).MaybeMany )) {
if (local2.NodeType == QilNodeType.LiteralInt32) {
int local6 = (int)((QilLiteral)local2).Value;
if (local6 == 1) {
if (AllowReplace(XmlILOptimization.NormalizeMuenchian, local0)) {
QilNode local7 = VisitFor(f.For(local5));
return Replace(XmlILOptimization.NormalizeMuenchian, local0, VisitIsEmpty(f.IsEmpty(VisitFilter(f.Filter(local7, VisitNot(f.Not(VisitIs(f.Is(local4, local7)))))))));
}
}
}
}
}
}
}
if (this[XmlILOptimization.NormalizeMuenchian]) {
if (local1.NodeType == QilNodeType.Length) {
QilNode local3 = local1[0];
if (local3.NodeType == QilNodeType.Union) {
QilNode local4 = local3[0];
QilNode local5 = local3[1];
if (( !( (local4).XmlType ).MaybeMany ) && ( ( (local5).XmlType ).IsSingleton )) {
if (local2.NodeType == QilNodeType.LiteralInt32) {
int local6 = (int)((QilLiteral)local2).Value;
if (local6 == 1) {
if (AllowReplace(XmlILOptimization.NormalizeMuenchian, local0)) {
QilNode local7 = VisitFor(f.For(local4));
return Replace(XmlILOptimization.NormalizeMuenchian, local0, VisitIsEmpty(f.IsEmpty(VisitFilter(f.Filter(local7, VisitNot(f.Not(VisitIs(f.Is(local7, local5)))))))));
}
}
}
}
}
}
}
if (this[XmlILOptimization.AnnotateMaxLengthEq]) {
if (local1.NodeType == QilNodeType.Length) {
if (local2.NodeType == QilNodeType.LiteralInt32) {
int local4 = (int)((QilLiteral)local2).Value;
if (AllowReplace(XmlILOptimization.AnnotateMaxLengthEq, local0)) {
OptimizerPatterns.Write((QilNode) (local1)).AddPattern(OptimizerPatternName.MaxPosition); OptimizerPatterns.Write((QilNode) (local1)).AddArgument(OptimizerPatternArgument.MaxPosition, local4); }
}
}
}
return NoReplace(local0);
}