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