Module: vkd3d Branch: master Commit: 92877f7a430e678dec7c5c9c1c1fe81edd417568 URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=92877f7a430e678dec7c5c9c... Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Thu Jan 14 14:47:48 2021 -0600 vkd3d-shader: Implement __FILE__. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- libs/vkd3d-shader/preproc.l | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libs/vkd3d-shader/preproc.l b/libs/vkd3d-shader/preproc.l index c5c4925..80ac7d0 100644 --- a/libs/vkd3d-shader/preproc.l +++ b/libs/vkd3d-shader/preproc.l @@ -472,6 +472,29 @@ int yylex(YYSTYPE *lval, YYLTYPE *lloc, yyscan_t scanner) continue; } + if (!strcmp(text, "__FILE__")) + { + const struct preproc_file *file = preproc_get_top_file(ctx); + + /* Not the current file name, but rather the file name + * before invoking any macros. */ + + if (ctx->current_directive) + { + char *string; + + if (!(string = vkd3d_malloc(strlen(file->filename) + 3))) + return 0; + sprintf(string, "\"%s\"", file->filename); + lval->string = string; + return T_STRING; + } + + if (preproc_is_writing(ctx)) + vkd3d_string_buffer_printf(&ctx->buffer, "\"%s\" ", file->filename); + continue; + } + if (!strcmp(text, "__LINE__")) { const struct preproc_file *file = preproc_get_top_file(ctx);