Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TailCallAnalyzer.cs
Go to the documentation of this file.
2
4
5internal static class TailCallAnalyzer
6{
7 public static void Analyze(QilExpression qil)
8 {
9 foreach (QilFunction function in qil.FunctionList)
10 {
11 if (XmlILConstructInfo.Read(function).ConstructMethod == XmlILConstructMethod.Writer)
12 {
13 AnalyzeDefinition(function.Definition);
14 }
15 }
16 }
17
18 private static void AnalyzeDefinition(QilNode nd)
19 {
20 switch (nd.NodeType)
21 {
22 case QilNodeType.Invoke:
23 if (XmlILConstructInfo.Read(nd).ConstructMethod == XmlILConstructMethod.Writer)
24 {
25 OptimizerPatterns.Write(nd).AddPattern(OptimizerPatternName.TailCall);
26 }
27 break;
28 case QilNodeType.Loop:
29 {
31 if (qilLoop.Variable.NodeType == QilNodeType.Let || !qilLoop.Variable.Binding.XmlType.MaybeMany)
32 {
34 }
35 break;
36 }
37 case QilNodeType.Sequence:
38 {
40 if (qilList.Count > 0)
41 {
43 }
44 break;
45 }
46 case QilNodeType.Choice:
47 {
49 for (int i = 0; i < qilChoice.Branches.Count; i++)
50 {
51 AnalyzeDefinition(qilChoice.Branches[i]);
52 }
53 break;
54 }
55 case QilNodeType.Conditional:
56 {
60 break;
61 }
62 case QilNodeType.Nop:
64 break;
65 }
66 }
67}
static OptimizerPatterns Write(QilNode nd)
static void AnalyzeDefinition(QilNode nd)
static void Analyze(QilExpression qil)
static XmlILConstructInfo Read(QilNode nd)