From 9ffeb8031be79189742c5e7d936017b4e02f9936 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 2 Jan 2023 21:45:51 +0100 Subject: [PATCH 1/2] Fix tests regression --- Source/Engine/Tests/TestLevel.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/Engine/Tests/TestLevel.cpp b/Source/Engine/Tests/TestLevel.cpp index 0ed90ce45..671d60c50 100644 --- a/Source/Engine/Tests/TestLevel.cpp +++ b/Source/Engine/Tests/TestLevel.cpp @@ -33,11 +33,11 @@ TEST_CASE("Tags") auto b = Tags::Get(TEXT("B")); auto b1 = Tags::Get(TEXT("B.1")); auto c = Tags::Get(TEXT("C")); - CHECK(a.Index == 0); - CHECK(a1.Index == 1); - CHECK(b.Index == 2); - CHECK(b1.Index == 3); - CHECK(c.Index == 4); + CHECK(a.Index == 1); + CHECK(a1.Index == 2); + CHECK(b.Index == 3); + CHECK(b1.Index == 4); + CHECK(c.Index == 5); Tags::List = prevTags; } From b4faa128b74f69b30294aae0a18d86974eeb914e Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 2 Jan 2023 22:04:14 +0100 Subject: [PATCH 2/2] Fix case when Variant wrappers overlap with the name --- .../Bindings/BindingsGenerator.Cpp.cs | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs index 1bcfc7ff5..083c892e6 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.Cpp.cs @@ -25,7 +25,7 @@ namespace Flax.Build.Bindings public static readonly HashSet CppIncludeFiles = new HashSet(); private static readonly List CppIncludeFilesList = new List(); private static readonly HashSet CppVariantToTypes = new HashSet(); - private static readonly HashSet CppVariantFromTypes = new HashSet(); + private static readonly Dictionary CppVariantFromTypes = new Dictionary(); private static bool CppNonPodTypesConvertingGeneration = false; public class ScriptingLangInfo @@ -156,18 +156,21 @@ namespace Flax.Build.Bindings return $"Variant({value}.Get())"; if (typeInfo.IsArray) { - CppVariantFromTypes.Add(typeInfo); + var wrapperName = GenerateCppWrapperNativeToVariantMethodName(typeInfo); + CppVariantFromTypes[wrapperName] = typeInfo; return $"VariantFrom{GenerateCppWrapperNativeToVariantMethodName(typeInfo)}Array({value}, {typeInfo.ArraySize})"; } if (typeInfo.Type == "Array" && typeInfo.GenericArgs != null) { - CppVariantFromTypes.Add(typeInfo); - return $"VariantFrom{GenerateCppWrapperNativeToVariantMethodName(typeInfo.GenericArgs[0])}Array({value}.Get(), {value}.Count())"; + var wrapperName = GenerateCppWrapperNativeToVariantMethodName(typeInfo.GenericArgs[0]); + CppVariantFromTypes[wrapperName] = typeInfo; + return $"VariantFrom{wrapperName}Array({value}.Get(), {value}.Count())"; } if (typeInfo.Type == "Dictionary" && typeInfo.GenericArgs != null) { - CppVariantFromTypes.Add(typeInfo); - return $"VariantFrom{GenerateCppWrapperNativeToVariantMethodName(typeInfo.GenericArgs[0])}{GenerateCppWrapperNativeToVariantMethodName(typeInfo.GenericArgs[1])}Dictionary({value})"; + var wrapperName = GenerateCppWrapperNativeToVariantMethodName(typeInfo.GenericArgs[0]) + GenerateCppWrapperNativeToVariantMethodName(typeInfo.GenericArgs[1]); + CppVariantFromTypes[wrapperName] = typeInfo; + return $"VariantFrom{wrapperName}Dictionary({value})"; } var apiType = FindApiTypeInfo(buildData, typeInfo, caller); @@ -2375,15 +2378,17 @@ namespace Flax.Build.Bindings header.Append('}').AppendLine(); header.AppendLine("}"); } - foreach (var typeInfo in CppVariantFromTypes) + foreach (var e in CppVariantFromTypes) { + var wrapperName = e.Key; + var typeInfo = e.Value; header.AppendLine(); header.AppendLine("namespace {"); header.Append("Variant VariantFrom"); if (typeInfo.IsArray) { typeInfo.IsArray = false; - header.Append($"{GenerateCppWrapperNativeToVariantMethodName(typeInfo)}Array({(typeInfo.IsConst ? "const " : "")}{typeInfo}* v, const int32 length)").AppendLine(); + header.Append($"{wrapperName}Array(const {typeInfo}* v, const int32 length)").AppendLine(); header.Append('{').AppendLine(); header.Append(" Variant result;").AppendLine(); header.Append(" result.SetType(VariantType(VariantType::Array));").AppendLine(); @@ -2396,7 +2401,7 @@ namespace Flax.Build.Bindings else if (typeInfo.Type == "Array" && typeInfo.GenericArgs != null) { var valueType = typeInfo.GenericArgs[0]; - header.Append($"{GenerateCppWrapperNativeToVariantMethodName(valueType)}Array({(typeInfo.IsConst ? "const " : "")}{valueType}* v, const int32 length)").AppendLine(); + header.Append($"{wrapperName}Array(const {valueType}* v, const int32 length)").AppendLine(); header.Append('{').AppendLine(); header.Append(" Variant result;").AppendLine(); header.Append(" result.SetType(VariantType(VariantType::Array));").AppendLine(); @@ -2409,7 +2414,7 @@ namespace Flax.Build.Bindings { var keyType = typeInfo.GenericArgs[0]; var valueType = typeInfo.GenericArgs[1]; - header.Append($"{GenerateCppWrapperNativeToVariantMethodName(keyType)}{GenerateCppWrapperNativeToVariantMethodName(valueType)}Dictionary(const Dictionary<{keyType}, {valueType}>& v)").AppendLine(); + header.Append($"{wrapperName}Dictionary(const Dictionary<{keyType}, {valueType}>& v)").AppendLine(); header.Append('{').AppendLine(); header.Append(" Variant result;").AppendLine(); header.Append(" result.SetType(VariantType(VariantType::Dictionary));").AppendLine();