Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
QilCloneVisitor.cs
Go to the documentation of this file.
1namespace System.Xml.Xsl.Qil;
2
4{
5 private readonly QilFactory _fac;
6
7 private readonly SubstitutionList _subs;
8
10 : this(fac, new SubstitutionList())
11 {
12 }
13
15 {
16 _fac = fac;
17 _subs = subs;
18 }
19
25
26 protected override QilNode Visit(QilNode oldNode)
27 {
28 QilNode qilNode = null;
29 if (oldNode == null)
30 {
31 return null;
32 }
34 {
36 }
37 if (qilNode == null)
38 {
39 qilNode = oldNode.ShallowClone(_fac);
40 }
41 return base.Visit(qilNode);
42 }
43
44 protected override QilNode VisitChildren(QilNode parent)
45 {
46 for (int i = 0; i < parent.Count; i++)
47 {
48 QilNode qilNode = parent[i];
49 if (IsReference(parent, i))
50 {
51 parent[i] = VisitReference(qilNode);
52 if (parent[i] == null)
53 {
54 parent[i] = qilNode;
55 }
56 }
57 else
58 {
59 parent[i] = Visit(qilNode);
60 }
61 }
62 return parent;
63 }
64
66 {
68 return base.VisitReference((qilNode == null) ? oldNode : qilNode);
69 }
70
71 protected override void BeginScope(QilNode node)
72 {
73 _subs.AddSubstitutionPair(node, node.ShallowClone(_fac));
74 }
75
76 protected override void EndScope(QilNode node)
77 {
79 }
80
85}
readonly SubstitutionList _subs
override void BeginScope(QilNode node)
override QilNode VisitReference(QilNode oldNode)
override QilNode Visit(QilNode oldNode)
QilNode FindClonedReference(QilNode node)
override QilNode VisitChildren(QilNode parent)
QilCloneVisitor(QilFactory fac, SubstitutionList subs)
override void EndScope(QilNode node)
static void Check(QilNode input)
virtual QilNode VisitAssumeReference(QilNode expr)
Definition QilVisitor.cs:5
virtual bool IsReference(QilNode parent, int childNum)
Definition QilVisitor.cs:30
void AddSubstitutionPair(QilNode find, QilNode replace)