[PATCH vkd3d 5/5] vkd3d-shader: Implement #undef.
Zebediah Figura
zfigura at codeweavers.com
Tue Jan 5 10:18:57 CST 2021
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
libs/vkd3d-shader/preproc.l | 3 +++
libs/vkd3d-shader/preproc.y | 12 ++++++++++++
2 files changed, 15 insertions(+)
diff --git a/libs/vkd3d-shader/preproc.l b/libs/vkd3d-shader/preproc.l
index 958f4994..2654ad62 100644
--- a/libs/vkd3d-shader/preproc.l
+++ b/libs/vkd3d-shader/preproc.l
@@ -126,6 +126,8 @@ IDENTIFIER [A-Za-z_][A-Za-z0-9_]*
return T_IFDEF;
if (!strcmp(p, "ifndef"))
return T_IFNDEF;
+ if (!strcmp(p, "undef"))
+ return T_UNDEF;
preproc_warning(ctx, yyget_lloc(yyscanner), VKD3D_SHADER_WARNING_PP_UNKNOWN_DIRECTIVE,
"Ignoring unknown directive \"%s\".", yytext);
@@ -261,6 +263,7 @@ int yylex(YYSTYPE *lval, YYLTYPE *lloc, yyscan_t scanner)
case T_IFDEF:
case T_IFNDEF:
case T_INCLUDE:
+ case T_UNDEF:
ctx->current_directive = token;
break;
diff --git a/libs/vkd3d-shader/preproc.y b/libs/vkd3d-shader/preproc.y
index 7c12eb5c..49ba80b4 100644
--- a/libs/vkd3d-shader/preproc.y
+++ b/libs/vkd3d-shader/preproc.y
@@ -283,6 +283,7 @@ static const void *get_parent_data(struct preproc_ctx *ctx)
%token T_IFDEF "#ifdef"
%token T_IFNDEF "#ifndef"
%token T_INCLUDE "#include"
+%token T_UNDEF "#undef"
%type <integer> expr
%type <string> body_token
@@ -314,6 +315,17 @@ directive
if (!preproc_add_macro(ctx, &@$, $2))
YYABORT;
}
+ | T_UNDEF T_IDENTIFIER T_NEWLINE
+ {
+ struct preproc_macro *macro;
+
+ if ((macro = preproc_find_macro(ctx, $2)))
+ {
+ TRACE("Removing macro definition %s.\n", debugstr_a($2));
+ preproc_free_macro(macro);
+ }
+ vkd3d_free($2);
+ }
| T_IF expr T_NEWLINE
{
if (!preproc_push_if(ctx, !!$2))
--
2.30.0
More information about the wine-devel
mailing list