github.com/ronhuafeng/gofrontend@v0.0.0-20220715151246-ff23266b8bc5/go/ast-dump.h (about)

     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