diff options
author | badumbatish <tanghocle456@gmail.com> | 2024-06-29 17:12:33 -0700 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2024-07-01 13:30:38 +0000 |
commit | b657fa0c78b422ab020693b3f0eca5cb98fb1492 (patch) | |
tree | b0a0da164839dd0e297cd9faf10731635fcfaf29 /gcc | |
parent | 7fd14aafa34796068ebdd7ff35284f3b7a8e9c4c (diff) | |
download | gcc-b657fa0c78b422ab020693b3f0eca5cb98fb1492.zip gcc-b657fa0c78b422ab020693b3f0eca5cb98fb1492.tar.gz gcc-b657fa0c78b422ab020693b3f0eca5cb98fb1492.tar.bz2 |
Store parse result of parse_format_string(s)
gcc/rust/ChangeLog:
* ast/rust-expr.h (struct TupleTemplateStr):
Store parse result of parse_format_string(s)
* expand/rust-macro-builtins-asm.cc (parse_format_strings):
Likewise
Signed-off-by: badumbatish <tanghocle456@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/ast/rust-expr.h | 7 | ||||
-rw-r--r-- | gcc/rust/expand/rust-macro-builtins-asm.cc | 17 |
2 files changed, 21 insertions, 3 deletions
diff --git a/gcc/rust/ast/rust-expr.h b/gcc/rust/ast/rust-expr.h index 9787e9a..f3ebf0b 100644 --- a/gcc/rust/ast/rust-expr.h +++ b/gcc/rust/ast/rust-expr.h @@ -5057,9 +5057,12 @@ struct TupleClobber struct TupleTemplateStr { // as gccrs still doesn't contain a symbol class I have put them as strings - std::string symbol; - std::string optional_symbol; location_t loc; + std::string symbol; + + TupleTemplateStr (location_t loc, const std::string &symbol) + : loc (loc), symbol (symbol) + {} }; // Inline Assembly Node diff --git a/gcc/rust/expand/rust-macro-builtins-asm.cc b/gcc/rust/expand/rust-macro-builtins-asm.cc index d6cc317..43e4120 100644 --- a/gcc/rust/expand/rust-macro-builtins-asm.cc +++ b/gcc/rust/expand/rust-macro-builtins-asm.cc @@ -784,12 +784,20 @@ parse_format_strings (InlineAsmContext inline_asm_ctx) auto last_token_id = inline_asm_ctx.last_token_id; auto fm_string = parse_format_string (inline_asm_ctx); + auto &inline_asm = inline_asm_ctx.inline_asm; + auto token = parser.peek_current_token (); if (fm_string == tl::nullopt) { rust_error_at (parser.peek_current_token ()->get_locus (), "%s template must be a string literal", "asm"); return tl::unexpected<InlineAsmParseError> (COMMITTED); } + else + { + auto template_str + = AST::TupleTemplateStr (token->get_locus (), fm_string.value ()); + inline_asm.template_strs.push_back (template_str); + } // formatted string stream @@ -803,15 +811,22 @@ parse_format_strings (InlineAsmContext inline_asm_ctx) // in here, which is formatted string in ABNF inline_asm_ctx.consumed_comma_without_formatted_string = false; + token = parser.peek_current_token (); fm_string = parse_format_string (inline_asm_ctx); if (fm_string == tl::nullopt) { inline_asm_ctx.consumed_comma_without_formatted_string = true; break; } + else + { + auto template_str + = AST::TupleTemplateStr (token->get_locus (), fm_string.value ()); + inline_asm.template_strs.push_back (template_str); + } } - return tl::expected<InlineAsmContext, InlineAsmParseError> (inline_asm_ctx); + return inline_asm_ctx; } // bool |