protected override QilNode VisitLength(QilUnary local0) {
QilNode local1 = local0[0];
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.EliminateLength]) {
if (local1.NodeType == QilNodeType.Sequence) {
if ( (local1).Count == (0) ) {
if (AllowReplace(XmlILOptimization.EliminateLength, local0)) {
return Replace(XmlILOptimization.EliminateLength, local0, VisitLiteralInt32(f.LiteralInt32(0)));
}
}
}
}
if (this[XmlILOptimization.EliminateLength]) {
if (( ( (local1).XmlType ).IsSingleton ) && ( !OptimizerPatterns.Read(local1).MatchesPattern(OptimizerPatternName.MaybeSideEffects) )) {
if (AllowReplace(XmlILOptimization.EliminateLength, local0)) {
return Replace(XmlILOptimization.EliminateLength, local0, VisitLiteralInt32(f.LiteralInt32(1)));
}
}
}
if (this[XmlILOptimization.IntroducePrecedingDod]) {
if ((!( IsDocOrderDistinct(local1) )) && (( IsStepPattern(local1, QilNodeType.XPathPreceding) ) || ( IsStepPattern(local1, QilNodeType.PrecedingSibling) ))) {
if (AllowReplace(XmlILOptimization.IntroducePrecedingDod, local0)) {
return Replace(XmlILOptimization.IntroducePrecedingDod, local0, VisitLength(f.Length(VisitDocOrderDistinct(f.DocOrderDistinct(local1)))));
}
}
}
return NoReplace(local0);
}