compiler: include global variable preinit blocks in ast dumps
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 13 Jun 2018 17:24:45 +0000 (17:24 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 13 Jun 2018 17:24:45 +0000 (17:24 +0000)
    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

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/ast-dump.cc

index e904f7c07ec6d321f45cfa91cb9cbce5221ebffc..f656fa3130ec3d792b4fce5a78c66ba1914918d8 100644 (file)
@@ -1,4 +1,4 @@
-6743db0ed81e313acf66c00a4ed0e2dcaaca2c9f
+1f07926263b6d14edb6abd6a00e6385190d30d0e
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 94bf5ef4369309d0e9e361b1db7bb49c72191f56..1fbc890f53ee8f0fdbfc52c165a040772a557682 100644 (file)
@@ -29,7 +29,7 @@ class Ast_dump_traverse_blocks_and_functions : public Traverse
 {
  public:
   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)
   { }
 
@@ -40,6 +40,9 @@ class Ast_dump_traverse_blocks_and_functions : public Traverse
   int
   function(Named_object*);
 
+  int
+  variable(Named_object*);
+
  private:
   Ast_dump_context* ast_dump_context_;
 };
@@ -150,6 +153,27 @@ Ast_dump_traverse_blocks_and_functions::function(Named_object* no)
   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.
 
 Ast_dump_context::Ast_dump_context(std::ostream* out /* = NULL */,