gccrs: 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>
This commit is contained in:
badumbatish 2024-06-29 17:12:33 -07:00 committed by Arthur Cohen
parent e3db0b3919
commit 2f80f40a25
2 changed files with 21 additions and 3 deletions

View file

@ -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

View file

@ -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