Merge branch 'Tryibion-handle-bracket-gen'

This commit is contained in:
Wojtek Figat
2024-10-22 23:48:10 +02:00
3 changed files with 58 additions and 1 deletions

View File

@@ -8,6 +8,35 @@
#include "Engine/Scripting/ScriptingObject.h"
#include "Engine/Scripting/SerializableScriptingObject.h"
// Test default values init on fields.
API_STRUCT(NoDefault) struct TestDefaultValues
{
DECLARE_SCRIPTING_TYPE_MINIMAL(TestDefaultValues);
// Default value case 1
API_FIELD() float TestFloat1 = {};
// Default value case 2
API_FIELD() float TestFloat2 = { };
// Default value case 3
API_FIELD() float TestFloat3 = {1.0f};
// Default value case 4
API_FIELD() float TestFloat4 = float{};
// Default value case 5
API_FIELD() float TestFloat5 = float{ };
// Default value case 6
API_FIELD() float TestFloat6 = float{1.0f};
// Default value case 7
API_FIELD() float TestFloat7 {};
// Default value case 8
API_FIELD() float TestFloat8 {1.0f};
// Default value case 9
API_FIELD() float TestFloat9 = 1.0f;
// Default value case 10
API_FIELD() float TestFloat10 = 1.f;
// Default value case 11
API_FIELD() float TestFloat11 = 1;
};
// Test interface (name conflict with namespace)
API_INTERFACE(Namespace="Foo") class FLAXENGINE_API IFoo
{

View File

@@ -153,6 +153,28 @@ namespace Flax.Build.Bindings
case "false": return value;
}
// Handle float{_} style type of default values
if (valueType != null && value.StartsWith($"{valueType.Type}") && value.EndsWith("}"))
{
value = value.Replace($"{valueType.Type}", "").Replace("{", "").Replace("}", "").Trim();
if (string.IsNullOrEmpty(value))
{
value = $"default({valueType.Type})";
return value;
}
}
// Handle C++ bracket default values that are not arrays
if (value.StartsWith("{") && value.EndsWith("}") && valueType != null && !valueType.IsArray && valueType.Type != "Array")
{
value = value.Replace("{", "").Replace("}", "").Trim();
if (string.IsNullOrEmpty(value))
{
value = $"default({valueType.Type})";
return value;
}
}
// Numbers
if (float.TryParse(value, out _) || (value[value.Length - 1] == 'f' && float.TryParse(value.Substring(0, value.Length - 1), out _)))
{

View File

@@ -1352,11 +1352,17 @@ namespace Flax.Build.Bindings
desc.Name = ParseName(ref context);
// Read ';' or default value or array size or bit-field size
token = context.Tokenizer.ExpectAnyTokens(new[] { TokenType.SemiColon, TokenType.Equal, TokenType.LeftBracket, TokenType.Colon });
token = context.Tokenizer.ExpectAnyTokens(new[] { TokenType.SemiColon, TokenType.Equal, TokenType.LeftBracket, TokenType.LeftCurlyBrace, TokenType.Colon });
if (token.Type == TokenType.Equal)
{
context.Tokenizer.SkipUntil(TokenType.SemiColon, out desc.DefaultValue, false);
}
// Handle ex: API_FIELD() Type FieldName {DefaultValue};
else if (token.Type == TokenType.LeftCurlyBrace)
{
context.Tokenizer.SkipUntil(TokenType.SemiColon, out desc.DefaultValue, false);
desc.DefaultValue = '{' + desc.DefaultValue;
}
else if (token.Type == TokenType.LeftBracket)
{
// Read the fixed array length