// ast-dump.h -- AST debug dump. -*- C++ -*- // Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. #ifndef GO_AST_DUMP_H #define GO_AST_DUMP_H #include "string-dump.h" class Expression; class Expression_list; class Named_object; class Statement; class Gogo; // This class implements fgo-dump-ast. the // Abstract syntax tree dump of the Go program. class Ast_dump_context : public String_dump { public: Ast_dump_context(std::ostream* out = NULL, bool dump_subblocks = true); // Initialize the dump context. void dump(Gogo*, const char* basename); // Dump spaces to dumpfile as indentation. void print_indent(); // Increase current indentation for print_indent(). void indent() { ++this->indent_;} // Decrease current indentation for print_indent(). void unindent() { --this->indent_;} // Whether subblocks should be dumped or not. bool dump_subblocks() { return this->dump_subblocks_; } // Get dump output stream. std::ostream& ostream() { return *this->ostream_;} // Dump a Block to dump file. void dump_block(Block*); // Dump a type to dump file. void dump_type(const Type*); // Dump an expression to dump file. void dump_expression(const Expression*); // Dump an expression list to dump file. void dump_expression_list(const Expression_list*, bool as_pairs = false); // Dump a typed identifier to dump file. void dump_typed_identifier(const Typed_identifier*); // Dump a typed identifier list to dump file. void dump_typed_identifier_list(const Typed_identifier_list*); // Dump temporary variable name to dump file. void dump_temp_variable_name(const Statement*); // Dump unamed lable name to dump file. void dump_label_name(const Unnamed_label*); // Dump operator symbol to dump file. void dump_operator(Operator); // Implementation of String_dump interface. void write_c_string(const char*); // Implements the String_dump interface. void write_string(const std::string& s); // Dump statement to stream. static void dump_to_stream(const Statement*, std::ostream*); // Dump expression to stream. static void dump_to_stream(const Expression* expr, std::ostream* out); private: // Current indent level. int indent_; // Indentation offset. static const int offset_; // Whether subblocks of composite statements should be dumped or not. bool dump_subblocks_; // Stream on output dump file. std::ostream* ostream_; Gogo* gogo_; }; #endif // GO_AST_DUMP_H