aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbadumbatish <tanghocle456@gmail.com>2024-07-26 20:26:01 -0700
committerCohenArthur <arthur.cohen@embecosm.com>2024-09-02 09:44:55 +0000
commit596bf6946d85bf9b41d1b5479e661111750927a3 (patch)
treefd9911da51bd8a2bfc61492435f715edb79b3045
parent8d157b63670d1efe4a664b7da14b6908bbd11689 (diff)
downloadgcc-596bf6946d85bf9b41d1b5479e661111750927a3.zip
gcc-596bf6946d85bf9b41d1b5479e661111750927a3.tar.gz
gcc-596bf6946d85bf9b41d1b5479e661111750927a3.tar.bz2
Move strip double quotes, add scaffold expand
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
-rw-r--r--gcc/rust/backend/rust-compile-asm.cc16
-rw-r--r--gcc/rust/backend/rust-compile-asm.h3
-rw-r--r--gcc/rust/expand/rust-macro-builtins-asm.cc40
-rw-r--r--gcc/rust/expand/rust-macro-builtins-asm.h9
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 aa83fb7..4086088 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 8307d89..05bb99a 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 d3cfbd8..dcc2a3d 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 cbb5b63..2310b9d 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>