[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