From e2549a4b5be22e551989e20bbbba25750c17f9e3 Mon Sep 17 00:00:00 2001 From: throwaway96 <68320646+throwaway96@users.noreply.github.com> Date: Wed, 1 Nov 2023 12:49:31 -0400 Subject: [PATCH] CParser: Define __REKO_DECOMPILER__ macro The macro is currently defined to 1. --- src/Core/Hll/C/CDirectiveLexer.cs | 5 ++++- .../Core/Hll/C/CDirectiveLexerTests.cs | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/Core/Hll/C/CDirectiveLexer.cs b/src/Core/Hll/C/CDirectiveLexer.cs index a299f1a93d..94830f1a64 100644 --- a/src/Core/Hll/C/CDirectiveLexer.cs +++ b/src/Core/Hll/C/CDirectiveLexer.cs @@ -61,7 +61,10 @@ public CDirectiveLexer(ParserState state, CLexer lexer) { this.parserState = state; this.lexer = lexer; - this.macros = new(); + this.macros = new() + { + { "__REKO_DECOMPILER__", new () { new CToken(CTokenType.NumericLiteral, 1) } } + }; this.state = State.StartLine; this.ifdefs = new Stack<(bool, bool)>(); this.expandedTokens = new(); diff --git a/src/UnitTests/Core/Hll/C/CDirectiveLexerTests.cs b/src/UnitTests/Core/Hll/C/CDirectiveLexerTests.cs index 4e9c97afce..3c7cbbe907 100644 --- a/src/UnitTests/Core/Hll/C/CDirectiveLexerTests.cs +++ b/src/UnitTests/Core/Hll/C/CDirectiveLexerTests.cs @@ -416,5 +416,25 @@ public void CDirectiveLexer_nested_defines() Assert.AreEqual(CTokenType.RParen, lexer.Read().Type); Assert.AreEqual(CTokenType.EOF, lexer.Read().Type); } + + [Test] + public void CDirectiveLexer_reko_macro() + { + Lex( + "#ifdef __REKO_DECOMPILER__\r\n" + + "# define result1 good1\r\n" + + "#else\r\n" + + "# define result1 bad1\r\n" + + "#endif\r\n" + + "#ifndef __REKO_DECOMPILER__\r\n" + + "# define result2 bad2\r\n" + + "#else\r\n" + + "# define result2 good2\r\n" + + "#endif\r\n" + + "result1 result2"); + Assert.AreEqual("good1", lexer.Read().Value); + Assert.AreEqual("good2", lexer.Read().Value); + Assert.AreEqual(CTokenType.EOF, lexer.Read().Type); + } } }