From 3925f4c4677cc06cde4e79cd3c9b23b0d0c3234f Mon Sep 17 00:00:00 2001 From: Vitalii Mikhailov Date: Tue, 25 Feb 2025 00:13:59 +0200 Subject: [PATCH] Added return_value_async --- src/BUTR.NativeAOT.Generator/HeaderBuilder.cs | 4 ++++ .../AllocationException.cs | 5 +++-- src/BUTR.NativeAOT.Shared/Allocator.cs | 2 +- .../BUTR.NativeAOT.Shared.csproj | 2 +- src/BUTR.NativeAOT.Shared/Common.cs | 18 ++++++++++++++++++ 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/BUTR.NativeAOT.Generator/HeaderBuilder.cs b/src/BUTR.NativeAOT.Generator/HeaderBuilder.cs index 09e9195..84f7ccc 100644 --- a/src/BUTR.NativeAOT.Generator/HeaderBuilder.cs +++ b/src/BUTR.NativeAOT.Generator/HeaderBuilder.cs @@ -69,5 +69,9 @@ typedef struct return_value_ptr param_string *const error; param_ptr *const value; } return_value_ptr; + typedef struct return_value_async + { + param_string *const error; + } return_value_async; "; } \ No newline at end of file diff --git a/src/BUTR.NativeAOT.Shared/AllocationException.cs b/src/BUTR.NativeAOT.Shared/AllocationException.cs index 8a8c310..b81241c 100644 --- a/src/BUTR.NativeAOT.Shared/AllocationException.cs +++ b/src/BUTR.NativeAOT.Shared/AllocationException.cs @@ -23,12 +23,13 @@ #endregion #nullable enable -using System.Runtime.CompilerServices; #if !BUTR_NATIVEAOT_ENABLE_WARNING #pragma warning disable #endif -[assembly: InternalsVisibleTo("Bannerlord.VortexExtension.Native")] +#if BUTR_NATIVEAOT_ENABLE_VISIBLETO +[assembly: global::System.Runtime.CompilerServices.InternalsVisibleTo("Bannerlord.VortexExtension.Native")] +#endif namespace BUTR.NativeAOT.Shared { diff --git a/src/BUTR.NativeAOT.Shared/Allocator.cs b/src/BUTR.NativeAOT.Shared/Allocator.cs index 0125a25..ca320e9 100644 --- a/src/BUTR.NativeAOT.Shared/Allocator.cs +++ b/src/BUTR.NativeAOT.Shared/Allocator.cs @@ -23,7 +23,6 @@ #endregion #nullable enable -using System.Runtime.InteropServices; #if !BUTR_NATIVEAOT_ENABLE_WARNING #pragma warning disable #endif @@ -32,6 +31,7 @@ namespace BUTR.NativeAOT.Shared { using global::System; using global::System.Diagnostics; + using global::System.Runtime.InteropServices; public static unsafe class Allocator { diff --git a/src/BUTR.NativeAOT.Shared/BUTR.NativeAOT.Shared.csproj b/src/BUTR.NativeAOT.Shared/BUTR.NativeAOT.Shared.csproj index c3cf511..d446876 100644 --- a/src/BUTR.NativeAOT.Shared/BUTR.NativeAOT.Shared.csproj +++ b/src/BUTR.NativeAOT.Shared/BUTR.NativeAOT.Shared.csproj @@ -7,7 +7,7 @@ true 0 1.0.$(VersionOverride) - $(DefineConstants);BUTR_NATIVEAOT_ENABLE_WARNING;TRACK_ALLOCATIONS; + $(DefineConstants);BUTR_NATIVEAOT_ENABLE_WARNING;TRACK_ALLOCATIONS;BUTR_NATIVEAOT_ENABLE_VISIBLETO; diff --git a/src/BUTR.NativeAOT.Shared/Common.cs b/src/BUTR.NativeAOT.Shared/Common.cs index 811898f..cc68f5e 100644 --- a/src/BUTR.NativeAOT.Shared/Common.cs +++ b/src/BUTR.NativeAOT.Shared/Common.cs @@ -462,6 +462,24 @@ private return_value_ptr(void* value, char* error) Error = error; } } + + [StructLayout(LayoutKind.Sequential)] + public readonly unsafe struct return_value_async : + IReturnValueWithNoValue, + IReturnValueWithError, + IReturnValueWithException + { + public static return_value_async* AsValue(bool isOwner) => Utils.Create(new return_value_async(null), isOwner); + public static return_value_async* AsError(char* error, bool isOwner) => Utils.Create(new return_value_async(error), isOwner); + public static return_value_async* AsException(Exception e, bool isOwner) => Utils.AsException(e, isOwner); + + public readonly char* Error; + + private return_value_async(char* error) + { + Error = error; + } + } } #nullable restore #if !BUTR_NATIVEAOT_ENABLE_WARNING