From: badumbatish <tanghocle...@gmail.com>

gcc/rust/ChangeLog:

        * backend/rust-compile-asm.cc (strip_double_quotes):
        Move strip double quotes to parse phase
        (CompileAsm::asm_construct_string_tree): Likewise
        * backend/rust-compile-asm.h (strip_double_quotes): Likewise
        * expand/rust-macro-builtins-asm.cc (strip_double_quotes):
        Likewise
        (expand_inline_asm): Renamed to expand_inline_asm_strings
        (expand_inline_asm_strings): Renamed from expand_inline_asm
        (parse_asm): Move strip double quotes to parse phase
        (parse_format_strings): Likewise
        * expand/rust-macro-builtins-asm.h (strip_double_quotes):
        Likewise
        (expand_inline_asm_strings): Inline asm expansion fn
        (expand_inline_asm_string): Inline asm expansion fn
---
 gcc/rust/backend/rust-compile-asm.cc       | 16 +--------
 gcc/rust/backend/rust-compile-asm.h        |  3 --
 gcc/rust/expand/rust-macro-builtins-asm.cc | 40 ++++++++++++++++------
 gcc/rust/expand/rust-macro-builtins-asm.h  |  9 +++++
 4 files changed, 39 insertions(+), 29 deletions(-)

diff --git a/gcc/rust/backend/rust-compile-asm.cc 
b/gcc/rust/backend/rust-compile-asm.cc
index 9305a9088bb..30a8cacf203 100644
--- a/gcc/rust/backend/rust-compile-asm.cc
+++ b/gcc/rust/backend/rust-compile-asm.cc
@@ -1,22 +1,8 @@
 #include "rust-compile-asm.h"
-
 #include "rust-system.h"
 namespace Rust {
 namespace Compile {
 
-std::string
-strip_double_quotes (const std::string &str)
-{
-  // Helper function strips the beginning and ending double quotes from a
-  // string.
-  std::string result = str;
-
-  rust_assert (result.size () >= 3);
-  result.erase (0, 1);
-  result.erase (result.size () - 1, 1);
-  return result;
-}
-
 CompileAsm::CompileAsm (Context *ctx)
   : HIRCompileBase (ctx), translated (error_mark_node)
 {}
@@ -86,7 +72,7 @@ CompileAsm::asm_construct_string_tree (HIR::InlineAsm &expr)
   // debugging and reading)
   std::stringstream ss;
   for (const auto &template_str : expr.template_strs)
-    ss << strip_double_quotes (template_str.symbol) << "\n\t";
+    ss << template_str.symbol << "\n\t";
 
   std::string result = ss.str ();
   return build_string (result.size () + 1, result.c_str ());
diff --git a/gcc/rust/backend/rust-compile-asm.h 
b/gcc/rust/backend/rust-compile-asm.h
index 8307d895bd5..05bb99ab40d 100644
--- a/gcc/rust/backend/rust-compile-asm.h
+++ b/gcc/rust/backend/rust-compile-asm.h
@@ -26,9 +26,6 @@
 namespace Rust {
 namespace Compile {
 
-std::string
-strip_double_quotes (const std::string &);
-
 class CompileAsm : private HIRCompileBase, protected HIR::HIRExpressionVisitor
 {
 private:
diff --git a/gcc/rust/expand/rust-macro-builtins-asm.cc 
b/gcc/rust/expand/rust-macro-builtins-asm.cc
index bbb8fff180f..379e5d8b967 100644
--- a/gcc/rust/expand/rust-macro-builtins-asm.cc
+++ b/gcc/rust/expand/rust-macro-builtins-asm.cc
@@ -742,26 +742,42 @@ parse_asm_arg (InlineAsmContext inline_asm_ctx)
   return tl::expected<InlineAsmContext, InlineAsmParseError> (inline_asm_ctx);
 }
 
+std::string
+strip_double_quotes (const std::string &str)
+{
+  // Helper function strips the beginning and ending double quotes from a
+  // string.
+  std::string result = str;
+
+  rust_assert (result.size () >= 3);
+  result.erase (0, 1);
+  result.erase (result.size () - 1, 1);
+  return result;
+}
+
 tl::expected<InlineAsmContext, InlineAsmParseError>
-expand_inline_asm (InlineAsmContext &inline_asm_ctx)
+expand_inline_asm_strings (InlineAsmContext &inline_asm_ctx)
 {
   auto &inline_asm = inline_asm_ctx.inline_asm;
 
   auto str_vec = inline_asm.get_template_strs ();
   for (auto &template_str : str_vec)
     {
-      std::cout << template_str.symbol << std::endl;
+      /*std::cout << template_str.symbol << std::endl;*/
 
       auto pieces = Fmt::Pieces::collect (template_str.symbol, false,
-                                         Fmt::ffi::ParseMode::Format)
-                     .get_pieces ();
+                                         Fmt::ffi::ParseMode::InlineAsm);
+      auto pieces_vec = pieces.get_pieces ();
 
-      for (size_t i = 0; i < pieces.size (); i++)
+      for (size_t i = 0; i < pieces_vec.size (); i++)
        {
-         auto piece = pieces[i];
+         auto piece = pieces_vec[i];
          if (piece.tag == Fmt::ffi::Piece::Tag::String)
-           std::cout << "       " << i << ": " << piece.string._0.to_string ()
-                     << std::endl;
+           {
+           }
+         /*std::cout << "       " << i << ": " << piece.string._0.to_string
+          * ()*/
+         /*   << std::endl;*/
        }
     }
 
@@ -798,7 +814,7 @@ parse_asm (location_t invoc_locus, AST::MacroInvocData 
&invoc,
   auto is_valid = (bool) resulting_context;
   if (is_valid)
     {
-      expand_inline_asm (resulting_context.value ());
+      expand_inline_asm_strings (*resulting_context);
     }
   if (is_valid)
     {
@@ -846,7 +862,8 @@ parse_format_strings (InlineAsmContext inline_asm_ctx)
   else
     {
       auto template_str
-       = AST::TupleTemplateStr (token->get_locus (), fm_string.value ());
+       = AST::TupleTemplateStr (token->get_locus (),
+                                strip_double_quotes (fm_string.value ()));
       inline_asm.template_strs.push_back (template_str);
     }
 
@@ -872,7 +889,8 @@ parse_format_strings (InlineAsmContext inline_asm_ctx)
       else
        {
          auto template_str
-           = AST::TupleTemplateStr (token->get_locus (), fm_string.value ());
+           = AST::TupleTemplateStr (token->get_locus (),
+                                    strip_double_quotes (fm_string.value ()));
          inline_asm.template_strs.push_back (template_str);
        }
     }
diff --git a/gcc/rust/expand/rust-macro-builtins-asm.h 
b/gcc/rust/expand/rust-macro-builtins-asm.h
index cbb5b63069a..2310b9debd7 100644
--- a/gcc/rust/expand/rust-macro-builtins-asm.h
+++ b/gcc/rust/expand/rust-macro-builtins-asm.h
@@ -8,6 +8,9 @@
 #include "system.h"
 namespace Rust {
 
+std::string
+strip_double_quotes (const std::string &str);
+
 enum InlineAsmParseError
 {
   // Enum for InlineAsmParseError
@@ -84,6 +87,12 @@ public:
   }
 };
 
+tl::expected<InlineAsmContext, InlineAsmParseError>
+expand_inline_asm_strings (InlineAsmContext &inline_asm_ctx);
+
+tl::expected<InlineAsmContext, InlineAsmParseError>
+expand_inline_asm_string (InlineAsmContext &inline_asm_ctx);
+
 // Expected calls
 WARN_UNUSED_RESULT
 tl::expected<InlineAsmContext, InlineAsmParseError>
-- 
2.45.2

Reply via email to