From 00443ef39d5418f3c744654c0d3d4036c2a81634 Mon Sep 17 00:00:00 2001 From: Jackson Dunstan Date: Sun, 21 Feb 2021 17:15:26 -0800 Subject: [PATCH 1/4] Don't use "= default" on the System.Object destructor so its "noexcept" matches derived classes --- Unity/Assets/CppSource/NativeScript/Bindings.cpp | 4 ++++ Unity/Assets/CppSource/NativeScript/Bindings.h | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Unity/Assets/CppSource/NativeScript/Bindings.cpp b/Unity/Assets/CppSource/NativeScript/Bindings.cpp index cd62a88..8cb2e2e 100644 --- a/Unity/Assets/CppSource/NativeScript/Bindings.cpp +++ b/Unity/Assets/CppSource/NativeScript/Bindings.cpp @@ -966,6 +966,10 @@ namespace System : ManagedType(nullptr) { } + + Object::~Object() + { + } bool Object::operator==(decltype(nullptr)) const { diff --git a/Unity/Assets/CppSource/NativeScript/Bindings.h b/Unity/Assets/CppSource/NativeScript/Bindings.h index 093dc3b..4da12a4 100644 --- a/Unity/Assets/CppSource/NativeScript/Bindings.h +++ b/Unity/Assets/CppSource/NativeScript/Bindings.h @@ -585,7 +585,7 @@ namespace System Object(); Object(Plugin::InternalUse iu, int32_t handle); Object(decltype(nullptr)); - virtual ~Object() = default; + virtual ~Object(); bool operator==(decltype(nullptr)) const; bool operator!=(decltype(nullptr)) const; virtual void ThrowReferenceToThis(); From e8c9b6b414e9ee406596f9428fe2b1d5d6aeb439 Mon Sep 17 00:00:00 2001 From: philipcass <244523+philipcass@users.noreply.github.com> Date: Mon, 22 Feb 2021 15:36:28 +0000 Subject: [PATCH 2/4] Fix for standalone builds defaulting to int parameters There was a mis-match in how types were specified in editor/build delegates. Changed so they both now use the same switch statement --- .../NativeScript/Editor/GenerateBindings.cs | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/Unity/Assets/NativeScript/Editor/GenerateBindings.cs b/Unity/Assets/NativeScript/Editor/GenerateBindings.cs index 29fe4c7..3b1bc12 100644 --- a/Unity/Assets/NativeScript/Editor/GenerateBindings.cs +++ b/Unity/Assets/NativeScript/Editor/GenerateBindings.cs @@ -10573,18 +10573,21 @@ StringBuilder output for (int i = 0; i < parameters.Length; ++i) { ParameterInfo param = parameters[i]; - if (param.Kind == TypeKind.FullStruct) - { - AppendCsharpTypeFullName( - param.ParameterType, - output); - output.Append(" param"); - output.Append(i); - } - else + switch (param.Kind) { - output.Append("int param"); - output.Append(i); + case TypeKind.FullStruct: + case TypeKind.Primitive: + case TypeKind.Enum: + AppendCsharpTypeFullName( + param.ParameterType, + output); + output.Append(" param"); + output.Append(i); + break; + default: + output.Append("int param"); + output.Append(i); + break; } if (i != parameters.Length-1) { @@ -13639,4 +13642,4 @@ static string InjectIntoString( } } } -} \ No newline at end of file +} From c53adea79b78cdd6ba5fc5505f66eddab73596ea Mon Sep 17 00:00:00 2001 From: philipcass <244523+philipcass@users.noreply.github.com> Date: Mon, 1 Mar 2021 14:14:11 +0000 Subject: [PATCH 3/4] Fix CPP event accessors Added hacky fix to resolve event accessors both adding delegates --- Unity/Assets/NativeScript/Editor/GenerateBindings.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Unity/Assets/NativeScript/Editor/GenerateBindings.cs b/Unity/Assets/NativeScript/Editor/GenerateBindings.cs index 3b1bc12..61af988 100644 --- a/Unity/Assets/NativeScript/Editor/GenerateBindings.cs +++ b/Unity/Assets/NativeScript/Editor/GenerateBindings.cs @@ -3427,7 +3427,15 @@ static void AppendEventAddRemoveMethod( builders.CsharpFunctions); builders.CsharpFunctions.Append('.'); builders.CsharpFunctions.Append(eventName); - builders.CsharpFunctions.Append(" += del;"); + // TODO: More safely differenciate between add/removing event delegates + if (funcName.Contains("RemoveEvent")) + { + builders.CsharpFunctions.Append(" -= del;"); + } + else + { + builders.CsharpFunctions.Append(" += del;"); + } AppendCsharpFunctionEnd( typeof(void), null, From 2eb88245bec25c36fa83716f9016bd056cc33dff Mon Sep 17 00:00:00 2001 From: philipcass <244523+philipcass@users.noreply.github.com> Date: Mon, 1 Mar 2021 14:20:36 +0000 Subject: [PATCH 4/4] Set abstract base method declarations as virtual The codegen would set all abstract base methods to be non-virtual, this allows derived classes to cleanly override abstract function implementations --- Unity/Assets/NativeScript/Editor/GenerateBindings.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Unity/Assets/NativeScript/Editor/GenerateBindings.cs b/Unity/Assets/NativeScript/Editor/GenerateBindings.cs index 3b1bc12..f927d2e 100644 --- a/Unity/Assets/NativeScript/Editor/GenerateBindings.cs +++ b/Unity/Assets/NativeScript/Editor/GenerateBindings.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using System.Collections.Generic; using System.IO; @@ -4155,7 +4155,8 @@ static void AppendMethod( AppendCppMethodDeclaration( cppMethodName, enclosingTypeIsStatic, - false, + // Mark as virtual if method/class is not static or generic + cppMethodIsStatic || enclosingTypeIsStatic || methodTypeParams != null? false : true, cppMethodIsStatic, cppReturnType, methodTypeParams,