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 12class Expression; 13class Expression_list; 14class Named_object; 15class Statement; 16class Gogo; 17 18// This class implements fgo-dump-ast. the 19// Abstract syntax tree dump of the Go program. 20 21class 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 36 indent() 37 { ++this->indent_;} 38 39 // Decrease current indentation for print_indent(). 40 void 41 unindent() 42 { --this->indent_;} 43 44 // Whether subblocks should be dumped or not. 45 bool 46 dump_subblocks() 47 { return this->dump_subblocks_; } 48 49 // Get dump output stream. 50 std::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