Signed-off-by: Zebediah Figura <zfigura(a)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, ¯o->entry); + preproc_free_macro(macro); + } + vkd3d_free($2); + } | T_IF expr T_NEWLINE { if (!preproc_push_if(ctx, !!$2)) -- 2.30.0