1 // ast-dump.h -- AST debug dump. -*- C++ -*- 2 3 // Copyright 2011 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 #ifndef GO_AST_DUMP_H 8 #define GO_AST_DUMP_H 9 10 #include "string-dump.h" 11 12 class Expression; 13 class Expression_list; 14 class Named_object; 15 class Statement; 16 class Gogo; 17 18 // This class implements fgo-dump-ast. the 19 // Abstract syntax tree dump of the Go program. 20 21 class Ast_dump_context : public String_dump 22 { 23 public: 24 Ast_dump_context(std::ostream* out = NULL, bool dump_subblocks = true); 25 26 // Initialize the dump context. 27 void 28 dump(Gogo*, const char* basename); 29 30 // Dump spaces to dumpfile as indentation. 31 void 32 print_indent(); 33 34 // Increase current indentation for print_indent(). 35 void indent()36 indent() 37 { ++this->indent_;} 38 39 // Decrease current indentation for print_indent(). 40 void unindent()41 unindent() 42 { --this->indent_;} 43 44 // Whether subblocks should be dumped or not. 45 bool dump_subblocks()46 dump_subblocks() 47 { return this->dump_subblocks_; } 48 49 // Get dump output stream. 50 std::ostream& ostream()51 ostream() 52 { return *this->ostream_;} 53 54 // Dump a Block to dump file. 55 void 56 dump_block(Block*); 57 58 // Dump a type to dump file. 59 void 60 dump_type(const Type*); 61 62 // Dump an expression to dump file. 63 void 64 dump_expression(const Expression*); 65 66 // Dump an expression list to dump file. 67 void 68 dump_expression_list(const Expression_list*, bool as_pairs = false); 69 70 // Dump a typed identifier to dump file. 71 void 72 dump_typed_identifier(const Typed_identifier*); 73 74 // Dump a typed identifier list to dump file. 75 void 76 dump_typed_identifier_list(const Typed_identifier_list*); 77 78 // Dump temporary variable name to dump file. 79 void 80 dump_temp_variable_name(const Statement*); 81 82 // Dump unamed lable name to dump file. 83 void 84 dump_label_name(const Unnamed_label*); 85 86 // Dump operator symbol to dump file. 87 void 88 dump_operator(Operator); 89 90 // Implementation of String_dump interface. 91 void 92 write_c_string(const char*); 93 94 // Implements the String_dump interface. 95 void 96 write_string(const std::string& s); 97 98 // Dump statement to stream. 99 static void 100 dump_to_stream(const Statement*, std::ostream*); 101 102 // Dump expression to stream. 103 static void 104 dump_to_stream(const Expression* expr, std::ostream* out); 105 106 private: 107 // Current indent level. 108 int indent_; 109 110 // Indentation offset. 111 static const int offset_; 112 113 // Whether subblocks of composite statements should be dumped or not. 114 bool dump_subblocks_; 115 116 // Stream on output dump file. 117 std::ostream* ostream_; 118 119 Gogo* gogo_; 120 }; 121 122 #endif // GO_AST_DUMP_H 123