Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XmlILOptimizerVisitor.cs
Go to the documentation of this file.
6
8
10{
11 private sealed class NodeCounter : QilVisitor
12 {
13 private QilNode target;
14
15 private int cnt;
16
17 public int Count(QilNode expr, QilNode target)
18 {
19 cnt = 0;
21 Visit(expr);
22 return cnt;
23 }
24
25 protected override QilNode Visit(QilNode n)
26 {
27 if (n == null)
28 {
29 return null;
30 }
31 if (n == target)
32 {
33 cnt++;
34 }
35 return VisitChildren(n);
36 }
37
38 protected override QilNode VisitReference(QilNode n)
39 {
40 if (n == target)
41 {
42 cnt++;
43 }
44 return n;
45 }
46 }
47
48 private class NodeFinder : QilVisitor
49 {
50 protected bool result;
51
52 protected QilNode target;
53
54 protected QilNode parent;
55
56 public bool Find(QilNode expr, QilNode target)
57 {
58 result = false;
60 parent = null;
62 return result;
63 }
64
65 protected override QilNode Visit(QilNode expr)
66 {
67 if (!result)
68 {
69 if (expr == target)
70 {
71 result = OnFound(expr);
72 }
73 if (!result)
74 {
76 parent = expr;
77 VisitChildren(expr);
79 }
80 }
81 return expr;
82 }
83
84 protected override QilNode VisitReference(QilNode expr)
85 {
86 if (expr == target)
87 {
88 result = OnFound(expr);
89 }
90 return expr;
91 }
92
93 protected virtual bool OnFound(QilNode expr)
94 {
95 return true;
96 }
97 }
98
99 private sealed class PositionOfFinder : NodeFinder
100 {
101 protected override bool OnFound(QilNode expr)
102 {
103 if (parent != null)
104 {
105 return parent.NodeType == QilNodeType.PositionOf;
106 }
107 return false;
108 }
109 }
110
111 private sealed class EqualityIndexVisitor : QilVisitor
112 {
113 private bool result;
114
115 private QilNode ctxt;
116
117 private QilNode key;
118
119 public bool Scan(QilNode expr, QilNode ctxt, QilNode key)
120 {
121 result = true;
122 this.ctxt = ctxt;
123 this.key = key;
124 Visit(expr);
125 return result;
126 }
127
128 protected override QilNode VisitReference(QilNode expr)
129 {
130 if (result && (expr == key || expr == ctxt))
131 {
132 result = false;
133 return expr;
134 }
135 return expr;
136 }
137
138 protected override QilNode VisitRoot(QilUnary root)
139 {
140 if (root.Child == ctxt)
141 {
142 return root;
143 }
144 return VisitChildren(root);
145 }
146 }
147
149
150 private static readonly QilPatterns s_patternsOpt = new QilPatterns(141, allSet: true);
151
152 private readonly QilExpression _qil;
153
155
157
159
160 private readonly NodeCounter _nodeCounter = new NodeCounter();
161
162 private readonly SubstitutionList _subs = new SubstitutionList();
163
164 private bool this[XmlILOptimization ann] => base.Patterns.IsSet((int)ann);
165
167 {
168 QilPatterns qilPatterns = new QilPatterns(141, allSet: false);
169 qilPatterns.Add(104);
170 qilPatterns.Add(88);
171 qilPatterns.Add(97);
172 qilPatterns.Add(71);
173 qilPatterns.Add(70);
174 qilPatterns.Add(58);
175 qilPatterns.Add(96);
176 qilPatterns.Add(79);
177 qilPatterns.Add(78);
178 qilPatterns.Add(91);
179 qilPatterns.Add(93);
180 qilPatterns.Add(134);
181 qilPatterns.Add(118);
182 qilPatterns.Add(112);
183 qilPatterns.Add(41);
184 qilPatterns.Add(48);
185 qilPatterns.Add(15);
186 qilPatterns.Add(8);
187 qilPatterns.Add(23);
188 qilPatterns.Add(24);
189 qilPatterns.Add(7);
190 qilPatterns.Add(18);
191 return qilPatterns;
192 }
193
202
204 {
206 if (this[XmlILOptimization.TailCall])
207 {
209 }
210 return qilExpression;
211 }
212
213 protected override QilNode Visit(QilNode nd)
214 {
215 if (nd != null && this[XmlILOptimization.EliminateNamespaceDecl])
216 {
217 switch (nd.NodeType)
218 {
219 case QilNodeType.QilExpression:
221 break;
222 case QilNodeType.ElementCtor:
223 if (!XmlILConstructInfo.Read(nd).IsNamespaceInScope)
224 {
226 }
227 break;
228 case QilNodeType.DocumentCtor:
230 break;
231 }
232 }
233 return base.Visit(nd);
234 }
235
237 {
239 if (qilNode == null)
240 {
242 }
243 if (this[XmlILOptimization.EliminateLiteralVariables] && qilNode != null && (qilNode.NodeType == QilNodeType.Let || qilNode.NodeType == QilNodeType.For))
244 {
245 QilNode binding = ((QilIterator)oldNode).Binding;
246 if (IsLiteral(binding))
247 {
248 return Replace(XmlILOptimization.EliminateLiteralVariables, qilNode, binding.ShallowClone(f));
249 }
250 }
251 if (this[XmlILOptimization.EliminateUnusedGlobals] && IsGlobalValue(qilNode))
252 {
253 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.IsReferenced);
254 }
255 return base.VisitReference(qilNode);
256 }
257
259 {
260 return base.AllowReplace((int)pattern, original);
261 }
262
264 {
265 return base.Replace((int)pattern, original, replacement);
266 }
267
268 [return: NotNullIfNotNull("node")]
269 protected override QilNode NoReplace(QilNode node)
270 {
271 if (node != null)
272 {
273 QilNodeType nodeType = node.NodeType;
274 if (nodeType <= QilNodeType.Invoke)
275 {
276 if ((uint)(nodeType - 12) <= 1u || (nodeType == QilNodeType.Invoke && ((QilInvoke)node).Function.MaybeSideEffects))
277 {
278 goto IL_002c;
279 }
280 }
281 else if (nodeType == QilNodeType.XsltInvokeLateBound || (nodeType == QilNodeType.XsltInvokeEarlyBound && ((QilInvokeEarlyBound)node).Name.NamespaceUri.Length != 0))
282 {
283 goto IL_002c;
284 }
285 int num = 0;
286 while (num < node.Count)
287 {
288 if (node[num] == null || !OptimizerPatterns.Read(node[num]).MatchesPattern(OptimizerPatternName.MaybeSideEffects))
289 {
290 num++;
291 continue;
292 }
293 goto IL_002c;
294 }
295 }
296 goto IL_0095;
297 IL_002c:
298 OptimizerPatterns.Write(node).AddPattern(OptimizerPatternName.MaybeSideEffects);
299 goto IL_0095;
300 IL_0095:
301 return node;
302 }
303
305 {
306 if (node.NodeType != QilNodeType.Let || !_qil.GlobalVariableList.Contains(node))
307 {
308 base.RecalculateType(node, oldType);
309 }
310 }
311
313 {
315 if (this[XmlILOptimization.EliminateUnusedGlobals] && AllowReplace(XmlILOptimization.EliminateUnusedGlobals, local0))
316 {
317 EliminateUnusedGlobals(local0.GlobalVariableList);
318 EliminateUnusedGlobals(local0.GlobalParameterList);
319 EliminateUnusedGlobals(local0.FunctionList);
320 }
321 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
322 {
323 foreach (QilFunction function in local0.FunctionList)
324 {
325 if (IsConstructedExpression(function.Definition))
326 {
327 function.Definition = _contentAnalyzer.Analyze(function, function.Definition);
328 }
329 }
331 XmlILConstructInfo.Write(local0.Root).PushToWriterLast = true;
332 }
333 return NoReplace(local0);
334 }
335
337 {
338 QilNode ndSrc = local0[0];
339 if (this[XmlILOptimization.AnnotateBarrier] && AllowReplace(XmlILOptimization.AnnotateBarrier, local0))
340 {
343 }
344 return NoReplace(local0);
345 }
346
348 {
351 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
352 {
353 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
354 }
355 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
356 {
358 }
359 return NoReplace(local0);
360 }
361
362 protected override QilNode VisitNop(QilUnary local0)
363 {
364 QilNode replacement = local0[0];
365 if (this[XmlILOptimization.EliminateNop] && AllowReplace(XmlILOptimization.EliminateNop, local0))
366 {
367 return Replace(XmlILOptimization.EliminateNop, local0, replacement);
368 }
369 return NoReplace(local0);
370 }
371
372 protected override QilNode VisitError(QilUnary local0)
373 {
375 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
376 {
377 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
378 }
379 return NoReplace(local0);
380 }
381
383 {
385 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
386 {
387 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
388 }
389 return NoReplace(local0);
390 }
391
392 protected override QilNode VisitLet(QilIterator local0)
393 {
394 QilNode ndSrc = local0[0];
395 if (local0.XmlType.IsSingleton && !IsGlobalVariable(local0) && this[XmlILOptimization.NormalizeSingletonLet] && AllowReplace(XmlILOptimization.NormalizeSingletonLet, local0))
396 {
399 }
400 if (this[XmlILOptimization.AnnotateLet] && AllowReplace(XmlILOptimization.AnnotateLet, local0))
401 {
405 }
406 return NoReplace(local0);
407 }
408
410 {
412 if (this[XmlILOptimization.EliminatePositionOf] && qilNode.NodeType != QilNodeType.For && AllowReplace(XmlILOptimization.EliminatePositionOf, local0))
413 {
414 return Replace(XmlILOptimization.EliminatePositionOf, local0, VisitLiteralInt32(f.LiteralInt32(1)));
415 }
416 if (this[XmlILOptimization.EliminatePositionOf] && qilNode.NodeType == QilNodeType.For)
417 {
419 if (qilNode2.XmlType.IsSingleton && AllowReplace(XmlILOptimization.EliminatePositionOf, local0))
420 {
421 return Replace(XmlILOptimization.EliminatePositionOf, local0, VisitLiteralInt32(f.LiteralInt32(1)));
422 }
423 }
424 if (this[XmlILOptimization.AnnotatePositionalIterator] && AllowReplace(XmlILOptimization.AnnotatePositionalIterator, local0))
425 {
426 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.IsPositional);
427 }
428 return NoReplace(local0);
429 }
430
431 protected override QilNode VisitAnd(QilBinary local0)
432 {
435 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
436 {
437 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
438 }
439 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
440 {
442 }
443 if (this[XmlILOptimization.EliminateAnd] && qilNode.NodeType == QilNodeType.True && AllowReplace(XmlILOptimization.EliminateAnd, local0))
444 {
445 return Replace(XmlILOptimization.EliminateAnd, local0, qilNode2);
446 }
447 if (this[XmlILOptimization.EliminateAnd] && qilNode.NodeType == QilNodeType.False && AllowReplace(XmlILOptimization.EliminateAnd, local0))
448 {
449 return Replace(XmlILOptimization.EliminateAnd, local0, qilNode);
450 }
451 if (this[XmlILOptimization.EliminateAnd] && qilNode2.NodeType == QilNodeType.True && AllowReplace(XmlILOptimization.EliminateAnd, local0))
452 {
453 return Replace(XmlILOptimization.EliminateAnd, local0, qilNode);
454 }
455 if (this[XmlILOptimization.EliminateAnd] && qilNode2.NodeType == QilNodeType.False && AllowReplace(XmlILOptimization.EliminateAnd, local0))
456 {
457 return Replace(XmlILOptimization.EliminateAnd, local0, qilNode2);
458 }
459 return NoReplace(local0);
460 }
461
462 protected override QilNode VisitOr(QilBinary local0)
463 {
466 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
467 {
468 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
469 }
470 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
471 {
473 }
474 if (this[XmlILOptimization.EliminateOr] && qilNode.NodeType == QilNodeType.True && AllowReplace(XmlILOptimization.EliminateOr, local0))
475 {
476 return Replace(XmlILOptimization.EliminateOr, local0, qilNode);
477 }
478 if (this[XmlILOptimization.EliminateOr] && qilNode.NodeType == QilNodeType.False && AllowReplace(XmlILOptimization.EliminateOr, local0))
479 {
480 return Replace(XmlILOptimization.EliminateOr, local0, qilNode2);
481 }
482 if (this[XmlILOptimization.EliminateOr] && qilNode2.NodeType == QilNodeType.True && AllowReplace(XmlILOptimization.EliminateOr, local0))
483 {
484 return Replace(XmlILOptimization.EliminateOr, local0, qilNode2);
485 }
486 if (this[XmlILOptimization.EliminateOr] && qilNode2.NodeType == QilNodeType.False && AllowReplace(XmlILOptimization.EliminateOr, local0))
487 {
488 return Replace(XmlILOptimization.EliminateOr, local0, qilNode);
489 }
490 return NoReplace(local0);
491 }
492
493 protected override QilNode VisitNot(QilUnary local0)
494 {
496 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
497 {
498 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
499 }
500 if (this[XmlILOptimization.EliminateNot] && qilNode.NodeType == QilNodeType.True && AllowReplace(XmlILOptimization.EliminateNot, local0))
501 {
502 return Replace(XmlILOptimization.EliminateNot, local0, VisitFalse(f.False()));
503 }
504 if (this[XmlILOptimization.EliminateNot] && qilNode.NodeType == QilNodeType.False && AllowReplace(XmlILOptimization.EliminateNot, local0))
505 {
506 return Replace(XmlILOptimization.EliminateNot, local0, VisitTrue(f.True()));
507 }
508 return NoReplace(local0);
509 }
510
512 {
516 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
517 {
518 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
519 }
520 if (this[XmlILOptimization.EliminateConditional] && qilNode.NodeType == QilNodeType.True && AllowReplace(XmlILOptimization.EliminateConditional, local0))
521 {
522 return Replace(XmlILOptimization.EliminateConditional, local0, qilNode2);
523 }
524 if (this[XmlILOptimization.EliminateConditional] && qilNode.NodeType == QilNodeType.False && AllowReplace(XmlILOptimization.EliminateConditional, local0))
525 {
526 return Replace(XmlILOptimization.EliminateConditional, local0, qilNode3);
527 }
528 if (this[XmlILOptimization.EliminateConditional] && qilNode2.NodeType == QilNodeType.True && qilNode3.NodeType == QilNodeType.False && AllowReplace(XmlILOptimization.EliminateConditional, local0))
529 {
530 return Replace(XmlILOptimization.EliminateConditional, local0, qilNode);
531 }
532 if (this[XmlILOptimization.EliminateConditional] && qilNode2.NodeType == QilNodeType.False && qilNode3.NodeType == QilNodeType.True && AllowReplace(XmlILOptimization.EliminateConditional, local0))
533 {
534 return Replace(XmlILOptimization.EliminateConditional, local0, VisitNot(f.Not(qilNode)));
535 }
536 if (this[XmlILOptimization.FoldConditionalNot] && qilNode.NodeType == QilNodeType.Not)
537 {
538 QilNode left = qilNode[0];
539 if (AllowReplace(XmlILOptimization.FoldConditionalNot, local0))
540 {
541 return Replace(XmlILOptimization.FoldConditionalNot, local0, VisitConditional(f.Conditional(left, qilNode3, qilNode2)));
542 }
543 }
544 if (this[XmlILOptimization.NormalizeConditionalText] && qilNode2.NodeType == QilNodeType.TextCtor)
545 {
547 if (qilNode3.NodeType == QilNodeType.TextCtor)
548 {
549 QilNode right = qilNode3[0];
550 if (AllowReplace(XmlILOptimization.NormalizeConditionalText, local0))
551 {
552 return Replace(XmlILOptimization.NormalizeConditionalText, local0, VisitTextCtor(f.TextCtor(VisitConditional(f.Conditional(qilNode, center, right)))));
553 }
554 }
555 }
556 return NoReplace(local0);
557 }
558
560 {
563 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
564 {
566 }
567 return NoReplace(local0);
568 }
569
570 protected override QilNode VisitLength(QilUnary local0)
571 {
573 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
574 {
575 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
576 }
577 if (this[XmlILOptimization.EliminateLength] && qilNode.NodeType == QilNodeType.Sequence && qilNode.Count == 0 && AllowReplace(XmlILOptimization.EliminateLength, local0))
578 {
579 return Replace(XmlILOptimization.EliminateLength, local0, VisitLiteralInt32(f.LiteralInt32(0)));
580 }
581 if (this[XmlILOptimization.EliminateLength] && qilNode.XmlType.IsSingleton && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && AllowReplace(XmlILOptimization.EliminateLength, local0))
582 {
583 return Replace(XmlILOptimization.EliminateLength, local0, VisitLiteralInt32(f.LiteralInt32(1)));
584 }
585 if (this[XmlILOptimization.IntroducePrecedingDod] && !IsDocOrderDistinct(qilNode) && (IsStepPattern(qilNode, QilNodeType.XPathPreceding) || IsStepPattern(qilNode, QilNodeType.PrecedingSibling)) && AllowReplace(XmlILOptimization.IntroducePrecedingDod, local0))
586 {
588 }
589 return NoReplace(local0);
590 }
591
593 {
594 if (local0.Count == 1 && this[XmlILOptimization.EliminateSequence] && AllowReplace(XmlILOptimization.EliminateSequence, local0))
595 {
596 return Replace(XmlILOptimization.EliminateSequence, local0, local0[0]);
597 }
598 if (HasNestedSequence(local0) && this[XmlILOptimization.NormalizeNestedSequences] && AllowReplace(XmlILOptimization.NormalizeNestedSequences, local0))
599 {
601 foreach (QilNode item in local0)
602 {
603 if (item.NodeType == QilNodeType.Sequence)
604 {
606 }
607 else
608 {
610 }
611 }
613 return Replace(XmlILOptimization.NormalizeNestedSequences, local0, qilNode);
614 }
615 return NoReplace(local0);
616 }
617
618 protected override QilNode VisitUnion(QilBinary local0)
619 {
622 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
623 {
624 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
625 }
626 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
627 {
629 }
630 if (this[XmlILOptimization.EliminateUnion] && qilNode2 == qilNode && AllowReplace(XmlILOptimization.EliminateUnion, local0))
631 {
633 }
634 if (this[XmlILOptimization.EliminateUnion] && qilNode.NodeType == QilNodeType.Sequence && qilNode.Count == 0 && AllowReplace(XmlILOptimization.EliminateUnion, local0))
635 {
637 }
638 if (this[XmlILOptimization.EliminateUnion] && qilNode2.NodeType == QilNodeType.Sequence && qilNode2.Count == 0 && AllowReplace(XmlILOptimization.EliminateUnion, local0))
639 {
641 }
642 if (this[XmlILOptimization.EliminateUnion] && qilNode.NodeType == QilNodeType.XmlContext && qilNode2.NodeType == QilNodeType.XmlContext && AllowReplace(XmlILOptimization.EliminateUnion, local0))
643 {
644 return Replace(XmlILOptimization.EliminateUnion, local0, qilNode);
645 }
646 if (this[XmlILOptimization.NormalizeUnion] && (!IsDocOrderDistinct(qilNode) || !IsDocOrderDistinct(qilNode2)) && AllowReplace(XmlILOptimization.NormalizeUnion, local0))
647 {
649 }
650 if (this[XmlILOptimization.AnnotateUnion] && AllowReplace(XmlILOptimization.AnnotateUnion, local0))
651 {
652 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
653 }
654 if (this[XmlILOptimization.AnnotateUnionContent] && (IsStepPattern(qilNode, QilNodeType.Content) || IsStepPattern(qilNode, QilNodeType.Union)) && (IsStepPattern(qilNode2, QilNodeType.Content) || IsStepPattern(qilNode2, QilNodeType.Union)) && OptimizerPatterns.Read(qilNode).GetArgument(OptimizerPatternArgument.StepInput) == OptimizerPatterns.Read(qilNode2).GetArgument(OptimizerPatternArgument.StepInput) && AllowReplace(XmlILOptimization.AnnotateUnionContent, local0))
655 {
657 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.SameDepth);
658 }
659 return NoReplace(local0);
660 }
661
663 {
666 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
667 {
668 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
669 }
670 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
671 {
673 }
674 if (this[XmlILOptimization.EliminateIntersection] && qilNode2 == qilNode && AllowReplace(XmlILOptimization.EliminateIntersection, local0))
675 {
677 }
678 if (this[XmlILOptimization.EliminateIntersection] && qilNode.NodeType == QilNodeType.Sequence && qilNode.Count == 0 && AllowReplace(XmlILOptimization.EliminateIntersection, local0))
679 {
680 return Replace(XmlILOptimization.EliminateIntersection, local0, qilNode);
681 }
682 if (this[XmlILOptimization.EliminateIntersection] && qilNode2.NodeType == QilNodeType.Sequence && qilNode2.Count == 0 && AllowReplace(XmlILOptimization.EliminateIntersection, local0))
683 {
684 return Replace(XmlILOptimization.EliminateIntersection, local0, qilNode2);
685 }
686 if (this[XmlILOptimization.EliminateIntersection] && qilNode.NodeType == QilNodeType.XmlContext && qilNode2.NodeType == QilNodeType.XmlContext && AllowReplace(XmlILOptimization.EliminateIntersection, local0))
687 {
688 return Replace(XmlILOptimization.EliminateIntersection, local0, qilNode);
689 }
690 if (this[XmlILOptimization.NormalizeIntersect] && (!IsDocOrderDistinct(qilNode) || !IsDocOrderDistinct(qilNode2)) && AllowReplace(XmlILOptimization.NormalizeIntersect, local0))
691 {
693 }
694 if (this[XmlILOptimization.AnnotateIntersect] && AllowReplace(XmlILOptimization.AnnotateIntersect, local0))
695 {
696 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
697 }
698 return NoReplace(local0);
699 }
700
702 {
705 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
706 {
707 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
708 }
709 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
710 {
712 }
713 if (this[XmlILOptimization.EliminateDifference] && qilNode.NodeType == QilNodeType.Sequence && qilNode.Count == 0 && AllowReplace(XmlILOptimization.EliminateDifference, local0))
714 {
715 return Replace(XmlILOptimization.EliminateDifference, local0, qilNode);
716 }
717 if (this[XmlILOptimization.EliminateDifference] && qilNode2.NodeType == QilNodeType.Sequence && qilNode2.Count == 0 && AllowReplace(XmlILOptimization.EliminateDifference, local0))
718 {
720 }
721 if (this[XmlILOptimization.EliminateDifference] && qilNode2 == qilNode && AllowReplace(XmlILOptimization.EliminateDifference, local0))
722 {
723 return Replace(XmlILOptimization.EliminateDifference, local0, VisitSequence(f.Sequence()));
724 }
725 if (this[XmlILOptimization.EliminateDifference] && qilNode.NodeType == QilNodeType.XmlContext && qilNode2.NodeType == QilNodeType.XmlContext && AllowReplace(XmlILOptimization.EliminateDifference, local0))
726 {
727 return Replace(XmlILOptimization.EliminateDifference, local0, VisitSequence(f.Sequence()));
728 }
729 if (this[XmlILOptimization.NormalizeDifference] && (!IsDocOrderDistinct(qilNode) || !IsDocOrderDistinct(qilNode2)) && AllowReplace(XmlILOptimization.NormalizeDifference, local0))
730 {
732 }
733 if (this[XmlILOptimization.AnnotateDifference] && AllowReplace(XmlILOptimization.AnnotateDifference, local0))
734 {
735 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
736 }
737 return NoReplace(local0);
738 }
739
741 {
743 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
744 {
745 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
746 }
747 if (this[XmlILOptimization.EliminateAverage] && qilNode.XmlType.Cardinality == XmlQueryCardinality.Zero && AllowReplace(XmlILOptimization.EliminateAverage, local0))
748 {
749 return Replace(XmlILOptimization.EliminateAverage, local0, VisitNop(f.Nop(qilNode)));
750 }
751 return NoReplace(local0);
752 }
753
754 protected override QilNode VisitSum(QilUnary local0)
755 {
757 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
758 {
759 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
760 }
761 if (this[XmlILOptimization.EliminateSum] && qilNode.XmlType.Cardinality == XmlQueryCardinality.Zero && AllowReplace(XmlILOptimization.EliminateSum, local0))
762 {
763 return Replace(XmlILOptimization.EliminateSum, local0, VisitNop(f.Nop(qilNode)));
764 }
765 return NoReplace(local0);
766 }
767
769 {
771 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
772 {
773 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
774 }
775 if (this[XmlILOptimization.EliminateMinimum] && qilNode.XmlType.Cardinality == XmlQueryCardinality.Zero && AllowReplace(XmlILOptimization.EliminateMinimum, local0))
776 {
777 return Replace(XmlILOptimization.EliminateMinimum, local0, VisitNop(f.Nop(qilNode)));
778 }
779 return NoReplace(local0);
780 }
781
783 {
785 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
786 {
787 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
788 }
789 if (this[XmlILOptimization.EliminateMaximum] && qilNode.XmlType.Cardinality == XmlQueryCardinality.Zero && AllowReplace(XmlILOptimization.EliminateMaximum, local0))
790 {
791 return Replace(XmlILOptimization.EliminateMaximum, local0, VisitNop(f.Nop(qilNode)));
792 }
793 return NoReplace(local0);
794 }
795
796 protected override QilNode VisitNegate(QilUnary local0)
797 {
799 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
800 {
801 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
802 }
803 if (this[XmlILOptimization.EliminateNegate] && qilNode.NodeType == QilNodeType.LiteralDecimal)
804 {
805 decimal num = (decimal)((QilLiteral)qilNode).Value;
806 if (AllowReplace(XmlILOptimization.EliminateNegate, local0))
807 {
808 return Replace(XmlILOptimization.EliminateNegate, local0, VisitLiteralDecimal(f.LiteralDecimal(-num)));
809 }
810 }
811 if (this[XmlILOptimization.EliminateNegate] && qilNode.NodeType == QilNodeType.LiteralDouble)
812 {
813 double num2 = (double)((QilLiteral)qilNode).Value;
814 if (AllowReplace(XmlILOptimization.EliminateNegate, local0))
815 {
816 return Replace(XmlILOptimization.EliminateNegate, local0, VisitLiteralDouble(f.LiteralDouble(0.0 - num2)));
817 }
818 }
819 if (this[XmlILOptimization.EliminateNegate] && qilNode.NodeType == QilNodeType.LiteralInt32)
820 {
821 int num3 = (int)((QilLiteral)qilNode).Value;
822 if (AllowReplace(XmlILOptimization.EliminateNegate, local0))
823 {
825 }
826 }
827 if (this[XmlILOptimization.EliminateNegate] && qilNode.NodeType == QilNodeType.LiteralInt64)
828 {
829 long num4 = (long)((QilLiteral)qilNode).Value;
830 if (AllowReplace(XmlILOptimization.EliminateNegate, local0))
831 {
833 }
834 }
835 return NoReplace(local0);
836 }
837
838 protected override QilNode VisitAdd(QilBinary local0)
839 {
842 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
843 {
844 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
845 }
846 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
847 {
849 }
851 {
853 }
854 if (this[XmlILOptimization.NormalizeAddLiteral] && IsLiteral(qilNode) && !IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.NormalizeAddLiteral, local0))
855 {
856 return Replace(XmlILOptimization.NormalizeAddLiteral, local0, VisitAdd(f.Add(qilNode2, qilNode)));
857 }
858 return NoReplace(local0);
859 }
860
862 {
865 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
866 {
867 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
868 }
869 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
870 {
872 }
874 {
876 }
877 return NoReplace(local0);
878 }
879
881 {
884 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
885 {
886 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
887 }
888 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
889 {
891 }
893 {
895 }
896 if (this[XmlILOptimization.NormalizeMultiplyLiteral] && IsLiteral(qilNode) && !IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.NormalizeMultiplyLiteral, local0))
897 {
898 return Replace(XmlILOptimization.NormalizeMultiplyLiteral, local0, VisitMultiply(f.Multiply(qilNode2, qilNode)));
899 }
900 return NoReplace(local0);
901 }
902
904 {
907 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
908 {
909 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
910 }
911 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
912 {
914 }
916 {
918 }
919 return NoReplace(local0);
920 }
921
923 {
926 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
927 {
928 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
929 }
930 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
931 {
933 }
935 {
937 }
938 return NoReplace(local0);
939 }
940
942 {
944 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
945 {
946 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
947 }
948 if (this[XmlILOptimization.EliminateStrLength] && qilNode.NodeType == QilNodeType.LiteralString)
949 {
950 string text = (string)((QilLiteral)qilNode).Value;
951 if (AllowReplace(XmlILOptimization.EliminateStrLength, local0))
952 {
953 return Replace(XmlILOptimization.EliminateStrLength, local0, VisitLiteralInt32(f.LiteralInt32(text.Length)));
954 }
955 }
956 return NoReplace(local0);
957 }
958
960 {
963 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
964 {
965 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
966 }
967 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
968 {
970 }
971 if (qilNode2.XmlType.IsSingleton && this[XmlILOptimization.EliminateStrConcatSingle] && AllowReplace(XmlILOptimization.EliminateStrConcatSingle, local0))
972 {
973 return Replace(XmlILOptimization.EliminateStrConcatSingle, local0, VisitNop(f.Nop(qilNode2)));
974 }
975 if (this[XmlILOptimization.EliminateStrConcat] && qilNode.NodeType == QilNodeType.LiteralString)
976 {
977 string delimiter = (string)((QilLiteral)qilNode).Value;
978 if (qilNode2.NodeType == QilNodeType.Sequence && AreLiteralArgs(qilNode2) && AllowReplace(XmlILOptimization.EliminateStrConcat, local0))
979 {
982 foreach (QilLiteral item in qilNode2)
983 {
984 stringConcat.Concat(item);
985 }
986 return Replace(XmlILOptimization.EliminateStrConcat, local0, VisitLiteralString(f.LiteralString(stringConcat.GetResult())));
987 }
988 }
989 return NoReplace(local0);
990 }
991
993 {
996 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
997 {
998 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
999 }
1000 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1001 {
1002 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
1003 }
1004 return NoReplace(local0);
1005 }
1006
1007 protected override QilNode VisitNe(QilBinary local0)
1008 {
1009 QilNode qilNode = local0[0];
1010 QilNode qilNode2 = local0[1];
1011 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1012 {
1013 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1014 }
1015 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1016 {
1017 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
1018 }
1019 if (this[XmlILOptimization.EliminateNe] && IsLiteral(qilNode) && IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.EliminateNe, local0))
1020 {
1022 }
1023 if (this[XmlILOptimization.NormalizeNeLiteral] && IsLiteral(qilNode) && !IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.NormalizeNeLiteral, local0))
1024 {
1025 return Replace(XmlILOptimization.NormalizeNeLiteral, local0, VisitNe(f.Ne(qilNode2, qilNode)));
1026 }
1027 if (this[XmlILOptimization.NormalizeXsltConvertNe] && qilNode.NodeType == QilNodeType.XsltConvert)
1028 {
1031 if (qilNode4.NodeType == QilNodeType.LiteralType)
1032 {
1035 {
1036 return Replace(XmlILOptimization.NormalizeXsltConvertNe, local0, VisitNe(f.Ne(qilNode3, FoldXsltConvert(qilNode2, qilNode3.XmlType))));
1037 }
1038 }
1039 }
1040 if (this[XmlILOptimization.NormalizeIdNe] && qilNode.NodeType == QilNodeType.XsltGenerateId)
1041 {
1043 if (qilNode5.XmlType.IsSingleton && qilNode2.NodeType == QilNodeType.XsltGenerateId)
1044 {
1046 if (qilNode6.XmlType.IsSingleton && AllowReplace(XmlILOptimization.NormalizeIdNe, local0))
1047 {
1048 return Replace(XmlILOptimization.NormalizeIdNe, local0, VisitNot(f.Not(VisitIs(f.Is(qilNode5, qilNode6)))));
1049 }
1050 }
1051 }
1052 if (this[XmlILOptimization.NormalizeLengthNe] && qilNode.NodeType == QilNodeType.Length)
1053 {
1054 QilNode child = qilNode[0];
1055 if (qilNode2.NodeType == QilNodeType.LiteralInt32 && (int)((QilLiteral)qilNode2).Value == 0 && AllowReplace(XmlILOptimization.NormalizeLengthNe, local0))
1056 {
1057 return Replace(XmlILOptimization.NormalizeLengthNe, local0, VisitNot(f.Not(VisitIsEmpty(f.IsEmpty(child)))));
1058 }
1059 }
1060 if (this[XmlILOptimization.AnnotateMaxLengthNe] && qilNode.NodeType == QilNodeType.Length && qilNode2.NodeType == QilNodeType.LiteralInt32)
1061 {
1062 int num = (int)((QilLiteral)qilNode2).Value;
1063 if (AllowReplace(XmlILOptimization.AnnotateMaxLengthNe, local0))
1064 {
1065 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1066 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num);
1067 }
1068 }
1069 return NoReplace(local0);
1070 }
1071
1072 protected override QilNode VisitEq(QilBinary local0)
1073 {
1074 QilNode qilNode = local0[0];
1075 QilNode qilNode2 = local0[1];
1076 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1077 {
1078 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1079 }
1080 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1081 {
1082 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
1083 }
1084 if (this[XmlILOptimization.EliminateEq] && IsLiteral(qilNode) && IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.EliminateEq, local0))
1085 {
1087 }
1088 if (this[XmlILOptimization.NormalizeEqLiteral] && IsLiteral(qilNode) && !IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.NormalizeEqLiteral, local0))
1089 {
1090 return Replace(XmlILOptimization.NormalizeEqLiteral, local0, VisitEq(f.Eq(qilNode2, qilNode)));
1091 }
1092 if (this[XmlILOptimization.NormalizeXsltConvertEq] && qilNode.NodeType == QilNodeType.XsltConvert)
1093 {
1096 if (qilNode4.NodeType == QilNodeType.LiteralType)
1097 {
1100 {
1101 return Replace(XmlILOptimization.NormalizeXsltConvertEq, local0, VisitEq(f.Eq(qilNode3, FoldXsltConvert(qilNode2, qilNode3.XmlType))));
1102 }
1103 }
1104 }
1105 if (this[XmlILOptimization.NormalizeAddEq] && qilNode.NodeType == QilNodeType.Add)
1106 {
1107 QilNode left = qilNode[0];
1110 {
1112 }
1113 }
1114 if (this[XmlILOptimization.NormalizeIdEq] && qilNode.NodeType == QilNodeType.XsltGenerateId)
1115 {
1117 if (qilNode6.XmlType.IsSingleton && qilNode2.NodeType == QilNodeType.XsltGenerateId)
1118 {
1120 if (qilNode7.XmlType.IsSingleton && AllowReplace(XmlILOptimization.NormalizeIdEq, local0))
1121 {
1122 return Replace(XmlILOptimization.NormalizeIdEq, local0, VisitIs(f.Is(qilNode6, qilNode7)));
1123 }
1124 }
1125 }
1126 if (this[XmlILOptimization.NormalizeIdEq] && qilNode.NodeType == QilNodeType.XsltGenerateId)
1127 {
1129 if (qilNode8.XmlType.IsSingleton && qilNode2.NodeType == QilNodeType.StrConcat)
1130 {
1132 if (qilNode9.NodeType == QilNodeType.Loop)
1133 {
1136 if (qilNode10.NodeType == QilNodeType.For)
1137 {
1139 if (!qilNode12.XmlType.MaybeMany && qilNode11.NodeType == QilNodeType.XsltGenerateId)
1140 {
1142 if (qilNode13 == qilNode10 && AllowReplace(XmlILOptimization.NormalizeIdEq, local0))
1143 {
1146 }
1147 }
1148 }
1149 }
1150 }
1151 }
1152 if (this[XmlILOptimization.NormalizeIdEq] && qilNode.NodeType == QilNodeType.StrConcat)
1153 {
1155 if (qilNode15.NodeType == QilNodeType.Loop)
1156 {
1159 if (qilNode16.NodeType == QilNodeType.For)
1160 {
1162 if (!qilNode18.XmlType.MaybeMany && qilNode17.NodeType == QilNodeType.XsltGenerateId)
1163 {
1165 if (qilNode19 == qilNode16 && qilNode2.NodeType == QilNodeType.XsltGenerateId)
1166 {
1168 if (qilNode20.XmlType.IsSingleton && AllowReplace(XmlILOptimization.NormalizeIdEq, local0))
1169 {
1172 }
1173 }
1174 }
1175 }
1176 }
1177 }
1178 if (this[XmlILOptimization.NormalizeMuenchian] && qilNode.NodeType == QilNodeType.Length)
1179 {
1181 if (qilNode22.NodeType == QilNodeType.Union)
1182 {
1185 if (qilNode23.XmlType.IsSingleton && !qilNode24.XmlType.MaybeMany && qilNode2.NodeType == QilNodeType.LiteralInt32)
1186 {
1187 int num = (int)((QilLiteral)qilNode2).Value;
1188 if (num == 1 && AllowReplace(XmlILOptimization.NormalizeMuenchian, local0))
1189 {
1192 }
1193 }
1194 }
1195 }
1196 if (this[XmlILOptimization.NormalizeMuenchian] && qilNode.NodeType == QilNodeType.Length)
1197 {
1199 if (qilNode26.NodeType == QilNodeType.Union)
1200 {
1203 if (!qilNode27.XmlType.MaybeMany && qilNode28.XmlType.IsSingleton && qilNode2.NodeType == QilNodeType.LiteralInt32)
1204 {
1205 int num2 = (int)((QilLiteral)qilNode2).Value;
1206 if (num2 == 1 && AllowReplace(XmlILOptimization.NormalizeMuenchian, local0))
1207 {
1210 }
1211 }
1212 }
1213 }
1214 if (this[XmlILOptimization.AnnotateMaxLengthEq] && qilNode.NodeType == QilNodeType.Length && qilNode2.NodeType == QilNodeType.LiteralInt32)
1215 {
1216 int num3 = (int)((QilLiteral)qilNode2).Value;
1217 if (AllowReplace(XmlILOptimization.AnnotateMaxLengthEq, local0))
1218 {
1219 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1220 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num3);
1221 }
1222 }
1223 return NoReplace(local0);
1224 }
1225
1226 protected override QilNode VisitGt(QilBinary local0)
1227 {
1228 QilNode qilNode = local0[0];
1229 QilNode qilNode2 = local0[1];
1230 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1231 {
1232 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1233 }
1234 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1235 {
1236 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
1237 }
1238 if (this[XmlILOptimization.EliminateGt] && IsLiteral(qilNode) && IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.EliminateGt, local0))
1239 {
1241 }
1242 if (this[XmlILOptimization.NormalizeGtLiteral] && IsLiteral(qilNode) && !IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.NormalizeGtLiteral, local0))
1243 {
1244 return Replace(XmlILOptimization.NormalizeGtLiteral, local0, VisitLt(f.Lt(qilNode2, qilNode)));
1245 }
1246 if (this[XmlILOptimization.NormalizeXsltConvertGt] && qilNode.NodeType == QilNodeType.XsltConvert)
1247 {
1250 if (qilNode4.NodeType == QilNodeType.LiteralType)
1251 {
1254 {
1255 return Replace(XmlILOptimization.NormalizeXsltConvertGt, local0, VisitGt(f.Gt(qilNode3, FoldXsltConvert(qilNode2, qilNode3.XmlType))));
1256 }
1257 }
1258 }
1259 if (this[XmlILOptimization.NormalizeLengthGt] && qilNode.NodeType == QilNodeType.Length)
1260 {
1261 QilNode child = qilNode[0];
1262 if (qilNode2.NodeType == QilNodeType.LiteralInt32 && (int)((QilLiteral)qilNode2).Value == 0 && AllowReplace(XmlILOptimization.NormalizeLengthGt, local0))
1263 {
1264 return Replace(XmlILOptimization.NormalizeLengthGt, local0, VisitNot(f.Not(VisitIsEmpty(f.IsEmpty(child)))));
1265 }
1266 }
1267 if (this[XmlILOptimization.AnnotateMaxLengthGt] && qilNode.NodeType == QilNodeType.Length && qilNode2.NodeType == QilNodeType.LiteralInt32)
1268 {
1269 int num = (int)((QilLiteral)qilNode2).Value;
1270 if (AllowReplace(XmlILOptimization.AnnotateMaxLengthGt, local0))
1271 {
1272 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1273 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num);
1274 }
1275 }
1276 return NoReplace(local0);
1277 }
1278
1279 protected override QilNode VisitGe(QilBinary local0)
1280 {
1281 QilNode qilNode = local0[0];
1282 QilNode qilNode2 = local0[1];
1283 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1284 {
1285 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1286 }
1287 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1288 {
1289 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
1290 }
1291 if (this[XmlILOptimization.EliminateGe] && IsLiteral(qilNode) && IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.EliminateGe, local0))
1292 {
1294 }
1295 if (this[XmlILOptimization.NormalizeGeLiteral] && IsLiteral(qilNode) && !IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.NormalizeGeLiteral, local0))
1296 {
1297 return Replace(XmlILOptimization.NormalizeGeLiteral, local0, VisitLe(f.Le(qilNode2, qilNode)));
1298 }
1299 if (this[XmlILOptimization.NormalizeXsltConvertGe] && qilNode.NodeType == QilNodeType.XsltConvert)
1300 {
1303 if (qilNode4.NodeType == QilNodeType.LiteralType)
1304 {
1307 {
1308 return Replace(XmlILOptimization.NormalizeXsltConvertGe, local0, VisitGe(f.Ge(qilNode3, FoldXsltConvert(qilNode2, qilNode3.XmlType))));
1309 }
1310 }
1311 }
1312 if (this[XmlILOptimization.AnnotateMaxLengthGe] && qilNode.NodeType == QilNodeType.Length && qilNode2.NodeType == QilNodeType.LiteralInt32)
1313 {
1314 int num = (int)((QilLiteral)qilNode2).Value;
1315 if (AllowReplace(XmlILOptimization.AnnotateMaxLengthGe, local0))
1316 {
1317 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1318 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num);
1319 }
1320 }
1321 return NoReplace(local0);
1322 }
1323
1324 protected override QilNode VisitLt(QilBinary local0)
1325 {
1326 QilNode qilNode = local0[0];
1327 QilNode qilNode2 = local0[1];
1328 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1329 {
1330 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1331 }
1332 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1333 {
1334 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
1335 }
1336 if (this[XmlILOptimization.EliminateLt] && IsLiteral(qilNode) && IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.EliminateLt, local0))
1337 {
1339 }
1340 if (this[XmlILOptimization.NormalizeLtLiteral] && IsLiteral(qilNode) && !IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.NormalizeLtLiteral, local0))
1341 {
1342 return Replace(XmlILOptimization.NormalizeLtLiteral, local0, VisitGt(f.Gt(qilNode2, qilNode)));
1343 }
1344 if (this[XmlILOptimization.NormalizeXsltConvertLt] && qilNode.NodeType == QilNodeType.XsltConvert)
1345 {
1348 if (qilNode4.NodeType == QilNodeType.LiteralType)
1349 {
1352 {
1353 return Replace(XmlILOptimization.NormalizeXsltConvertLt, local0, VisitLt(f.Lt(qilNode3, FoldXsltConvert(qilNode2, qilNode3.XmlType))));
1354 }
1355 }
1356 }
1357 if (this[XmlILOptimization.AnnotateMaxLengthLt] && qilNode.NodeType == QilNodeType.Length && qilNode2.NodeType == QilNodeType.LiteralInt32)
1358 {
1359 int num = (int)((QilLiteral)qilNode2).Value;
1360 if (AllowReplace(XmlILOptimization.AnnotateMaxLengthLt, local0))
1361 {
1362 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1363 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num);
1364 }
1365 }
1366 return NoReplace(local0);
1367 }
1368
1369 protected override QilNode VisitLe(QilBinary local0)
1370 {
1371 QilNode qilNode = local0[0];
1372 QilNode qilNode2 = local0[1];
1373 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1374 {
1375 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1376 }
1377 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1378 {
1379 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
1380 }
1381 if (this[XmlILOptimization.EliminateLe] && IsLiteral(qilNode) && IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.EliminateLe, local0))
1382 {
1384 }
1385 if (this[XmlILOptimization.NormalizeLeLiteral] && IsLiteral(qilNode) && !IsLiteral(qilNode2) && AllowReplace(XmlILOptimization.NormalizeLeLiteral, local0))
1386 {
1387 return Replace(XmlILOptimization.NormalizeLeLiteral, local0, VisitGe(f.Ge(qilNode2, qilNode)));
1388 }
1389 if (this[XmlILOptimization.NormalizeXsltConvertLe] && qilNode.NodeType == QilNodeType.XsltConvert)
1390 {
1393 if (qilNode4.NodeType == QilNodeType.LiteralType)
1394 {
1397 {
1398 return Replace(XmlILOptimization.NormalizeXsltConvertLe, local0, VisitLe(f.Le(qilNode3, FoldXsltConvert(qilNode2, qilNode3.XmlType))));
1399 }
1400 }
1401 }
1402 if (this[XmlILOptimization.AnnotateMaxLengthLe] && qilNode.NodeType == QilNodeType.Length && qilNode2.NodeType == QilNodeType.LiteralInt32)
1403 {
1404 int num = (int)((QilLiteral)qilNode2).Value;
1405 if (AllowReplace(XmlILOptimization.AnnotateMaxLengthLe, local0))
1406 {
1407 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1408 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num);
1409 }
1410 }
1411 return NoReplace(local0);
1412 }
1413
1414 protected override QilNode VisitIs(QilBinary local0)
1415 {
1416 QilNode qilNode = local0[0];
1417 QilNode qilNode2 = local0[1];
1418 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1419 {
1420 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1421 }
1422 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1423 {
1424 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
1425 }
1426 if (this[XmlILOptimization.EliminateIs] && qilNode2 == qilNode && AllowReplace(XmlILOptimization.EliminateIs, local0))
1427 {
1428 return Replace(XmlILOptimization.EliminateIs, local0, VisitTrue(f.True()));
1429 }
1430 return NoReplace(local0);
1431 }
1432
1434 {
1435 QilNode qilNode = local0[0];
1436 QilNode qilNode2 = local0[1];
1437 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1438 {
1439 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1440 }
1441 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1442 {
1443 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
1444 }
1445 if (this[XmlILOptimization.EliminateAfter] && qilNode2 == qilNode && AllowReplace(XmlILOptimization.EliminateAfter, local0))
1446 {
1447 return Replace(XmlILOptimization.EliminateAfter, local0, VisitFalse(f.False()));
1448 }
1449 return NoReplace(local0);
1450 }
1451
1453 {
1454 QilNode qilNode = local0[0];
1455 QilNode qilNode2 = local0[1];
1456 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1457 {
1458 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1459 }
1460 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1461 {
1462 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
1463 }
1464 if (this[XmlILOptimization.EliminateBefore] && qilNode2 == qilNode && AllowReplace(XmlILOptimization.EliminateBefore, local0))
1465 {
1466 return Replace(XmlILOptimization.EliminateBefore, local0, VisitFalse(f.False()));
1467 }
1468 return NoReplace(local0);
1469 }
1470
1471 protected override QilNode VisitLoop(QilLoop local0)
1472 {
1473 QilNode qilNode = local0[0];
1474 QilNode qilNode2 = local0[1];
1475 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1476 {
1477 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode[0])));
1478 }
1479 if (this[XmlILOptimization.EliminateIterator] && qilNode.NodeType == QilNodeType.For)
1480 {
1482 if (qilNode3.NodeType == QilNodeType.For && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.IsPositional) && AllowReplace(XmlILOptimization.EliminateIterator, local0))
1483 {
1484 return Replace(XmlILOptimization.EliminateIterator, local0, Subs(qilNode2, qilNode, qilNode3));
1485 }
1486 }
1487 if (this[XmlILOptimization.EliminateLoop] && qilNode.NodeType == QilNodeType.For)
1488 {
1490 if (qilNode4.NodeType == QilNodeType.Sequence && qilNode4.Count == 0 && AllowReplace(XmlILOptimization.EliminateLoop, local0))
1491 {
1492 return Replace(XmlILOptimization.EliminateLoop, local0, VisitSequence(f.Sequence()));
1493 }
1494 }
1495 if (this[XmlILOptimization.EliminateLoop] && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode2.NodeType == QilNodeType.Sequence && qilNode2.Count == 0 && AllowReplace(XmlILOptimization.EliminateLoop, local0))
1496 {
1497 return Replace(XmlILOptimization.EliminateLoop, local0, VisitSequence(f.Sequence()));
1498 }
1499 if (this[XmlILOptimization.EliminateLoop] && qilNode2 == qilNode && AllowReplace(XmlILOptimization.EliminateLoop, local0))
1500 {
1501 return Replace(XmlILOptimization.EliminateLoop, local0, qilNode[0]);
1502 }
1503 if (this[XmlILOptimization.NormalizeLoopText] && qilNode.NodeType == QilNodeType.For)
1504 {
1506 if (qilNode5.XmlType.IsSingleton && qilNode2.NodeType == QilNodeType.TextCtor)
1507 {
1508 QilNode body = qilNode2[0];
1509 if (AllowReplace(XmlILOptimization.NormalizeLoopText, local0))
1510 {
1511 return Replace(XmlILOptimization.NormalizeLoopText, local0, VisitTextCtor(f.TextCtor(VisitLoop(f.Loop(qilNode, body)))));
1512 }
1513 }
1514 }
1515 if (this[XmlILOptimization.EliminateIteratorUsedAtMostOnce] && (qilNode.NodeType == QilNodeType.Let || qilNode[0].XmlType.IsSingleton) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && _nodeCounter.Count(qilNode2, qilNode) <= 1 && AllowReplace(XmlILOptimization.EliminateIteratorUsedAtMostOnce, local0))
1516 {
1517 return Replace(XmlILOptimization.EliminateIteratorUsedAtMostOnce, local0, Subs(qilNode2, qilNode, qilNode[0]));
1518 }
1519 if (this[XmlILOptimization.NormalizeLoopConditional] && qilNode2.NodeType == QilNodeType.Conditional)
1520 {
1521 QilNode child = qilNode2[0];
1524 if (qilNode6.NodeType == QilNodeType.Sequence && qilNode6.Count == 0 && qilNode7 == qilNode && AllowReplace(XmlILOptimization.NormalizeLoopConditional, local0))
1525 {
1526 return Replace(XmlILOptimization.NormalizeLoopConditional, local0, VisitFilter(f.Filter(qilNode, VisitNot(f.Not(child)))));
1527 }
1528 }
1529 if (this[XmlILOptimization.NormalizeLoopConditional] && qilNode2.NodeType == QilNodeType.Conditional)
1530 {
1531 QilNode body2 = qilNode2[0];
1534 if (qilNode8 == qilNode && qilNode9.NodeType == QilNodeType.Sequence && qilNode9.Count == 0 && AllowReplace(XmlILOptimization.NormalizeLoopConditional, local0))
1535 {
1536 return Replace(XmlILOptimization.NormalizeLoopConditional, local0, VisitFilter(f.Filter(qilNode, body2)));
1537 }
1538 }
1539 if (this[XmlILOptimization.NormalizeLoopConditional] && qilNode.NodeType == QilNodeType.For && qilNode2.NodeType == QilNodeType.Conditional)
1540 {
1541 QilNode child2 = qilNode2[0];
1543 QilNode expr = qilNode2[2];
1544 if (qilNode10.NodeType == QilNodeType.Sequence && qilNode10.Count == 0 && NonPositional(expr, qilNode) && AllowReplace(XmlILOptimization.NormalizeLoopConditional, local0))
1545 {
1547 return Replace(XmlILOptimization.NormalizeLoopConditional, local0, VisitLoop(f.Loop(qilNode11, Subs(expr, qilNode, qilNode11))));
1548 }
1549 }
1550 if (this[XmlILOptimization.NormalizeLoopConditional] && qilNode.NodeType == QilNodeType.For && qilNode2.NodeType == QilNodeType.Conditional)
1551 {
1552 QilNode body3 = qilNode2[0];
1553 QilNode expr2 = qilNode2[1];
1555 if (NonPositional(expr2, qilNode) && qilNode12.NodeType == QilNodeType.Sequence && qilNode12.Count == 0 && AllowReplace(XmlILOptimization.NormalizeLoopConditional, local0))
1556 {
1558 return Replace(XmlILOptimization.NormalizeLoopConditional, local0, VisitLoop(f.Loop(qilNode13, Subs(expr2, qilNode, qilNode13))));
1559 }
1560 }
1561 if (this[XmlILOptimization.NormalizeLoopLoop] && qilNode2.NodeType == QilNodeType.Loop)
1562 {
1564 QilNode expr3 = qilNode2[1];
1565 if (qilNode14.NodeType == QilNodeType.For)
1566 {
1567 QilNode body4 = qilNode14[0];
1569 {
1572 }
1573 }
1574 }
1575 if (this[XmlILOptimization.AnnotateSingletonLoop] && qilNode.NodeType == QilNodeType.For)
1576 {
1578 if (!qilNode16.XmlType.MaybeMany && AllowReplace(XmlILOptimization.AnnotateSingletonLoop, local0))
1579 {
1582 }
1583 }
1584 if (this[XmlILOptimization.AnnotateRootLoop] && IsStepPattern(qilNode2, QilNodeType.Root) && AllowReplace(XmlILOptimization.AnnotateRootLoop, local0))
1585 {
1586 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.SameDepth);
1587 }
1588 if (this[XmlILOptimization.AnnotateContentLoop] && qilNode.NodeType == QilNodeType.For)
1589 {
1592 {
1593 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.SameDepth);
1595 }
1596 }
1597 if (this[XmlILOptimization.AnnotateAttrNmspLoop] && qilNode.NodeType == QilNodeType.For)
1598 {
1599 QilNode ndSrc = qilNode[0];
1600 if ((IsStepPattern(qilNode2, QilNodeType.Attribute) || IsStepPattern(qilNode2, QilNodeType.XPathNamespace) || OptimizerPatterns.Read(qilNode2).MatchesPattern(OptimizerPatternName.FilterAttributeKind)) && qilNode == OptimizerPatterns.Read(qilNode2).GetArgument(OptimizerPatternArgument.StepInput) && AllowReplace(XmlILOptimization.AnnotateAttrNmspLoop, local0))
1601 {
1604 }
1605 }
1606 if (this[XmlILOptimization.AnnotateDescendantLoop] && qilNode.NodeType == QilNodeType.For)
1607 {
1609 if (OptimizerPatterns.Read(qilNode18).MatchesPattern(OptimizerPatternName.SameDepth) && (IsStepPattern(qilNode2, QilNodeType.Descendant) || IsStepPattern(qilNode2, QilNodeType.DescendantOrSelf)) && qilNode == OptimizerPatterns.Read(qilNode2).GetArgument(OptimizerPatternArgument.StepInput) && AllowReplace(XmlILOptimization.AnnotateDescendantLoop, local0))
1610 {
1612 }
1613 }
1614 return NoReplace(local0);
1615 }
1616
1617 protected override QilNode VisitFilter(QilLoop local0)
1618 {
1619 QilNode qilNode = local0[0];
1620 QilNode qilNode2 = local0[1];
1621 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1622 {
1623 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode[0])));
1624 }
1625 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1626 {
1628 }
1629 if (this[XmlILOptimization.EliminateFilter] && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode2.NodeType == QilNodeType.False && AllowReplace(XmlILOptimization.EliminateFilter, local0))
1630 {
1631 return Replace(XmlILOptimization.EliminateFilter, local0, VisitSequence(f.Sequence()));
1632 }
1633 if (this[XmlILOptimization.EliminateFilter] && qilNode2.NodeType == QilNodeType.True && AllowReplace(XmlILOptimization.EliminateFilter, local0))
1634 {
1635 return Replace(XmlILOptimization.EliminateFilter, local0, qilNode[0]);
1636 }
1637 if (this[XmlILOptimization.NormalizeAttribute] && qilNode.NodeType == QilNodeType.For)
1638 {
1640 if (qilNode3.NodeType == QilNodeType.Content)
1641 {
1642 QilNode left = qilNode3[0];
1643 if (qilNode2.NodeType == QilNodeType.And)
1644 {
1647 if (qilNode4.NodeType == QilNodeType.IsType)
1648 {
1651 if (qilNode6 == qilNode && qilNode7.NodeType == QilNodeType.LiteralType)
1652 {
1655 {
1658 if (qilNode8.NodeType == QilNodeType.NameOf)
1659 {
1661 if (qilNode10 == qilNode && qilNode9.NodeType == QilNodeType.LiteralQName && AllowReplace(XmlILOptimization.NormalizeAttribute, local0))
1662 {
1663 return Replace(XmlILOptimization.NormalizeAttribute, local0, VisitAttribute(f.Attribute(left, qilNode9)));
1664 }
1665 }
1666 }
1667 }
1668 }
1669 }
1670 }
1671 }
1672 if (this[XmlILOptimization.CommuteFilterLoop] && qilNode.NodeType == QilNodeType.For)
1673 {
1675 if (qilNode11.NodeType == QilNodeType.Loop)
1676 {
1680 {
1683 }
1684 }
1685 }
1686 if (this[XmlILOptimization.NormalizeLoopInvariant] && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode[0].NodeType != QilNodeType.OptimizeBarrier && !DependsOn(qilNode2, qilNode) && !OptimizerPatterns.Read(qilNode2).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && AllowReplace(XmlILOptimization.NormalizeLoopInvariant, local0))
1687 {
1689 }
1690 if (this[XmlILOptimization.AnnotateMaxPositionEq] && qilNode2.NodeType == QilNodeType.Eq)
1691 {
1694 if (qilNode13.NodeType == QilNodeType.PositionOf)
1695 {
1697 if (qilNode15 == qilNode && qilNode14.NodeType == QilNodeType.LiteralInt32)
1698 {
1699 int num = (int)((QilLiteral)qilNode14).Value;
1700 if (AllowReplace(XmlILOptimization.AnnotateMaxPositionEq, local0))
1701 {
1702 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1703 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num);
1704 }
1705 }
1706 }
1707 }
1708 if (this[XmlILOptimization.AnnotateMaxPositionLe] && qilNode2.NodeType == QilNodeType.Le)
1709 {
1712 if (qilNode16.NodeType == QilNodeType.PositionOf)
1713 {
1715 if (qilNode18 == qilNode && qilNode17.NodeType == QilNodeType.LiteralInt32)
1716 {
1717 int num2 = (int)((QilLiteral)qilNode17).Value;
1718 if (AllowReplace(XmlILOptimization.AnnotateMaxPositionLe, local0))
1719 {
1720 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1721 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num2);
1722 }
1723 }
1724 }
1725 }
1726 if (this[XmlILOptimization.AnnotateMaxPositionLt] && qilNode2.NodeType == QilNodeType.Lt)
1727 {
1730 if (qilNode19.NodeType == QilNodeType.PositionOf)
1731 {
1733 if (qilNode21 == qilNode && qilNode20.NodeType == QilNodeType.LiteralInt32)
1734 {
1735 int num3 = (int)((QilLiteral)qilNode20).Value;
1736 if (AllowReplace(XmlILOptimization.AnnotateMaxPositionLt, local0))
1737 {
1738 OptimizerPatterns.Write(qilNode).AddPattern(OptimizerPatternName.MaxPosition);
1739 OptimizerPatterns.Write(qilNode).AddArgument(OptimizerPatternArgument.ElementQName, num3 - 1);
1740 }
1741 }
1742 }
1743 }
1744 if (this[XmlILOptimization.AnnotateFilter] && qilNode.NodeType == QilNodeType.For)
1745 {
1746 QilNode ndSrc = qilNode[0];
1747 if (AllowReplace(XmlILOptimization.AnnotateFilter, local0))
1748 {
1752 }
1753 }
1754 if (this[XmlILOptimization.AnnotateFilterElements] && qilNode.NodeType == QilNodeType.For)
1755 {
1756 QilNode nd = qilNode[0];
1757 if (OptimizerPatterns.Read(nd).MatchesPattern(OptimizerPatternName.Axis) && qilNode2.NodeType == QilNodeType.And)
1758 {
1761 if (qilNode22.NodeType == QilNodeType.IsType)
1762 {
1765 if (qilNode24 == qilNode && qilNode25.NodeType == QilNodeType.LiteralType)
1766 {
1769 {
1772 if (qilNode26.NodeType == QilNodeType.NameOf)
1773 {
1775 if (qilNode28 == qilNode && qilNode27.NodeType == QilNodeType.LiteralQName && AllowReplace(XmlILOptimization.AnnotateFilterElements, local0))
1776 {
1777 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.FilterElements);
1779 }
1780 }
1781 }
1782 }
1783 }
1784 }
1785 }
1786 if (this[XmlILOptimization.AnnotateFilterContentKind] && qilNode.NodeType == QilNodeType.For)
1787 {
1788 QilNode nd2 = qilNode[0];
1789 if (OptimizerPatterns.Read(nd2).MatchesPattern(OptimizerPatternName.Axis) && qilNode2.NodeType == QilNodeType.IsType)
1790 {
1793 if (qilNode29 == qilNode && qilNode30.NodeType == QilNodeType.LiteralType)
1794 {
1796 if (MatchesContentTest(xmlQueryType3) && AllowReplace(XmlILOptimization.AnnotateFilterContentKind, local0))
1797 {
1798 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.FilterContentKind);
1800 }
1801 }
1802 }
1803 }
1804 if (this[XmlILOptimization.AnnotateFilterAttributeKind] && qilNode.NodeType == QilNodeType.For)
1805 {
1807 if (qilNode31.NodeType == QilNodeType.Content && qilNode2.NodeType == QilNodeType.IsType)
1808 {
1811 if (qilNode32 == qilNode && qilNode33.NodeType == QilNodeType.LiteralType)
1812 {
1814 if (xmlQueryType4 == XmlQueryTypeFactory.Attribute && AllowReplace(XmlILOptimization.AnnotateFilterAttributeKind, local0))
1815 {
1816 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.FilterAttributeKind);
1817 }
1818 }
1819 }
1820 }
1821 return NoReplace(local0);
1822 }
1823
1824 protected override QilNode VisitSort(QilLoop local0)
1825 {
1826 QilNode qilNode = local0[0];
1827 QilNode qilNode2 = local0[1];
1828 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1829 {
1830 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode[0])));
1831 }
1832 if (this[XmlILOptimization.EliminateSort] && qilNode.NodeType == QilNodeType.For)
1833 {
1835 if (qilNode3.XmlType.IsSingleton && AllowReplace(XmlILOptimization.EliminateSort, local0))
1836 {
1837 return Replace(XmlILOptimization.EliminateSort, local0, VisitNop(f.Nop(qilNode3)));
1838 }
1839 }
1840 return NoReplace(local0);
1841 }
1842
1844 {
1845 QilNode qilNode = local0[0];
1847 if (this[XmlILOptimization.NormalizeSortXsltConvert] && qilNode.NodeType == QilNodeType.XsltConvert)
1848 {
1851 if (qilNode3.NodeType == QilNodeType.LiteralType)
1852 {
1855 {
1856 return Replace(XmlILOptimization.NormalizeSortXsltConvert, local0, VisitSortKey(f.SortKey(qilNode2, collation)));
1857 }
1858 }
1859 }
1860 return NoReplace(local0);
1861 }
1862
1864 {
1865 QilNode qilNode = local0[0];
1866 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
1867 {
1868 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
1869 }
1870 if (this[XmlILOptimization.EliminateDod] && IsDocOrderDistinct(qilNode) && AllowReplace(XmlILOptimization.EliminateDod, local0))
1871 {
1872 return Replace(XmlILOptimization.EliminateDod, local0, qilNode);
1873 }
1874 if (this[XmlILOptimization.FoldNamedDescendants] && qilNode.NodeType == QilNodeType.Loop)
1875 {
1878 if (qilNode2.NodeType == QilNodeType.For)
1879 {
1881 if (qilNode4.NodeType == QilNodeType.Loop)
1882 {
1885 if (qilNode5.NodeType == QilNodeType.DescendantOrSelf)
1886 {
1887 QilNode child = qilNode5[0];
1888 if (qilNode3.NodeType == QilNodeType.Filter)
1889 {
1890 QilNode refOld = qilNode3[0];
1891 QilNode expr = qilNode3[1];
1892 if ((OptimizerPatterns.Read(qilNode3).MatchesPattern(OptimizerPatternName.FilterElements) || OptimizerPatterns.Read(qilNode3).MatchesPattern(OptimizerPatternName.FilterContentKind)) && IsStepPattern(qilNode3, QilNodeType.Content) && AllowReplace(XmlILOptimization.FoldNamedDescendants, local0))
1893 {
1896 }
1897 }
1898 }
1899 }
1900 }
1901 }
1902 if (this[XmlILOptimization.FoldNamedDescendants] && qilNode.NodeType == QilNodeType.Loop)
1903 {
1906 if (qilNode7.NodeType == QilNodeType.For)
1907 {
1909 if (qilNode9.NodeType == QilNodeType.DescendantOrSelf)
1910 {
1911 QilNode child2 = qilNode9[0];
1912 if (qilNode8.NodeType == QilNodeType.Filter)
1913 {
1915 QilNode expr2 = qilNode8[1];
1916 if ((OptimizerPatterns.Read(qilNode8).MatchesPattern(OptimizerPatternName.FilterElements) || OptimizerPatterns.Read(qilNode8).MatchesPattern(OptimizerPatternName.FilterContentKind)) && IsStepPattern(qilNode8, QilNodeType.Content) && AllowReplace(XmlILOptimization.FoldNamedDescendants, local0))
1917 {
1920 }
1921 }
1922 }
1923 }
1924 }
1925 if (this[XmlILOptimization.CommuteDodFilter] && qilNode.NodeType == QilNodeType.Filter)
1926 {
1928 QilNode expr3 = qilNode[1];
1929 if (qilNode11.NodeType == QilNodeType.For)
1930 {
1932 if (!OptimizerPatterns.Read(qilNode11).MatchesPattern(OptimizerPatternName.IsPositional) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterElements) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterContentKind) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterAttributeKind) && AllowReplace(XmlILOptimization.CommuteDodFilter, local0))
1933 {
1936 }
1937 }
1938 }
1939 if (this[XmlILOptimization.CommuteDodFilter] && qilNode.NodeType == QilNodeType.Loop)
1940 {
1943 if (qilNode14.NodeType == QilNodeType.Filter)
1944 {
1946 QilNode expr4 = qilNode14[1];
1947 if (qilNode15.NodeType == QilNodeType.For)
1948 {
1949 QilNode body = qilNode15[0];
1950 if (!OptimizerPatterns.Read(qilNode15).MatchesPattern(OptimizerPatternName.IsPositional) && !DependsOn(expr4, qilNode13) && !OptimizerPatterns.Read(qilNode14).MatchesPattern(OptimizerPatternName.FilterElements) && !OptimizerPatterns.Read(qilNode14).MatchesPattern(OptimizerPatternName.FilterContentKind) && !OptimizerPatterns.Read(qilNode14).MatchesPattern(OptimizerPatternName.FilterAttributeKind) && AllowReplace(XmlILOptimization.CommuteDodFilter, local0))
1951 {
1954 }
1955 }
1956 }
1957 }
1958 if (this[XmlILOptimization.IntroduceDod] && qilNode.NodeType == QilNodeType.Loop)
1959 {
1961 QilNode expr5 = qilNode[1];
1962 if (qilNode17.NodeType == QilNodeType.For)
1963 {
1965 if (!IsDocOrderDistinct(qilNode18) && !OptimizerPatterns.Read(qilNode17).MatchesPattern(OptimizerPatternName.IsPositional) && qilNode18.XmlType.IsSubtypeOf(XmlQueryTypeFactory.NodeNotRtfS) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterElements) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterContentKind) && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.FilterAttributeKind) && AllowReplace(XmlILOptimization.IntroduceDod, local0))
1966 {
1969 }
1970 }
1971 }
1972 if (this[XmlILOptimization.IntroducePrecedingDod] && qilNode.NodeType == QilNodeType.Loop)
1973 {
1976 if (!IsDocOrderDistinct(qilNode20) && IsStepPattern(qilNode20, QilNodeType.PrecedingSibling) && AllowReplace(XmlILOptimization.IntroducePrecedingDod, local0))
1977 {
1979 }
1980 }
1981 if (this[XmlILOptimization.EliminateReturnDod] && qilNode.NodeType == QilNodeType.Loop)
1982 {
1985 if (qilNode21.NodeType == QilNodeType.DocOrderDistinct)
1986 {
1988 if (!IsStepPattern(qilNode22, QilNodeType.PrecedingSibling) && AllowReplace(XmlILOptimization.EliminateReturnDod, local0))
1989 {
1991 }
1992 }
1993 }
1994 if (this[XmlILOptimization.AnnotateDod] && AllowReplace(XmlILOptimization.AnnotateDod, local0))
1995 {
1996 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
1998 }
1999 if (this[XmlILOptimization.AnnotateDodReverse] && AllowDodReverse(qilNode) && AllowReplace(XmlILOptimization.AnnotateDodReverse, local0))
2000 {
2001 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.DodReverse);
2003 }
2004 if (this[XmlILOptimization.AnnotateJoinAndDod] && qilNode.NodeType == QilNodeType.Loop)
2005 {
2008 if (qilNode23.NodeType == QilNodeType.For)
2009 {
2010 QilNode nd = qilNode23[0];
2012 {
2013 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.JoinAndDod);
2015 }
2016 }
2017 }
2018 if (this[XmlILOptimization.AnnotateDodMerge] && qilNode.NodeType == QilNodeType.Loop)
2019 {
2021 if (qilNode25.NodeType == QilNodeType.Invoke && IsDocOrderDistinct(qilNode25) && AllowReplace(XmlILOptimization.AnnotateDodMerge, local0))
2022 {
2023 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.DodMerge);
2024 }
2025 }
2026 return NoReplace(local0);
2027 }
2028
2030 {
2031 QilNode qilNode = local0[0];
2032 QilNode qilNode2 = local0[1];
2033 QilNode qilNode3 = local0[2];
2034 XmlQueryType xmlType = local0.XmlType;
2035 if (local0.XmlType.IsSubtypeOf(XmlQueryTypeFactory.NodeS) && this[XmlILOptimization.AnnotateIndex1] && qilNode.Count == 2 && qilNode[0].XmlType.IsSubtypeOf(XmlQueryTypeFactory.Node) && qilNode[1].XmlType == XmlQueryTypeFactory.StringX && qilNode2.NodeType == QilNodeType.Filter)
2036 {
2039 if (qilNode4.NodeType == QilNodeType.For)
2040 {
2041 QilNode expr = qilNode4[0];
2042 if (qilNode5.NodeType == QilNodeType.Not)
2043 {
2045 if (qilNode6.NodeType == QilNodeType.IsEmpty)
2046 {
2048 if (qilNode7.NodeType == QilNodeType.Filter)
2049 {
2052 if (qilNode8.NodeType == QilNodeType.For)
2053 {
2055 if (qilNode9.NodeType == QilNodeType.Eq)
2056 {
2059 if (qilNode11 == qilNode8 && qilNode12.NodeType == QilNodeType.Parameter && qilNode12 == qilNode[1] && IsDocOrderDistinct(qilNode2) && AllowReplace(XmlILOptimization.AnnotateIndex1, local0))
2060 {
2063 {
2065 optimizerPatterns.AddPattern(OptimizerPatternName.EqualityIndex);
2068 }
2069 }
2070 }
2071 }
2072 }
2073 }
2074 }
2075 }
2076 }
2077 if (local0.XmlType.IsSubtypeOf(XmlQueryTypeFactory.NodeS) && this[XmlILOptimization.AnnotateIndex2] && qilNode.Count == 2 && qilNode[0].XmlType == XmlQueryTypeFactory.Node && qilNode[1].XmlType == XmlQueryTypeFactory.StringX && qilNode2.NodeType == QilNodeType.Filter)
2078 {
2081 if (qilNode13.NodeType == QilNodeType.For)
2082 {
2083 QilNode expr2 = qilNode13[0];
2084 if (qilNode14.NodeType == QilNodeType.Eq)
2085 {
2088 if (qilNode16.NodeType == QilNodeType.Parameter && qilNode16 == qilNode[1] && IsDocOrderDistinct(qilNode2) && AllowReplace(XmlILOptimization.AnnotateIndex2, local0))
2089 {
2092 {
2094 optimizerPatterns2.AddPattern(OptimizerPatternName.EqualityIndex);
2097 }
2098 }
2099 }
2100 }
2101 }
2102 return NoReplace(local0);
2103 }
2104
2106 {
2107 QilNode qilNode = local0[0];
2108 QilNode qilNode2 = local0[1];
2109 if (this[XmlILOptimization.NormalizeInvokeEmpty] && qilNode.NodeType == QilNodeType.Function)
2110 {
2112 if (qilNode3.NodeType == QilNodeType.Sequence && qilNode3.Count == 0 && AllowReplace(XmlILOptimization.NormalizeInvokeEmpty, local0))
2113 {
2114 return Replace(XmlILOptimization.NormalizeInvokeEmpty, local0, VisitSequence(f.Sequence()));
2115 }
2116 }
2117 if (this[XmlILOptimization.AnnotateTrackCallers] && AllowReplace(XmlILOptimization.AnnotateTrackCallers, local0))
2118 {
2120 }
2121 if (this[XmlILOptimization.AnnotateInvoke] && qilNode.NodeType == QilNodeType.Function)
2122 {
2123 QilNode ndSrc = qilNode[1];
2124 if (AllowReplace(XmlILOptimization.AnnotateInvoke, local0))
2125 {
2128 }
2129 }
2130 return NoReplace(local0);
2131 }
2132
2134 {
2135 QilNode qilNode = local0[0];
2136 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2137 {
2138 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2139 }
2140 if (this[XmlILOptimization.AnnotateContent] && AllowReplace(XmlILOptimization.AnnotateContent, local0))
2141 {
2144 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
2145 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.SameDepth);
2146 }
2147 return NoReplace(local0);
2148 }
2149
2151 {
2152 QilNode qilNode = local0[0];
2153 QilNode qilNode2 = local0[1];
2154 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2155 {
2156 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2157 }
2158 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2159 {
2160 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
2161 }
2162 if (this[XmlILOptimization.AnnotateAttribute] && AllowReplace(XmlILOptimization.AnnotateAttribute, local0))
2163 {
2166 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
2167 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.SameDepth);
2168 }
2169 return NoReplace(local0);
2170 }
2171
2173 {
2174 QilNode qilNode = local0[0];
2175 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2176 {
2177 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2178 }
2179 if (this[XmlILOptimization.AnnotateParent] && AllowReplace(XmlILOptimization.AnnotateParent, local0))
2180 {
2183 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
2184 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.SameDepth);
2185 }
2186 return NoReplace(local0);
2187 }
2188
2189 protected override QilNode VisitRoot(QilUnary local0)
2190 {
2191 QilNode qilNode = local0[0];
2192 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2193 {
2194 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2195 }
2196 if (this[XmlILOptimization.AnnotateRoot] && AllowReplace(XmlILOptimization.AnnotateRoot, local0))
2197 {
2200 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
2201 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.SameDepth);
2202 }
2203 return NoReplace(local0);
2204 }
2205
2207 {
2208 QilNode qilNode = local0[0];
2209 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2210 {
2211 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2212 }
2213 if (this[XmlILOptimization.AnnotateDescendant] && AllowReplace(XmlILOptimization.AnnotateDescendant, local0))
2214 {
2217 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
2218 }
2219 return NoReplace(local0);
2220 }
2221
2223 {
2224 QilNode qilNode = local0[0];
2225 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2226 {
2227 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2228 }
2229 if (this[XmlILOptimization.AnnotateDescendantSelf] && AllowReplace(XmlILOptimization.AnnotateDescendantSelf, local0))
2230 {
2233 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
2234 }
2235 return NoReplace(local0);
2236 }
2237
2239 {
2240 QilNode qilNode = local0[0];
2241 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2242 {
2243 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2244 }
2245 if (this[XmlILOptimization.AnnotateAncestor] && AllowReplace(XmlILOptimization.AnnotateAncestor, local0))
2246 {
2249 }
2250 return NoReplace(local0);
2251 }
2252
2254 {
2255 QilNode qilNode = local0[0];
2256 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2257 {
2258 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2259 }
2260 if (this[XmlILOptimization.AnnotateAncestorSelf] && AllowReplace(XmlILOptimization.AnnotateAncestorSelf, local0))
2261 {
2264 }
2265 return NoReplace(local0);
2266 }
2267
2269 {
2270 QilNode qilNode = local0[0];
2271 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2272 {
2273 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2274 }
2275 if (this[XmlILOptimization.AnnotatePreceding] && AllowReplace(XmlILOptimization.AnnotatePreceding, local0))
2276 {
2279 }
2280 return NoReplace(local0);
2281 }
2282
2284 {
2285 QilNode qilNode = local0[0];
2286 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2287 {
2288 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2289 }
2290 if (this[XmlILOptimization.AnnotateFollowingSibling] && AllowReplace(XmlILOptimization.AnnotateFollowingSibling, local0))
2291 {
2294 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
2295 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.SameDepth);
2296 }
2297 return NoReplace(local0);
2298 }
2299
2301 {
2302 QilNode qilNode = local0[0];
2303 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2304 {
2305 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2306 }
2307 if (this[XmlILOptimization.AnnotatePrecedingSibling] && AllowReplace(XmlILOptimization.AnnotatePrecedingSibling, local0))
2308 {
2311 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.SameDepth);
2312 }
2313 return NoReplace(local0);
2314 }
2315
2317 {
2318 QilNode qilNode = local0[0];
2319 QilNode qilNode2 = local0[1];
2320 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2321 {
2322 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2323 }
2324 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2325 {
2326 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
2327 }
2328 if (this[XmlILOptimization.AnnotateNodeRange] && AllowReplace(XmlILOptimization.AnnotateNodeRange, local0))
2329 {
2332 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
2333 }
2334 return NoReplace(local0);
2335 }
2336
2338 {
2339 QilNode qilNode = local0[0];
2340 QilNode qilNode2 = local0[1];
2341 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2342 {
2343 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2344 }
2345 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2346 {
2347 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
2348 }
2349 return NoReplace(local0);
2350 }
2351
2353 {
2354 QilNode qilNode = local0[0];
2355 QilNode qilNode2 = local0[1];
2356 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2357 {
2358 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2359 }
2360 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2361 {
2362 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
2363 }
2364 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
2365 {
2367 }
2368 return NoReplace(local0);
2369 }
2370
2372 {
2373 QilNode qilNode = local0[0];
2374 QilNode qilNode2 = local0[1];
2375 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2376 {
2377 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2378 }
2379 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2380 {
2381 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
2382 }
2383 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
2384 {
2386 }
2387 return NoReplace(local0);
2388 }
2389
2391 {
2392 QilNode qilNode = local0[0];
2393 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2394 {
2395 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2396 }
2397 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
2398 {
2400 }
2401 return NoReplace(local0);
2402 }
2403
2405 {
2406 QilNode qilNode = local0[0];
2407 QilNode qilNode2 = local0[1];
2408 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2409 {
2410 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2411 }
2412 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2413 {
2414 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
2415 }
2416 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
2417 {
2419 }
2420 return NoReplace(local0);
2421 }
2422
2424 {
2425 QilNode qilNode = local0[0];
2426 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2427 {
2428 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2429 }
2430 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
2431 {
2433 }
2434 return NoReplace(local0);
2435 }
2436
2438 {
2439 QilNode qilNode = local0[0];
2440 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2441 {
2442 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2443 }
2444 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
2445 {
2447 }
2448 return NoReplace(local0);
2449 }
2450
2452 {
2453 QilNode qilNode = local0[0];
2454 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2455 {
2456 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2457 }
2458 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
2459 {
2461 }
2462 return NoReplace(local0);
2463 }
2464
2466 {
2467 QilNode qilNode = local0[0];
2468 QilNode qilNode2 = local0[1];
2469 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2470 {
2471 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2472 }
2473 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2474 {
2475 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
2476 }
2477 if (XmlILConstructInfo.Read(local0).IsNamespaceInScope && this[XmlILOptimization.EliminateNamespaceDecl] && AllowReplace(XmlILOptimization.EliminateNamespaceDecl, local0))
2478 {
2479 return Replace(XmlILOptimization.EliminateNamespaceDecl, local0, VisitSequence(f.Sequence()));
2480 }
2481 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
2482 {
2484 }
2485 return NoReplace(local0);
2486 }
2487
2489 {
2490 QilNode qilNode = local0[0];
2491 QilNode qilNode2 = local0[1];
2492 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2493 {
2494 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2495 }
2496 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
2497 {
2499 }
2500 if (this[XmlILOptimization.AnnotateSingleTextRtf] && qilNode.NodeType == QilNodeType.TextCtor)
2501 {
2502 QilNode arg = qilNode[0];
2503 if (AllowReplace(XmlILOptimization.AnnotateSingleTextRtf, local0))
2504 {
2505 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.SingleTextRtf);
2506 OptimizerPatterns.Write(local0).AddArgument(OptimizerPatternArgument.ElementQName, arg);
2507 XmlILConstructInfo.Write(local0).PullFromIteratorFirst = true;
2508 }
2509 }
2510 return NoReplace(local0);
2511 }
2512
2514 {
2515 QilNode qilNode = local0[0];
2516 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2517 {
2518 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2519 }
2520 return NoReplace(local0);
2521 }
2522
2524 {
2525 QilNode qilNode = local0[0];
2526 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2527 {
2528 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2529 }
2530 return NoReplace(local0);
2531 }
2532
2534 {
2535 QilNode qilNode = local0[0];
2536 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2537 {
2538 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2539 }
2540 return NoReplace(local0);
2541 }
2542
2544 {
2545 QilNode qilNode = local0[0];
2546 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2547 {
2548 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2549 }
2550 return NoReplace(local0);
2551 }
2552
2554 {
2555 QilNode qilNode = local0[0];
2556 QilNode qilNode2 = local0[1];
2557 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2558 {
2559 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2560 }
2561 if (this[XmlILOptimization.EliminateTypeAssert] && qilNode2.NodeType == QilNodeType.LiteralType)
2562 {
2564 if (qilNode.XmlType.NeverSubtypeOf(baseType) && AllowReplace(XmlILOptimization.EliminateTypeAssert, local0))
2565 {
2566 return Replace(XmlILOptimization.EliminateTypeAssert, local0, VisitError(f.Error(VisitLiteralString(f.LiteralString(string.Empty)))));
2567 }
2568 }
2569 if (this[XmlILOptimization.EliminateTypeAssert] && qilNode2.NodeType == QilNodeType.LiteralType)
2570 {
2572 if (qilNode.XmlType.Prime.NeverSubtypeOf(xmlQueryType.Prime) && AllowReplace(XmlILOptimization.EliminateTypeAssert, local0))
2573 {
2575 }
2576 }
2577 if (this[XmlILOptimization.EliminateTypeAssertOptional] && qilNode2.NodeType == QilNodeType.LiteralType)
2578 {
2580 if (qilNode.XmlType.IsSubtypeOf(baseType2) && AllowReplace(XmlILOptimization.EliminateTypeAssertOptional, local0))
2581 {
2582 return Replace(XmlILOptimization.EliminateTypeAssertOptional, local0, qilNode);
2583 }
2584 }
2585 return NoReplace(local0);
2586 }
2587
2589 {
2590 QilNode qilNode = local0[0];
2591 QilNode qilNode2 = local0[1];
2592 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2593 {
2594 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2595 }
2596 if (this[XmlILOptimization.EliminateIsType] && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode2.NodeType == QilNodeType.LiteralType)
2597 {
2599 if (qilNode.XmlType.IsSubtypeOf(baseType) && AllowReplace(XmlILOptimization.EliminateIsType, local0))
2600 {
2601 return Replace(XmlILOptimization.EliminateIsType, local0, VisitTrue(f.True()));
2602 }
2603 }
2604 if (this[XmlILOptimization.EliminateIsType] && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode2.NodeType == QilNodeType.LiteralType)
2605 {
2607 if (qilNode.XmlType.NeverSubtypeOf(baseType2) && AllowReplace(XmlILOptimization.EliminateIsType, local0))
2608 {
2609 return Replace(XmlILOptimization.EliminateIsType, local0, VisitFalse(f.False()));
2610 }
2611 }
2612 if (this[XmlILOptimization.EliminateIsType] && qilNode2.NodeType == QilNodeType.LiteralType)
2613 {
2615 if (qilNode.XmlType.Prime.NeverSubtypeOf(xmlQueryType.Prime) && AllowReplace(XmlILOptimization.EliminateIsType, local0))
2616 {
2617 return Replace(XmlILOptimization.EliminateIsType, local0, VisitIsEmpty(f.IsEmpty(qilNode)));
2618 }
2619 }
2620 if (this[XmlILOptimization.EliminateIsType] && OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode2.NodeType == QilNodeType.LiteralType)
2621 {
2623 if (qilNode.XmlType.IsSubtypeOf(baseType3) && AllowReplace(XmlILOptimization.EliminateIsType, local0))
2624 {
2625 return Replace(XmlILOptimization.EliminateIsType, local0, VisitLoop(f.Loop(VisitLet(f.Let(qilNode)), VisitTrue(f.True()))));
2626 }
2627 }
2628 if (this[XmlILOptimization.EliminateIsType] && OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && qilNode2.NodeType == QilNodeType.LiteralType)
2629 {
2631 if (qilNode.XmlType.NeverSubtypeOf(baseType4) && AllowReplace(XmlILOptimization.EliminateIsType, local0))
2632 {
2633 return Replace(XmlILOptimization.EliminateIsType, local0, VisitLoop(f.Loop(VisitLet(f.Let(qilNode)), VisitFalse(f.False()))));
2634 }
2635 }
2636 return NoReplace(local0);
2637 }
2638
2640 {
2641 QilNode qilNode = local0[0];
2642 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2643 {
2644 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2645 }
2646 if (this[XmlILOptimization.EliminateIsEmpty] && qilNode.NodeType == QilNodeType.Sequence && qilNode.Count == 0 && AllowReplace(XmlILOptimization.EliminateIsEmpty, local0))
2647 {
2648 return Replace(XmlILOptimization.EliminateIsEmpty, local0, VisitTrue(f.True()));
2649 }
2650 if (this[XmlILOptimization.EliminateIsEmpty] && !qilNode.XmlType.MaybeEmpty && !OptimizerPatterns.Read(qilNode).MatchesPattern(OptimizerPatternName.MaybeSideEffects) && AllowReplace(XmlILOptimization.EliminateIsEmpty, local0))
2651 {
2652 return Replace(XmlILOptimization.EliminateIsEmpty, local0, VisitFalse(f.False()));
2653 }
2654 if (this[XmlILOptimization.EliminateIsEmpty] && !qilNode.XmlType.MaybeEmpty && AllowReplace(XmlILOptimization.EliminateIsEmpty, local0))
2655 {
2656 return Replace(XmlILOptimization.EliminateIsEmpty, local0, VisitLoop(f.Loop(VisitLet(f.Let(qilNode)), VisitFalse(f.False()))));
2657 }
2658 return NoReplace(local0);
2659 }
2660
2662 {
2663 QilNode qilNode = local0[0];
2664 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2665 {
2666 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2667 }
2668 return NoReplace(local0);
2669 }
2670
2672 {
2673 QilNode qilNode = local0[0];
2674 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2675 {
2676 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2677 }
2678 if (this[XmlILOptimization.AnnotateXPathFollowing] && AllowReplace(XmlILOptimization.AnnotateXPathFollowing, local0))
2679 {
2682 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
2683 }
2684 return NoReplace(local0);
2685 }
2686
2688 {
2689 QilNode qilNode = local0[0];
2690 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2691 {
2692 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2693 }
2694 if (this[XmlILOptimization.AnnotateXPathPreceding] && AllowReplace(XmlILOptimization.AnnotateXPathPreceding, local0))
2695 {
2698 }
2699 return NoReplace(local0);
2700 }
2701
2703 {
2704 QilNode qilNode = local0[0];
2705 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2706 {
2707 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2708 }
2709 if (this[XmlILOptimization.AnnotateNamespace] && AllowReplace(XmlILOptimization.AnnotateNamespace, local0))
2710 {
2713 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.IsDocOrderDistinct);
2714 OptimizerPatterns.Write(local0).AddPattern(OptimizerPatternName.SameDepth);
2715 }
2716 return NoReplace(local0);
2717 }
2718
2720 {
2721 QilNode qilNode = local0[0];
2722 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2723 {
2724 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2725 }
2726 return NoReplace(local0);
2727 }
2728
2730 {
2731 QilNode qilNode = local0[0];
2732 QilNode qilNode2 = local0[1];
2733 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2734 {
2735 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2736 }
2737 if (this[XmlILOptimization.FoldNone] && (object)qilNode2.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2738 {
2739 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode2)));
2740 }
2741 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
2742 {
2744 }
2745 return NoReplace(local0);
2746 }
2747
2749 {
2750 QilNode qilNode = local0[0];
2751 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2752 {
2753 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2754 }
2755 if (this[XmlILOptimization.AnnotateConstruction] && AllowReplace(XmlILOptimization.AnnotateConstruction, local0))
2756 {
2758 }
2759 return NoReplace(local0);
2760 }
2761
2763 {
2764 QilNode qilNode = local0[0];
2765 QilNode qilNode2 = local0[1];
2766 if (this[XmlILOptimization.FoldNone] && (object)qilNode.XmlType == XmlQueryTypeFactory.None && AllowReplace(XmlILOptimization.FoldNone, local0))
2767 {
2768 return Replace(XmlILOptimization.FoldNone, local0, VisitNop(f.Nop(qilNode)));
2769 }
2770 if (this[XmlILOptimization.FoldXsltConvertLiteral] && IsLiteral(qilNode) && qilNode2.NodeType == QilNodeType.LiteralType)
2771 {
2773 if (CanFoldXsltConvert(qilNode, typTarget) && AllowReplace(XmlILOptimization.FoldXsltConvertLiteral, local0))
2774 {
2775 return Replace(XmlILOptimization.FoldXsltConvertLiteral, local0, FoldXsltConvert(qilNode, typTarget));
2776 }
2777 }
2778 if (this[XmlILOptimization.EliminateXsltConvert] && qilNode2.NodeType == QilNodeType.LiteralType)
2779 {
2781 if (qilNode.XmlType == xmlQueryType && AllowReplace(XmlILOptimization.EliminateXsltConvert, local0))
2782 {
2783 return Replace(XmlILOptimization.EliminateXsltConvert, local0, qilNode);
2784 }
2785 }
2786 return NoReplace(local0);
2787 }
2788
2789 private bool DependsOn(QilNode expr, QilNode target)
2790 {
2791 return new NodeFinder().Find(expr, target);
2792 }
2793
2794 private bool NonPositional(QilNode expr, QilNode iter)
2795 {
2796 return !new PositionOfFinder().Find(expr, iter);
2797 }
2798
2800 {
2802 QilNode result = ((!(expr is QilReference)) ? Visit(expr) : VisitReference(expr));
2804 return result;
2805 }
2806
2808 {
2810 }
2811
2813 {
2814 if (nd.NodeType == QilNodeType.Let)
2815 {
2817 }
2818 if (nd.NodeType == QilNodeType.Parameter)
2819 {
2821 }
2822 return false;
2823 }
2824
2826 {
2828 {
2829 return true;
2830 }
2832 {
2833 return true;
2834 }
2836 {
2837 return true;
2838 }
2840 {
2841 return true;
2842 }
2844 {
2845 return true;
2846 }
2847 return false;
2848 }
2849
2851 {
2853 {
2854 return true;
2855 }
2857 {
2858 return true;
2859 }
2861 {
2862 return true;
2863 }
2864 if (typ == XmlQueryTypeFactory.PI)
2865 {
2866 return true;
2867 }
2869 {
2870 return true;
2871 }
2872 return false;
2873 }
2874
2876 {
2877 if (_qil.IsDebug)
2878 {
2879 return true;
2880 }
2881 if (nd.XmlType.IsNode)
2882 {
2883 switch (nd.NodeType)
2884 {
2885 case QilNodeType.Choice:
2886 case QilNodeType.ElementCtor:
2887 case QilNodeType.AttributeCtor:
2888 case QilNodeType.CommentCtor:
2889 case QilNodeType.PICtor:
2890 case QilNodeType.TextCtor:
2891 case QilNodeType.RawTextCtor:
2892 case QilNodeType.DocumentCtor:
2893 case QilNodeType.NamespaceDecl:
2894 case QilNodeType.XsltCopy:
2895 case QilNodeType.XsltCopyOf:
2896 return true;
2897 case QilNodeType.Loop:
2898 return IsConstructedExpression(((QilLoop)nd).Body);
2899 case QilNodeType.Sequence:
2900 if (nd.Count == 0)
2901 {
2902 return true;
2903 }
2904 foreach (QilNode item in nd)
2905 {
2907 {
2908 return true;
2909 }
2910 }
2911 break;
2912 case QilNodeType.Conditional:
2913 {
2916 {
2917 return IsConstructedExpression(qilTernary.Right);
2918 }
2919 return true;
2920 }
2921 case QilNodeType.Invoke:
2922 return !((QilInvoke)nd).Function.XmlType.IsAtomicValue;
2923 }
2924 }
2925 return false;
2926 }
2927
2928 private bool IsLiteral(QilNode nd)
2929 {
2930 QilNodeType nodeType = nd.NodeType;
2931 if ((uint)(nodeType - 18) <= 7u)
2932 {
2933 return true;
2934 }
2935 return false;
2936 }
2937
2939 {
2940 foreach (QilNode item in nd)
2941 {
2942 if (!IsLiteral(item))
2943 {
2944 return false;
2945 }
2946 }
2947 return true;
2948 }
2949
2951 {
2952 if (nd.NodeType == QilNodeType.True)
2953 {
2954 return true;
2955 }
2956 if (nd.NodeType == QilNodeType.False)
2957 {
2958 return false;
2959 }
2960 if (nd.NodeType == QilNodeType.LiteralQName)
2961 {
2962 return nd;
2963 }
2964 return ((QilLiteral)nd).Value;
2965 }
2966
2968 {
2969 foreach (QilNode item in nd)
2970 {
2971 if (item.NodeType == QilNodeType.Sequence)
2972 {
2973 return true;
2974 }
2975 }
2976 return false;
2977 }
2978
2980 {
2982 if ((optimizerPatterns.MatchesPattern(OptimizerPatternName.FilterElements) || optimizerPatterns.MatchesPattern(OptimizerPatternName.FilterContentKind)) && (IsStepPattern(optimizerPatterns, QilNodeType.DescendantOrSelf) || IsStepPattern(optimizerPatterns, QilNodeType.Descendant) || IsStepPattern(optimizerPatterns, QilNodeType.Content) || IsStepPattern(optimizerPatterns, QilNodeType.XPathPreceding) || IsStepPattern(optimizerPatterns, QilNodeType.XPathFollowing) || IsStepPattern(optimizerPatterns, QilNodeType.FollowingSibling)))
2983 {
2984 return true;
2985 }
2986 return false;
2987 }
2988
2990 {
2992 if ((optimizerPatterns.MatchesPattern(OptimizerPatternName.Axis) || optimizerPatterns.MatchesPattern(OptimizerPatternName.FilterElements) || optimizerPatterns.MatchesPattern(OptimizerPatternName.FilterContentKind)) && (IsStepPattern(optimizerPatterns, QilNodeType.Ancestor) || IsStepPattern(optimizerPatterns, QilNodeType.AncestorOrSelf) || IsStepPattern(optimizerPatterns, QilNodeType.XPathPreceding) || IsStepPattern(optimizerPatterns, QilNodeType.PrecedingSibling)))
2993 {
2994 return true;
2995 }
2996 return false;
2997 }
2998
3003
3005 {
3007 if (qilNode.NodeType == QilNodeType.XsltConvert)
3008 {
3009 return false;
3010 }
3012 if (qilNode.NodeType == QilNodeType.XsltConvert)
3013 {
3014 return false;
3015 }
3017 }
3018
3020 {
3021 try
3022 {
3023 if (typTarget.IsAtomicValue)
3024 {
3028 {
3029 return f.LiteralString(value.Value);
3030 }
3032 {
3033 return f.LiteralInt32(value.ValueAsInt);
3034 }
3036 {
3037 return f.LiteralInt64(value.ValueAsLong);
3038 }
3040 {
3041 return f.LiteralDecimal((decimal)value.ValueAs(XsltConvert.DecimalType));
3042 }
3044 {
3045 return f.LiteralDouble(value.ValueAsDouble);
3046 }
3048 {
3049 return value.ValueAsBoolean ? f.True() : f.False();
3050 }
3051 }
3052 }
3053 catch (OverflowException)
3054 {
3055 }
3056 catch (FormatException)
3057 {
3058 }
3060 }
3061
3063 {
3064 object obj = ExtractLiteralValue(left);
3065 object obj2 = ExtractLiteralValue(right);
3066 if (left.NodeType == QilNodeType.LiteralDouble && (double.IsNaN((double)obj) || double.IsNaN((double)obj2)))
3067 {
3068 if (opType != QilNodeType.Ne)
3069 {
3070 return f.False();
3071 }
3072 return f.True();
3073 }
3074 switch (opType)
3075 {
3076 case QilNodeType.Eq:
3077 if (!obj.Equals(obj2))
3078 {
3079 return f.False();
3080 }
3081 return f.True();
3082 case QilNodeType.Ne:
3083 if (!obj.Equals(obj2))
3084 {
3085 return f.True();
3086 }
3087 return f.False();
3088 default:
3089 {
3090 int num = ((left.NodeType != QilNodeType.LiteralString) ? ((IComparable)obj).CompareTo(obj2) : string.CompareOrdinal((string)obj, (string)obj2));
3091 switch (opType)
3092 {
3093 case QilNodeType.Gt:
3094 if (num <= 0)
3095 {
3096 return f.False();
3097 }
3098 return f.True();
3099 case QilNodeType.Ge:
3100 if (num < 0)
3101 {
3102 return f.False();
3103 }
3104 return f.True();
3105 case QilNodeType.Lt:
3106 if (num >= 0)
3107 {
3108 return f.False();
3109 }
3110 return f.True();
3111 case QilNodeType.Le:
3112 if (num > 0)
3113 {
3114 return f.False();
3115 }
3116 return f.True();
3117 default:
3118 return null;
3119 }
3120 }
3121 }
3122 }
3123
3125 {
3126 return FoldArithmetic(opType, left, right) is QilLiteral;
3127 }
3128
3130 {
3131 checked
3132 {
3133 try
3134 {
3135 switch (left.NodeType)
3136 {
3137 case QilNodeType.LiteralInt32:
3138 {
3139 int num7 = left;
3140 int num8 = right;
3141 switch (opType)
3142 {
3143 case QilNodeType.Add:
3144 return f.LiteralInt32(num7 + num8);
3145 case QilNodeType.Subtract:
3146 return f.LiteralInt32(num7 - num8);
3147 case QilNodeType.Multiply:
3148 return f.LiteralInt32(num7 * num8);
3149 case QilNodeType.Divide:
3150 return f.LiteralInt32(unchecked(num7 / num8));
3151 case QilNodeType.Modulo:
3152 return f.LiteralInt32(unchecked(num7 % num8));
3153 }
3154 break;
3155 }
3156 case QilNodeType.LiteralInt64:
3157 {
3158 long num5 = left;
3159 long num6 = right;
3160 switch (opType)
3161 {
3162 case QilNodeType.Add:
3163 return f.LiteralInt64(num5 + num6);
3164 case QilNodeType.Subtract:
3165 return f.LiteralInt64(num5 - num6);
3166 case QilNodeType.Multiply:
3167 return f.LiteralInt64(num5 * num6);
3168 case QilNodeType.Divide:
3169 return f.LiteralInt64(unchecked(num5 / num6));
3170 case QilNodeType.Modulo:
3171 return f.LiteralInt64(unchecked(num5 % num6));
3172 }
3173 break;
3174 }
3175 case QilNodeType.LiteralDecimal:
3176 {
3177 decimal num3 = left;
3178 decimal num4 = right;
3179 switch (opType)
3180 {
3181 case QilNodeType.Add:
3182 return f.LiteralDecimal(num3 + num4);
3183 case QilNodeType.Subtract:
3184 return f.LiteralDecimal(num3 - num4);
3185 case QilNodeType.Multiply:
3186 return f.LiteralDecimal(num3 * num4);
3187 case QilNodeType.Divide:
3188 return f.LiteralDecimal(num3 / num4);
3189 case QilNodeType.Modulo:
3190 return f.LiteralDecimal(num3 % num4);
3191 }
3192 break;
3193 }
3194 case QilNodeType.LiteralDouble:
3195 {
3196 double num = left;
3197 double num2 = right;
3198 switch (opType)
3199 {
3200 case QilNodeType.Add:
3201 return f.LiteralDouble(num + num2);
3202 case QilNodeType.Subtract:
3203 return f.LiteralDouble(num - num2);
3204 case QilNodeType.Multiply:
3205 return f.LiteralDouble(num * num2);
3206 case QilNodeType.Divide:
3207 return f.LiteralDouble(num / num2);
3208 case QilNodeType.Modulo:
3209 return f.LiteralDouble(num % num2);
3210 }
3211 break;
3212 }
3213 }
3214 }
3215 catch (OverflowException)
3216 {
3217 }
3218 catch (DivideByZeroException)
3219 {
3220 }
3221 return opType switch
3222 {
3223 QilNodeType.Add => f.Add(left, right),
3224 QilNodeType.Subtract => f.Subtract(left, right),
3225 QilNodeType.Multiply => f.Multiply(left, right),
3226 QilNodeType.Divide => f.Divide(left, right),
3227 QilNodeType.Modulo => f.Modulo(left, right),
3228 _ => null,
3229 };
3230 }
3231 }
3232
3240
3242 {
3243 return OptimizerPatterns.Read(nd).MatchesPattern(OptimizerPatternName.IsDocOrderDistinct);
3244 }
3245
3250
3252 {
3253 if (patt.MatchesPattern(OptimizerPatternName.Step))
3254 {
3255 return ((QilNode)patt.GetArgument(OptimizerPatternArgument.StepNode)).NodeType == stepType;
3256 }
3257 return false;
3258 }
3259
3261 {
3262 int num = 0;
3263 for (int i = 0; i < globals.Count; i++)
3264 {
3265 QilNode qilNode = globals[i];
3266 bool flag;
3267 if (qilNode.NodeType == QilNodeType.Function)
3268 {
3269 flag = XmlILConstructInfo.Read(qilNode).CallersInfo.Count != 0;
3270 }
3271 else
3272 {
3274 flag = optimizerPatterns.MatchesPattern(OptimizerPatternName.IsReferenced) || optimizerPatterns.MatchesPattern(OptimizerPatternName.MaybeSideEffects);
3275 }
3276 if (flag)
3277 {
3278 if (num < i)
3279 {
3280 globals[num] = globals[i];
3281 }
3282 num++;
3283 }
3284 }
3285 for (int num2 = globals.Count - 1; num2 >= num; num2--)
3286 {
3287 globals.RemoveAt(num2);
3288 }
3289 }
3290}
void Add(TKey key, TValue value)
static OptimizerPatterns Write(QilNode nd)
static void Inherit(QilNode ndSrc, QilNode ndDst, OptimizerPatternName pattern)
static OptimizerPatterns Read(QilNode nd)
static void Analyze(QilExpression qil)
static XmlILConstructInfo Read(QilNode nd)
static XmlILConstructInfo Write(QilNode nd)
override QilNode Analyze(QilNode ndElem, QilNode ndContent)
void Analyze(QilNode nd, bool defaultNmspInScope)
override QilNode VisitWarning(QilUnary local0)
override QilNode VisitTypeAssert(QilTargetType local0)
override QilNode VisitLe(QilBinary local0)
override QilNode VisitXPathPreceding(QilUnary local0)
override QilNode VisitQilExpression(QilExpression local0)
override QilNode VisitDeref(QilBinary local0)
override QilNode VisitIsEmpty(QilUnary local0)
override QilNode VisitMultiply(QilBinary local0)
override QilNode VisitFollowingSibling(QilUnary local0)
QilNode FoldComparison(QilNodeType opType, QilNode left, QilNode right)
override QilNode VisitError(QilUnary local0)
override QilNode VisitDocumentCtor(QilUnary local0)
readonly XmlILNamespaceAnalyzer _nmspAnalyzer
override QilNode VisitXsltGenerateId(QilUnary local0)
override QilNode VisitNodeRange(QilBinary local0)
override QilNode VisitDescendant(QilUnary local0)
bool CanFoldXsltConvert(QilNode ndLiteral, XmlQueryType typTarget)
override QilNode VisitUnion(QilBinary local0)
override QilNode VisitConditional(QilTernary local0)
override QilNode VisitIsType(QilTargetType local0)
override QilNode VisitPrecedingSibling(QilUnary local0)
override QilNode VisitFunction(QilFunction local0)
override QilNode VisitPrefixOf(QilUnary local0)
override QilNode VisitNot(QilUnary local0)
override QilNode VisitXPathNamespace(QilUnary local0)
override QilNode VisitGe(QilBinary local0)
static void EliminateUnusedGlobals(IList< QilNode > globals)
override QilNode VisitRawTextCtor(QilUnary local0)
override QilNode VisitLength(QilUnary local0)
override QilNode VisitStrLength(QilUnary local0)
bool AllowReplace(XmlILOptimization pattern, QilNode original)
override QilNode VisitXsltCopy(QilBinary local0)
override QilNode VisitNameOf(QilUnary local0)
override QilNode VisitDivide(QilBinary local0)
override QilNode VisitAfter(QilBinary local0)
override QilNode VisitRtfCtor(QilBinary local0)
override QilNode VisitRoot(QilUnary local0)
override QilNode VisitDataSource(QilDataSource local0)
bool CanFoldXsltConvertNonLossy(QilNode ndLiteral, XmlQueryType typTarget)
override QilNode VisitOptimizeBarrier(QilUnary local0)
override QilNode VisitDescendantOrSelf(QilUnary local0)
override QilNode VisitSortKey(QilSortKey local0)
QilNode Subs(QilNode expr, QilNode refOld, QilNode refNew)
QilNode Replace(XmlILOptimization pattern, QilNode original, QilNode replacement)
bool DependsOn(QilNode expr, QilNode target)
override QilNode VisitNegate(QilUnary local0)
XmlILOptimizerVisitor(QilExpression qil, bool optimize)
override QilNode VisitLet(QilIterator local0)
override QilNode VisitCommentCtor(QilUnary local0)
override QilNode VisitGt(QilBinary local0)
override QilNode VisitNe(QilBinary local0)
override QilNode VisitSubtract(QilBinary local0)
override QilNode VisitIs(QilBinary local0)
override QilNode VisitInvoke(QilInvoke local0)
override QilNode VisitTextCtor(QilUnary local0)
bool IsStepPattern(OptimizerPatterns patt, QilNodeType stepType)
override QilNode VisitIntersection(QilBinary local0)
override QilNode VisitElementCtor(QilBinary local0)
override QilNode VisitPICtor(QilBinary local0)
override QilNode VisitOr(QilBinary local0)
override QilNode VisitSum(QilUnary local0)
override QilNode VisitNamespaceDecl(QilBinary local0)
override QilNode VisitContent(QilUnary local0)
override QilNode VisitAncestorOrSelf(QilUnary local0)
override void RecalculateType(QilNode node, XmlQueryType oldType)
override QilNode VisitModulo(QilBinary local0)
override QilNode VisitAverage(QilUnary local0)
bool IsStepPattern(QilNode nd, QilNodeType stepType)
override QilNode VisitMinimum(QilUnary local0)
override QilNode VisitXPathNodeValue(QilUnary local0)
override QilNode VisitPositionOf(QilUnary local0)
override QilNode VisitXsltCopyOf(QilUnary local0)
QilNode FoldXsltConvert(QilNode ndLiteral, XmlQueryType typTarget)
override QilNode VisitNop(QilUnary local0)
override QilNode VisitReference(QilNode oldNode)
override QilNode VisitEq(QilBinary local0)
override QilNode VisitNamespaceUriOf(QilUnary local0)
override QilNode VisitDocOrderDistinct(QilUnary local0)
override QilNode VisitAttribute(QilBinary local0)
override QilNode VisitParent(QilUnary local0)
override QilNode VisitBefore(QilBinary local0)
override QilNode VisitLocalNameOf(QilUnary local0)
bool NonPositional(QilNode expr, QilNode iter)
override QilNode VisitPreceding(QilUnary local0)
QilNode FoldArithmetic(QilNodeType opType, QilLiteral left, QilLiteral right)
override QilNode VisitXsltConvert(QilTargetType local0)
override QilNode VisitMaximum(QilUnary local0)
override QilNode VisitStrConcat(QilStrConcat local0)
override QilNode VisitChoice(QilChoice local0)
override QilNode VisitStrParseQName(QilBinary local0)
override QilNode VisitDifference(QilBinary local0)
override QilNode VisitLt(QilBinary local0)
override QilNode VisitSequence(QilList local0)
override QilNode VisitXPathFollowing(QilUnary local0)
bool CanFoldArithmetic(QilNodeType opType, QilLiteral left, QilLiteral right)
override QilNode VisitAdd(QilBinary local0)
override QilNode VisitAnd(QilBinary local0)
override QilNode VisitAncestor(QilUnary local0)
override QilNode VisitAttributeCtor(QilBinary local0)
virtual QilNode Analyze(QilNode ndConstr, QilNode ndContent)
QilLiteral LiteralDecimal(decimal value)
QilBinary Union(QilNode left, QilNode right)
QilBinary Gt(QilNode left, QilNode right)
QilIterator Let(QilNode binding)
QilBinary Attribute(QilNode left, QilNode right)
QilBinary Ne(QilNode left, QilNode right)
QilList Sequence(IList< QilNode > values)
Definition QilFactory.cs:44
QilUnary IsEmpty(QilNode child)
QilBinary Subtract(QilNode left, QilNode right)
QilBinary Intersection(QilNode left, QilNode right)
QilUnary Length(QilNode child)
QilLiteral LiteralString(string value)
QilBinary Divide(QilNode left, QilNode right)
QilTernary Conditional(QilNode left, QilNode center, QilNode right)
QilUnary Descendant(QilNode child)
QilLiteral LiteralInt32(int value)
QilBinary Difference(QilNode left, QilNode right)
QilUnary TextCtor(QilNode child)
QilBinary Add(QilNode left, QilNode right)
QilBinary Ge(QilNode left, QilNode right)
QilLiteral LiteralDouble(double value)
QilUnary Nop(QilNode child)
QilBinary Le(QilNode left, QilNode right)
QilUnary DocOrderDistinct(QilNode child)
QilUnary Not(QilNode child)
QilBinary Modulo(QilNode left, QilNode right)
QilLiteral LiteralInt64(long value)
QilBinary Is(QilNode left, QilNode right)
QilLoop Filter(QilNode variable, QilNode body)
QilLoop Loop(QilNode variable, QilNode body)
QilIterator For(QilNode binding)
QilBinary Eq(QilNode left, QilNode right)
QilUnary Error(QilNode child)
QilBinary Multiply(QilNode left, QilNode right)
QilBinary Lt(QilNode left, QilNode right)
QilTargetType XsltConvert(QilNode expr, XmlQueryType xmlType)
Definition QilFactory.cs:76
QilSortKey SortKey(QilNode key, QilNode collation)
virtual bool Contains(QilNode node)
Definition QilNode.cs:142
virtual void Add(QilNode node)
Definition QilNode.cs:121
override QilNode VisitLiteralInt64(QilLiteral n)
override QilNode VisitLiteralDouble(QilLiteral n)
override QilNode VisitLiteralDecimal(QilLiteral n)
override QilNode VisitFalse(QilNode n)
override QilNode VisitFor(QilIterator n)
override QilNode VisitLiteralInt32(QilLiteral n)
override QilNode VisitTrue(QilNode n)
override QilNode VisitLiteralString(QilLiteral n)
virtual QilNode VisitAssumeReference(QilNode expr)
Definition QilVisitor.cs:5
virtual QilNode VisitChildren(QilNode parent)
Definition QilVisitor.cs:14
virtual QilNode Visit(QilNode n)
Definition QilVisitor.cs:60
void AddSubstitutionPair(QilNode find, QilNode replace)
static XmlAtomicValue ConvertToType(XmlAtomicValue value, XmlQueryType destinationType)
static readonly Type DecimalType
static readonly XmlQueryType DecimalX
static readonly XmlQueryType DoubleX
static readonly XmlQueryType Text
static readonly XmlQueryType StringX
static readonly XmlQueryType IntX
static readonly XmlQueryType Attribute
static readonly XmlQueryType Node
static readonly XmlQueryType Element
static readonly XmlQueryType NodeS
static readonly XmlQueryType Comment
static readonly XmlQueryType None
static readonly XmlQueryType NodeNotRtfS
static readonly XmlQueryType FloatX
static readonly XmlQueryType PI
static readonly XmlQueryType IntegerX
static readonly XmlQueryType BooleanX
static readonly XmlQueryType Content