Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===--- ASTDumperUtils.h - Printing of AST nodes -------------------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file implements AST utilities for traversal down the tree.
  10. //
  11. //===----------------------------------------------------------------------===//
  12.  
  13. #ifndef LLVM_CLANG_AST_ASTDUMPERUTILS_H
  14. #define LLVM_CLANG_AST_ASTDUMPERUTILS_H
  15.  
  16. #include "llvm/Support/raw_ostream.h"
  17.  
  18. namespace clang {
  19.  
  20. /// Used to specify the format for printing AST dump information.
  21. enum ASTDumpOutputFormat {
  22.   ADOF_Default,
  23.   ADOF_JSON
  24. };
  25.  
  26. // Colors used for various parts of the AST dump
  27. // Do not use bold yellow for any text.  It is hard to read on white screens.
  28.  
  29. struct TerminalColor {
  30.   llvm::raw_ostream::Colors Color;
  31.   bool Bold;
  32. };
  33.  
  34. // Red           - CastColor
  35. // Green         - TypeColor
  36. // Bold Green    - DeclKindNameColor, UndeserializedColor
  37. // Yellow        - AddressColor, LocationColor
  38. // Blue          - CommentColor, NullColor, IndentColor
  39. // Bold Blue     - AttrColor
  40. // Bold Magenta  - StmtColor
  41. // Cyan          - ValueKindColor, ObjectKindColor
  42. // Bold Cyan     - ValueColor, DeclNameColor
  43.  
  44. // Decl kind names (VarDecl, FunctionDecl, etc)
  45. static const TerminalColor DeclKindNameColor = {llvm::raw_ostream::GREEN, true};
  46. // Attr names (CleanupAttr, GuardedByAttr, etc)
  47. static const TerminalColor AttrColor = {llvm::raw_ostream::BLUE, true};
  48. // Statement names (DeclStmt, ImplicitCastExpr, etc)
  49. static const TerminalColor StmtColor = {llvm::raw_ostream::MAGENTA, true};
  50. // Comment names (FullComment, ParagraphComment, TextComment, etc)
  51. static const TerminalColor CommentColor = {llvm::raw_ostream::BLUE, false};
  52.  
  53. // Type names (int, float, etc, plus user defined types)
  54. static const TerminalColor TypeColor = {llvm::raw_ostream::GREEN, false};
  55.  
  56. // Pointer address
  57. static const TerminalColor AddressColor = {llvm::raw_ostream::YELLOW, false};
  58. // Source locations
  59. static const TerminalColor LocationColor = {llvm::raw_ostream::YELLOW, false};
  60.  
  61. // lvalue/xvalue
  62. static const TerminalColor ValueKindColor = {llvm::raw_ostream::CYAN, false};
  63. // bitfield/objcproperty/objcsubscript/vectorcomponent
  64. static const TerminalColor ObjectKindColor = {llvm::raw_ostream::CYAN, false};
  65. // contains-errors
  66. static const TerminalColor ErrorsColor = {llvm::raw_ostream::RED, true};
  67.  
  68. // Null statements
  69. static const TerminalColor NullColor = {llvm::raw_ostream::BLUE, false};
  70.  
  71. // Undeserialized entities
  72. static const TerminalColor UndeserializedColor = {llvm::raw_ostream::GREEN,
  73.                                                   true};
  74.  
  75. // CastKind from CastExpr's
  76. static const TerminalColor CastColor = {llvm::raw_ostream::RED, false};
  77.  
  78. // Value of the statement
  79. static const TerminalColor ValueColor = {llvm::raw_ostream::CYAN, true};
  80. // Decl names
  81. static const TerminalColor DeclNameColor = {llvm::raw_ostream::CYAN, true};
  82.  
  83. // Indents ( `, -. | )
  84. static const TerminalColor IndentColor = {llvm::raw_ostream::BLUE, false};
  85.  
  86. class ColorScope {
  87.   llvm::raw_ostream &OS;
  88.   const bool ShowColors;
  89.  
  90. public:
  91.   ColorScope(llvm::raw_ostream &OS, bool ShowColors, TerminalColor Color)
  92.       : OS(OS), ShowColors(ShowColors) {
  93.     if (ShowColors)
  94.       OS.changeColor(Color.Color, Color.Bold);
  95.   }
  96.   ~ColorScope() {
  97.     if (ShowColors)
  98.       OS.resetColor();
  99.   }
  100. };
  101.  
  102. } // namespace clang
  103.  
  104. #endif // LLVM_CLANG_AST_ASTDUMPERUTILS_H
  105.