Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ VisitConditional()

override QilNode System.Xml.Xsl.IlGen.XmlILVisitor.VisitConditional ( QilTernary ndCond)
inlineprotectedvirtual

Reimplemented from System.Xml.Xsl.Qil.QilVisitor.

Definition at line 487 of file XmlILVisitor.cs.

488 {
489 XmlILConstructInfo xmlILConstructInfo = XmlILConstructInfo.Read(ndCond);
490 if (xmlILConstructInfo.ConstructMethod == XmlILConstructMethod.Writer)
491 {
493 NestedVisitWithBranch(ndCond.Left, BranchingContext.OnFalse, label);
494 NestedVisit(ndCond.Center);
495 if (ndCond.Right.NodeType == QilNodeType.Sequence && ndCond.Right.Count == 0)
496 {
498 NestedVisit(ndCond.Right);
499 }
500 else
501 {
505 NestedVisit(ndCond.Right);
507 }
508 _iterCurr.Storage = StorageDescriptor.None();
509 }
510 else
511 {
516 if (ndCond.XmlType.IsSingleton)
517 {
518 NestedVisitWithBranch(ndCond.Left, BranchingContext.OnFalse, label3);
519 }
520 else
521 {
523 localBuilder = _helper.DeclareLocal("$$$boolResult", typeof(bool));
527 }
529 IteratorDescriptor iterNested = _iterNested;
534 if (!ndCond.XmlType.IsSingleton)
535 {
540 _helper.Emit(OpCodes.Brtrue, iterNested.GetLabelNext());
543 }
545 }
546 return ndCond;
547 }
static readonly OpCode Brfalse
Definition OpCodes.cs:117
static readonly OpCode Brtrue
Definition OpCodes.cs:119
static readonly OpCode Br
Definition OpCodes.cs:115
static readonly OpCode Ldloc
Definition OpCodes.cs:425
LocalBuilder DeclareLocal(string name, Type type)
void EmitUnconditionalBranch(OpCode opcode, Label lblTarget)
void SetIterator(Label lblNext, StorageDescriptor storage)
void NestedVisitWithBranch(QilNode nd, BranchingContext brctxt, Label lblBranch)
void NestedVisitEnsureLocal(QilNode nd, LocalBuilder loc)
void ConditionalBranch(QilNode ndBranch, Type itemStorageType, LocalBuilder locResult)
void NestedVisit(QilNode nd, Type itemStorageType, bool isCached)

References System.Xml.Xsl.IlGen.XmlILVisitor._helper, System.Xml.Xsl.IlGen.XmlILVisitor._iterCurr, System.Xml.Xsl.IlGen.XmlILVisitor._iterNested, System.Reflection.Emit.OpCodes.Br, System.Reflection.Emit.OpCodes.Brfalse, System.Reflection.Emit.OpCodes.Brtrue, System.Xml.Xsl.IlGen.XmlILVisitor.ConditionalBranch(), System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Xml.Xsl.IlGen.GenerateHelper.DeclareLocal(), System.Xml.Xsl.IlGen.GenerateHelper.DefineLabel(), System.Xml.Dictionary, System.Xml.Xsl.IlGen.GenerateHelper.Emit(), System.Xml.Xsl.IlGen.GenerateHelper.EmitUnconditionalBranch(), System.Xml.Xsl.IlGen.XmlILVisitor.GetItemStorageType(), System.Xml.Xsl.IlGen.IteratorDescriptor.GetLabelNext(), System.Reflection.Emit.OpCodes.Ldloc, System.Xml.Xsl.IlGen.StorageDescriptor.Local(), System.Xml.Xsl.IlGen.GenerateHelper.MarkLabel(), System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(), System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisitEnsureLocal(), System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisitWithBranch(), System.Xml.Xsl.IlGen.StorageDescriptor.None(), System.Xml.Xsl.IlGen.XmlILConstructInfo.Read(), and System.Xml.Xsl.IlGen.IteratorDescriptor.SetIterator().