[PATCH vkd3d v2 5/5] vkd3d-shader: Implement #undef.

Zebediah Figura zfigura at codeweavers.com
Thu Jan 7 11:48:10 CST 2021


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 libs/vkd3d-shader/preproc.l |  3 +++
 libs/vkd3d-shader/preproc.y | 13 +++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/libs/vkd3d-shader/preproc.l b/libs/vkd3d-shader/preproc.l
index ad006faf..476c1e59 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);
@@ -257,6 +259,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 fd5d0118..53ce3e57 100644
--- a/libs/vkd3d-shader/preproc.y
+++ b/libs/vkd3d-shader/preproc.y
@@ -282,6 +282,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
@@ -313,6 +314,18 @@ 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));
+                rb_remove(&ctx->macros, &macro->entry);
+                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