From 9dbcbba5d93a2c6e3b9f753d7cd35ebcbd51041d Mon Sep 17 00:00:00 2001 From: TechPizza <23627133+TechnologicalPizza@users.noreply.github.com> Date: Tue, 12 Dec 2023 21:51:43 +0100 Subject: [PATCH] Recognize LLU and LU integer suffixes --- .../PInvokeGenerator.VisitStmt.cs | 29 ++++++++++++------- .../Base/VarDeclarationTest.cs | 1 + 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.VisitStmt.cs b/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.VisitStmt.cs index 7c8ee972..6fcf3d0e 100644 --- a/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.VisitStmt.cs +++ b/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.VisitStmt.cs @@ -1703,11 +1703,7 @@ private void VisitIntegerLiteral(IntegerLiteral integerLiteral) { var valueString = integerLiteral.ValueString; - if (valueString.EndsWith('l') || valueString.EndsWith('L')) - { - valueString = valueString[0..^1]; - } - else if (valueString.EndsWith("ui8", StringComparison.OrdinalIgnoreCase)) + if (valueString.EndsWith("ui8", StringComparison.OrdinalIgnoreCase)) { valueString = valueString[0..^3]; } @@ -1731,20 +1727,31 @@ private void VisitIntegerLiteral(IntegerLiteral integerLiteral) { valueString = valueString[0..^3] + "L"; } - - if (valueString.EndsWith("ul", StringComparison.OrdinalIgnoreCase)) + else if ( + valueString.EndsWith("ull", StringComparison.OrdinalIgnoreCase) || + valueString.EndsWith("llu", StringComparison.OrdinalIgnoreCase)) { - valueString = valueString[0..^2] + "UL"; + valueString = valueString[0..^3] + "UL"; } - else if (valueString.EndsWith('l') || valueString.EndsWith('L')) + else if (valueString.EndsWith("ll", StringComparison.OrdinalIgnoreCase)) + { + valueString = valueString[0..^2] + "L"; + } + else if ( + valueString.EndsWith("ul", StringComparison.OrdinalIgnoreCase) || + valueString.EndsWith("lu", StringComparison.OrdinalIgnoreCase)) { - valueString = valueString[0..^1] + "L"; + valueString = valueString[0..^2] + "U"; } else if (valueString.EndsWith('u') || valueString.EndsWith('U')) { valueString = valueString[0..^1] + "U"; } - + else if (valueString.EndsWith('l') || valueString.EndsWith('L')) + { + valueString = valueString[0..^1]; + } + var outputBuilder = StartCSharpCode(); outputBuilder.Write(valueString); StopCSharpCode(); diff --git a/tests/ClangSharp.PInvokeGenerator.UnitTests/Base/VarDeclarationTest.cs b/tests/ClangSharp.PInvokeGenerator.UnitTests/Base/VarDeclarationTest.cs index 13137540..864cd583 100644 --- a/tests/ClangSharp.PInvokeGenerator.UnitTests/Base/VarDeclarationTest.cs +++ b/tests/ClangSharp.PInvokeGenerator.UnitTests/Base/VarDeclarationTest.cs @@ -31,6 +31,7 @@ public abstract class VarDeclarationTest : PInvokeGeneratorTest [TestCase("0U", "uint", "0U")] [TestCase("0LL", "long", "0L")] [TestCase("0ULL", "ulong", "0UL")] + [TestCase("0LLU", "ulong", "0UL")] [TestCase("0.0", "double", "0.0")] [TestCase("0.f", "float", "0.0f")] public Task MacroTest(string nativeValue, string expectedManagedType, string expectedManagedValue) => MacroTestImpl(nativeValue, expectedManagedType, expectedManagedValue);