BaseNode.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using System.IO;
  2. namespace Ryujinx.HLE.HOS.Diagnostics.Demangler.Ast
  3. {
  4. public enum NodeType
  5. {
  6. CvQualifierType,
  7. SimpleReferenceType,
  8. NameType,
  9. EncodedFunction,
  10. NestedName,
  11. SpecialName,
  12. LiteralOperator,
  13. NodeArray,
  14. ElaboratedType,
  15. PostfixQualifiedType,
  16. SpecialSubstitution,
  17. ExpandedSpecialSubstitution,
  18. CtorDtorNameType,
  19. EnclosedExpression,
  20. ForwardTemplateReference,
  21. NameTypeWithTemplateArguments,
  22. PackedTemplateArgument,
  23. TemplateArguments,
  24. BooleanExpression,
  25. CastExpression,
  26. CallExpression,
  27. IntegerCastExpression,
  28. PackedTemplateParameter,
  29. PackedTemplateParameterExpansion,
  30. IntegerLiteral,
  31. DeleteExpression,
  32. MemberExpression,
  33. ArraySubscriptingExpression,
  34. InitListExpression,
  35. PostfixExpression,
  36. ConditionalExpression,
  37. ThrowExpression,
  38. FunctionParameter,
  39. ConversionExpression,
  40. BinaryExpression,
  41. PrefixExpression,
  42. BracedExpression,
  43. BracedRangeExpression,
  44. NewExpression,
  45. QualifiedName,
  46. StdQualifiedName,
  47. DtOrName,
  48. GlobalQualifiedName,
  49. NoexceptSpec,
  50. DynamicExceptionSpec,
  51. FunctionType,
  52. PointerType,
  53. ReferenceType,
  54. ConversionOperatorType,
  55. LocalName,
  56. CtorVtableSpecialName,
  57. ArrayType
  58. }
  59. public abstract class BaseNode
  60. {
  61. public NodeType Type { get; protected set; }
  62. public BaseNode(NodeType type)
  63. {
  64. Type = type;
  65. }
  66. public virtual void Print(TextWriter writer)
  67. {
  68. PrintLeft(writer);
  69. if (HasRightPart())
  70. {
  71. PrintRight(writer);
  72. }
  73. }
  74. public abstract void PrintLeft(TextWriter writer);
  75. public virtual bool HasRightPart()
  76. {
  77. return false;
  78. }
  79. public virtual bool IsArray()
  80. {
  81. return false;
  82. }
  83. public virtual bool HasFunctions()
  84. {
  85. return false;
  86. }
  87. public virtual string GetName()
  88. {
  89. return null;
  90. }
  91. public virtual void PrintRight(TextWriter writer) {}
  92. public override string ToString()
  93. {
  94. StringWriter writer = new StringWriter();
  95. Print(writer);
  96. return writer.ToString();
  97. }
  98. }
  99. }