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