return result;
}
-static string_t parse_string_literals(void)
+static string_t parse_string_literals(char const *const context)
{
+ if (!skip_till(T_STRING_LITERAL, context))
+ return (string_t){ "", 0 };
+
string_encoding_t enc;
source_position_t const pos = *HERE;
string_t const res = concat_string_literals(&enc);
return NULL;
}
- argument->constraints = parse_string_literals();
+ argument->constraints = parse_string_literals("asm argument");
add_anchor_token(')');
expect('(');
expression_t *expression = parse_expression();
while (token.kind == T_STRING_LITERAL) {
asm_clobber_t *clobber = allocate_ast_zero(sizeof(clobber[0]));
- clobber->clobber = parse_string_literals();
+ clobber->clobber = parse_string_literals(NULL);
*anchor = clobber;
anchor = &clobber->next;
expect('(');
add_anchor_token(')');
- if (token.kind != T_STRING_LITERAL) {
- parse_error_expected("after asm(", T_STRING_LITERAL, NULL);
- goto end_of_asm;
- }
- asm_statement->asm_text = parse_string_literals();
+ asm_statement->asm_text = parse_string_literals("asm statement");
add_anchor_token(':');
if (!next_if(':')) {
expect('(');
rem_anchor_token(T_STRING_LITERAL);
- statement->asms.asm_text = parse_string_literals();
+ statement->asms.asm_text = parse_string_literals("global asm");
statement->base.next = unit->global_asm;
unit->global_asm = statement;
eat(T_extern);
source_position_t const pos = *HERE;
- char const *const linkage = parse_string_literals().begin;
+ char const *const linkage = parse_string_literals(NULL).begin;
linkage_kind_t old_linkage = current_linkage;
linkage_kind_t new_linkage;