Signed-off-by: Zebediah Figura zfigura@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))