From a1c7132e48b4b98ed47ed30378663cb541f4898f Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Mon, 28 Oct 2024 22:11:47 -0500 Subject: [PATCH 1/2] Add support for trailing return types for c# generation. --- .../Flax.Build/Bindings/BindingsGenerator.Parsing.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Parsing.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Parsing.cs index d99fa8b92..e0fa8572d 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Parsing.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Parsing.cs @@ -831,6 +831,7 @@ namespace Flax.Build.Bindings } // Read return type + // Handle if "auto" later desc.ReturnType = ParseType(ref context); // Read name @@ -841,15 +842,21 @@ namespace Flax.Build.Bindings // Read parameters desc.Parameters.AddRange(ParseFunctionParameters(ref context)); - // Read ';' or 'const' or 'override' or '= 0' or '{' + // Read ';' or 'const' or 'override' or '= 0' or '{' or '-' while (true) { - var token = context.Tokenizer.ExpectAnyTokens(new[] { TokenType.SemiColon, TokenType.LeftCurlyBrace, TokenType.Equal, TokenType.Identifier }); + var token = context.Tokenizer.ExpectAnyTokens(new[] { TokenType.SemiColon, TokenType.LeftCurlyBrace, TokenType.Equal, TokenType.Sub, TokenType.Identifier }); if (token.Type == TokenType.Equal) { context.Tokenizer.SkipUntil(TokenType.SemiColon); break; } + // Support auto FunctionName() -> Type + else if (token.Type == TokenType.Sub && desc.ReturnType.ToString() == "auto") + { + context.Tokenizer.SkipUntil(TokenType.GreaterThan); + desc.ReturnType = ParseType(ref context); + } else if (token.Type == TokenType.Identifier) { switch (token.Value) From 8a31d1b54f27fdcdc279e51bbf6cbb7291a95786 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Mon, 28 Oct 2024 22:15:34 -0500 Subject: [PATCH 2/2] Add test for trailing return. --- Source/Engine/Tests/TestScripting.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/Engine/Tests/TestScripting.h b/Source/Engine/Tests/TestScripting.h index dc05750e1..476060b0b 100644 --- a/Source/Engine/Tests/TestScripting.h +++ b/Source/Engine/Tests/TestScripting.h @@ -172,6 +172,12 @@ public: return str.Length(); } + // Test trailing return type + API_FUNCTION() auto TestTrailingReturn(int32 number) -> float + { + return static_cast(number); + } + int32 TestInterfaceMethod(const String& str) override { return str.Length();