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