OSDN Git Service

compiler: Better error message if method requires pointer receiver.
[pf3gnuchains/gcc-fork.git] / gcc / go / gofrontend / ast-dump.h
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
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