Commit de001ec7 by Ian Lance Taylor

compiler: include global variable preinit blocks in ast dumps

    
    Dump out the blocks corresponding to variable pre-inits when
    -fgo-dump-ast is in effect. Each preinit block is prefixed with a
    comment indicating the variable it is initializing.
    
    Reviewed-on: https://go-review.googlesource.com/118636

From-SVN: r261555
parent 1cc56f07
6743db0ed81e313acf66c00a4ed0e2dcaaca2c9f 1f07926263b6d14edb6abd6a00e6385190d30d0e
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -29,7 +29,7 @@ class Ast_dump_traverse_blocks_and_functions : public Traverse ...@@ -29,7 +29,7 @@ class Ast_dump_traverse_blocks_and_functions : public Traverse
{ {
public: public:
Ast_dump_traverse_blocks_and_functions(Ast_dump_context* ast_dump_context) Ast_dump_traverse_blocks_and_functions(Ast_dump_context* ast_dump_context)
: Traverse(traverse_blocks | traverse_functions), : Traverse(traverse_blocks | traverse_functions | traverse_variables),
ast_dump_context_(ast_dump_context) ast_dump_context_(ast_dump_context)
{ } { }
...@@ -40,6 +40,9 @@ class Ast_dump_traverse_blocks_and_functions : public Traverse ...@@ -40,6 +40,9 @@ class Ast_dump_traverse_blocks_and_functions : public Traverse
int int
function(Named_object*); function(Named_object*);
int
variable(Named_object*);
private: private:
Ast_dump_context* ast_dump_context_; Ast_dump_context* ast_dump_context_;
}; };
...@@ -150,6 +153,27 @@ Ast_dump_traverse_blocks_and_functions::function(Named_object* no) ...@@ -150,6 +153,27 @@ Ast_dump_traverse_blocks_and_functions::function(Named_object* no)
return TRAVERSE_CONTINUE; return TRAVERSE_CONTINUE;
} }
// Dump variable preinits
int
Ast_dump_traverse_blocks_and_functions::variable(Named_object* no)
{
if (!no->is_variable())
return TRAVERSE_CONTINUE;
Variable* var = no->var_value();
if (var->has_pre_init())
{
this->ast_dump_context_->ostream() << "// preinit block for var "
<< no->message_name() << "\n";
var->preinit()->traverse(this);
}
return TRAVERSE_CONTINUE;
}
// Class Ast_dump_context. // Class Ast_dump_context.
Ast_dump_context::Ast_dump_context(std::ostream* out /* = NULL */, Ast_dump_context::Ast_dump_context(std::ostream* out /* = NULL */,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment