Skip to content
Snippets Groups Projects
Commit cbb1d840 authored by Elizabeth Figura's avatar Elizabeth Figura Committed by Alexandre Julliard
Browse files

vkd3d-shader/preproc: Separate a preproc_stringify() helper.

parent 3a235b57
No related branches found
No related tags found
1 merge request!291vkd3d-shader/preproc: Various fixes.
......@@ -346,6 +346,34 @@ static bool preproc_push_expansion(struct preproc_ctx *ctx,
return true;
}
static void preproc_stringify(struct preproc_ctx *ctx, struct vkd3d_string_buffer *buffer, const char *text)
{
const struct preproc_text *expansion;
const char *p = text + 1;
unsigned int i;
while (*p == ' ' || *p == '\t')
++p;
vkd3d_string_buffer_printf(buffer, "\"");
if ((expansion = find_arg_expansion(ctx, p)))
{
for (i = 0; i < expansion->text.content_size; ++i)
{
char c = expansion->text.buffer[i];
if (c == '\\' || c == '"')
vkd3d_string_buffer_printf(buffer, "\\");
vkd3d_string_buffer_printf(buffer, "%c", c);
}
}
else
{
vkd3d_string_buffer_printf(buffer, "%s", p);
}
vkd3d_string_buffer_printf(buffer, "\"");
}
int yylex(YYSTYPE *lval, YYLTYPE *lloc, yyscan_t scanner)
{
struct preproc_ctx *ctx = yyget_extra(scanner);
......@@ -463,33 +491,15 @@ int yylex(YYSTYPE *lval, YYLTYPE *lloc, yyscan_t scanner)
if (token == T_HASHSTRING)
{
const struct preproc_text *expansion;
const char *p = text + 1;
unsigned int i;
struct vkd3d_string_buffer buffer;
if (ctx->current_directive)
return return_token(token, lval, text);
while (*p == ' ' || *p == '\t')
++p;
vkd3d_string_buffer_printf(&ctx->buffer, "\"");
if ((expansion = find_arg_expansion(ctx, p)))
{
for (i = 0; i < expansion->text.content_size; ++i)
{
char c = expansion->text.buffer[i];
if (c == '\\' || c == '"')
vkd3d_string_buffer_printf(&ctx->buffer, "\\");
vkd3d_string_buffer_printf(&ctx->buffer, "%c", c);
}
}
else
{
vkd3d_string_buffer_printf(&ctx->buffer, "%s", p);
}
vkd3d_string_buffer_printf(&ctx->buffer, "\"");
vkd3d_string_buffer_init(&buffer);
preproc_stringify(ctx, &buffer, text);
vkd3d_string_buffer_printf(&ctx->buffer, "%s", buffer.buffer);
vkd3d_string_buffer_cleanup(&buffer);
break;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment