gccrs: ast: Module: unloaded module and inner attributes
authorJakub Dupak <dev@jakubdupak.com>
Sat, 15 Oct 2022 19:30:40 +0000 (21:30 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 21 Feb 2023 11:36:36 +0000 (12:36 +0100)
gcc/rust/ChangeLog:

* ast/rust-ast-dump.cc (Dump::visit): Properly handle unloaded modules.

Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
gcc/rust/ast/rust-ast-dump.cc

index 1e7a235..a12c392 100644 (file)
@@ -810,21 +810,44 @@ Dump::visit (Method &method)
 void
 Dump::visit (Module &module)
 {
-  emit_visibility (module.get_visibility ());
-  stream << "mod " << module.get_name () << " {\n";
+  //  Syntax:
+  //   mod IDENTIFIER ;
+  //     | mod IDENTIFIER {
+  //     InnerAttribute*
+  //     Item*
+  //   }
 
-  indentation.increment ();
+  emit_visibility (module.get_visibility ());
+  stream << "mod " << module.get_name ();
 
-  for (auto &item : module.get_items ())
+  if (module.get_kind () == Module::UNLOADED)
     {
-      stream << indentation;
-      item->accept_vis (*this);
-      stream << '\n';
+      stream << ";\n";
     }
+  else /* Module::LOADED */
+    {
+      stream << " {\n";
 
-  indentation.decrement ();
+      indentation.increment ();
 
-  stream << indentation << "}\n";
+      for (auto &item : module.get_inner_attrs ())
+       {
+         stream << indentation;
+         emit_attrib (item);
+         stream << '\n';
+       }
+
+      for (auto &item : module.get_items ())
+       {
+         stream << indentation;
+         item->accept_vis (*this);
+         stream << '\n';
+       }
+
+      indentation.decrement ();
+
+      stream << indentation << "}\n";
+    }
 }
 
 void