Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TailCallAnalyzer.cs
Go to the documentation of this file.
1
using
System.Xml.Xsl.Qil
;
2
3
namespace
System.Xml.Xsl.IlGen
;
4
5
internal
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
{
30
QilLoop
qilLoop
= (
QilLoop
)
nd
;
31
if
(
qilLoop
.Variable.NodeType ==
QilNodeType
.Let || !
qilLoop
.Variable.Binding.XmlType.MaybeMany)
32
{
33
AnalyzeDefinition
(
qilLoop
.Body);
34
}
35
break
;
36
}
37
case
QilNodeType
.Sequence:
38
{
39
QilList
qilList
= (
QilList
)
nd
;
40
if
(
qilList
.Count > 0)
41
{
42
AnalyzeDefinition
(
qilList
[
qilList
.Count - 1]);
43
}
44
break
;
45
}
46
case
QilNodeType
.Choice:
47
{
48
QilChoice
qilChoice
= (
QilChoice
)
nd
;
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
{
57
QilTernary
qilTernary
= (
QilTernary
)
nd
;
58
AnalyzeDefinition
(
qilTernary
.Center);
59
AnalyzeDefinition
(
qilTernary
.Right);
60
break
;
61
}
62
case
QilNodeType
.Nop:
63
AnalyzeDefinition
(((
QilUnary
)
nd
).Child);
64
break
;
65
}
66
}
67
}
System.Xml.Xsl.IlGen.OptimizerPatterns.Write
static OptimizerPatterns Write(QilNode nd)
Definition
OptimizerPatterns.cs:73
System.Xml.Xsl.IlGen.OptimizerPatterns
Definition
OptimizerPatterns.cs:6
System.Xml.Xsl.IlGen.TailCallAnalyzer.AnalyzeDefinition
static void AnalyzeDefinition(QilNode nd)
Definition
TailCallAnalyzer.cs:18
System.Xml.Xsl.IlGen.TailCallAnalyzer.Analyze
static void Analyze(QilExpression qil)
Definition
TailCallAnalyzer.cs:7
System.Xml.Xsl.IlGen.TailCallAnalyzer
Definition
TailCallAnalyzer.cs:6
System.Xml.Xsl.IlGen.XmlILConstructInfo.Read
static XmlILConstructInfo Read(QilNode nd)
Definition
XmlILConstructInfo.cs:238
System.Xml.Xsl.IlGen.XmlILConstructInfo
Definition
XmlILConstructInfo.cs:7
System.Xml.Xsl.Qil.QilChoice
Definition
QilChoice.cs:4
System.Xml.Xsl.Qil.QilExpression
Definition
QilExpression.cs:7
System.Xml.Xsl.Qil.QilFunction
Definition
QilFunction.cs:4
System.Xml.Xsl.Qil.QilList
Definition
QilList.cs:4
System.Xml.Xsl.Qil.QilLoop
Definition
QilLoop.cs:4
System.Xml.Xsl.Qil.QilNode
Definition
QilNode.cs:7
System.Xml.Xsl.Qil.QilTernary
Definition
QilTernary.cs:4
System.Xml.Xsl.Qil.QilUnary
Definition
QilUnary.cs:4
System.Xml.Xsl.IlGen.XmlILConstructMethod
XmlILConstructMethod
Definition
XmlILConstructMethod.cs:4
System.Xml.Xsl.IlGen.OptimizerPatternName
OptimizerPatternName
Definition
OptimizerPatternName.cs:4
System.Xml.Xsl.IlGen
Definition
BranchingContext.cs:1
System.Xml.Xsl.Qil.QilNodeType
QilNodeType
Definition
QilNodeType.cs:4
System.Xml.Xsl.Qil
Definition
IQilAnnotation.cs:1
System.Xml.ValueHandleType.Dictionary
@ Dictionary
source
System.Private.Xml
System.Xml.Xsl.IlGen
TailCallAnalyzer.cs
Generated by
1.10.0