From 06b2192aa2bb6698c863388c5d085ba5b1f28374 Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Mon, 9 Oct 2017 13:38:33 -0700 Subject: Preprocessor: fix `undef` and redefinition (#204) * Preprocessor: fix `undef` and redefinition The logic for `undef` directives was failing to suppress macro expansion when reading the name to un-define, and so it wasn't actually working at all. We didn't notice this because we didn't have a test case, and users hadn't tried it. The logic for `define` had a similar bug, which meant that any attempt to define an already-defined macro would fail with a cryptic error, rather than raising the intended warning. Test cases have been added for both issues, along with the fixes. * fixup: add expected output for tests added --- source/slang/preprocessor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source/slang/preprocessor.cpp') diff --git a/source/slang/preprocessor.cpp b/source/slang/preprocessor.cpp index fff3c0fd4..533a81521 100644 --- a/source/slang/preprocessor.cpp +++ b/source/slang/preprocessor.cpp @@ -1619,7 +1619,7 @@ static void HandleIncludeDirective(PreprocessorDirectiveContext* context) static void HandleDefineDirective(PreprocessorDirectiveContext* context) { Token nameToken; - if (!Expect(context, TokenType::Identifier, Diagnostics::expectedTokenInPreprocessorDirective, &nameToken)) + if (!ExpectRaw(context, TokenType::Identifier, Diagnostics::expectedTokenInPreprocessorDirective, &nameToken)) return; Name* name = nameToken.getName(); @@ -1701,7 +1701,7 @@ static void HandleDefineDirective(PreprocessorDirectiveContext* context) static void HandleUndefDirective(PreprocessorDirectiveContext* context) { Token nameToken; - if (!Expect(context, TokenType::Identifier, Diagnostics::expectedTokenInPreprocessorDirective, &nameToken)) + if (!ExpectRaw(context, TokenType::Identifier, Diagnostics::expectedTokenInPreprocessorDirective, &nameToken)) return; Name* name = nameToken.getName(); -- cgit v1.2.3