diff --git a/src/Generator.Tests/AST/TestAST.cs b/src/Generator.Tests/AST/TestAST.cs index bfa7504a..b31cb640 100644 --- a/src/Generator.Tests/AST/TestAST.cs +++ b/src/Generator.Tests/AST/TestAST.cs @@ -347,7 +347,7 @@ namespace CppSharp.Generator.Tests.AST public void TestSignature() { Assert.AreEqual("void testSignature()", AstContext.FindFunction("testSignature").Single().Signature); - Assert.AreEqual("void testImpl(){}", + Assert.AreEqual("void testImpl()", StripWindowsNewLines(AstContext.FindFunction("testImpl").Single().Signature)); Assert.AreEqual("void testConstSignature() const", AstContext.FindClass("HasConstFunction").Single().FindMethod("testConstSignature").Signature); diff --git a/src/Parser/ASTConverter.cs b/src/Parser/ASTConverter.cs index a3b8d329..e700423c 100644 --- a/src/Parser/ASTConverter.cs +++ b/src/Parser/ASTConverter.cs @@ -1212,6 +1212,17 @@ namespace CppSharp return expression; } + public static string CleanSignature(string signature) + { + // Sometimes the parser might return multiline signatures, including the function body. + // It should be dealt with in the native parser eventually, but fix it up here for now. + var bracket = signature.IndexOf("{", StringComparison.Ordinal); + if (bracket != -1) + signature = signature.Substring(0, bracket); + signature = signature.Replace("\n", "").Trim(); + return signature; + } + public void VisitFunction(Function function, AST.Function _function) { VisitDeclaration(function, _function); @@ -1229,7 +1240,7 @@ namespace CppSharp _function.FriendKind = VisitFriendKind(function.FriendKind); _function.OperatorKind = VisitCXXOperatorKind(function.OperatorKind); _function.Mangled = function.Mangled; - _function.Signature = function.Signature; + _function.Signature = CleanSignature(function.Signature); _function.Body = function.Body; _function.CallingConvention = VisitCallingConvention(function.CallingConvention); if (function.InstantiatedFrom != null)