[COMMITTED 10/77] gccrs: Export extern block metadata

[email protected]
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.rust
Message-ID <[email protected]>
From: Pierre-Emmanuel Patry <[email protected]>

Extern block metadata is required to identify intrinsics from an extern
crate.

gcc/rust/ChangeLog:

	* metadata/rust-export-metadata.cc (ExportContext::begin_extern_block):
	Dump the prefix of an extern block.
	(ExportContext::end_extern_block): Likewise with extern block suffix.
	* metadata/rust-export-metadata.h: Add function prototypes.

Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
---
 gcc/rust/metadata/rust-export-metadata.cc | 18 ++++++++++++++++++
 gcc/rust/metadata/rust-export-metadata.h  |  2 ++
 2 files changed, 20 insertions(+)

diff --git a/gcc/rust/metadata/rust-export-metadata.cc b/gcc/rust/metadata/rust-export-metadata.cc
index 93574284c52..3388d0e920d 100644
--- a/gcc/rust/metadata/rust-export-metadata.cc
+++ b/gcc/rust/metadata/rust-export-metadata.cc
@@ -106,6 +106,18 @@ ExportContext::emit_function (AST::Function &fn)
   public_interface_buffer += oss.str ();
 }
 
+void
+ExportContext::begin_extern_block (AST::ExternBlock &block)
+{
+  public_interface_buffer += "extern \"" + block.get_abi () + "\" {\n";
+}
+
+void
+ExportContext::end_extern_block ()
+{
+  public_interface_buffer += "}\n";
+}
+
 void
 ExportContext::begin_module (const AST::Module &module)
 {
@@ -152,6 +164,12 @@ public:
   {
     ctx.emit_function (function);
   }
+  void visit (AST::ExternBlock &block) override
+  {
+    ctx.begin_extern_block (block);
+    AST::DefaultASTVisitor::visit (block);
+    ctx.end_extern_block ();
+  }
   void visit (AST::Trait &trait) override { ctx.emit_trait (trait); }
   void visit (AST::Module &module) override
   {
diff --git a/gcc/rust/metadata/rust-export-metadata.h b/gcc/rust/metadata/rust-export-metadata.h
index 399b9295175..17dc20a7d5f 100644
--- a/gcc/rust/metadata/rust-export-metadata.h
+++ b/gcc/rust/metadata/rust-export-metadata.h
@@ -42,6 +42,8 @@ public:
 
   void emit_trait (AST::Trait &trait);
   void emit_function (AST::Function &fn);
+  void begin_extern_block (AST::ExternBlock &block);
+  void end_extern_block ();
   void emit_use_declaration (AST::UseDeclaration &use_decl);
   void begin_module (const AST::Module &module);
   void end_module (const AST::Module &module);
-- 
2.50.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.