protected override QilNode VisitStrConcat(QilStrConcat 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 (( ( (local2).XmlType ).IsSingleton ) && (this[XmlILOptimization.EliminateStrConcatSingle])) { if (AllowReplace(XmlILOptimization.EliminateStrConcatSingle, local0)) { return Replace(XmlILOptimization.EliminateStrConcatSingle, local0, VisitNop(f.Nop(local2))); } } if (this[XmlILOptimization.EliminateStrConcat]) { if (local1.NodeType == QilNodeType.LiteralString) { string local3 = (string)((QilLiteral)local1).Value; if (local2.NodeType == QilNodeType.Sequence) { if ( AreLiteralArgs(local2) ) { if (AllowReplace(XmlILOptimization.EliminateStrConcat, local0)) { // Concatenate all constant arguments StringConcat concat = new StringConcat(); concat.Delimiter = local3; foreach (QilLiteral lit in local2) concat.Concat((string) lit); return Replace(XmlILOptimization.EliminateStrConcat, local0, VisitLiteralString(f.LiteralString( concat.GetResult() ))); } } } } } return NoReplace(local0); }