aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Ast/FoldExpression.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Ast/FoldExpression.cs')
-rw-r--r--src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Ast/FoldExpression.cs48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Ast/FoldExpression.cs b/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Ast/FoldExpression.cs
new file mode 100644
index 00000000..04f7053e
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Ast/FoldExpression.cs
@@ -0,0 +1,48 @@
+using System.IO;
+
+namespace Ryujinx.HLE.HOS.Diagnostics.Demangler.Ast
+{
+ public class FoldExpression : BaseNode
+ {
+ private bool _isLeftFold;
+ private string _operatorName;
+ private BaseNode _expression;
+ private BaseNode _initializer;
+
+ public FoldExpression(bool isLeftFold, string operatorName, BaseNode expression, BaseNode initializer) : base(NodeType.FunctionParameter)
+ {
+ _isLeftFold = isLeftFold;
+ _operatorName = operatorName;
+ _expression = expression;
+ _initializer = initializer;
+ }
+
+ public override void PrintLeft(TextWriter writer)
+ {
+ writer.Write("(");
+
+ if (_isLeftFold && _initializer != null)
+ {
+ _initializer.Print(writer);
+ writer.Write(" ");
+ writer.Write(_operatorName);
+ writer.Write(" ");
+ }
+
+ writer.Write(_isLeftFold ? "... " : " ");
+ writer.Write(_operatorName);
+ writer.Write(!_isLeftFold ? " ..." : " ");
+ _expression.Print(writer);
+
+ if (!_isLeftFold && _initializer != null)
+ {
+ _initializer.Print(writer);
+ writer.Write(" ");
+ writer.Write(_operatorName);
+ writer.Write(" ");
+ }
+
+ writer.Write(")");
+ }
+ }
+} \ No newline at end of file