Skip to content

Commit d20b92a

Browse files
committed
Small refactor lambda
1 parent 67f3d0a commit d20b92a

File tree

1 file changed

+22
-32
lines changed

1 file changed

+22
-32
lines changed

managed/Plugify/NativeInterop.cs

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -700,139 +700,135 @@ private static Func<object[], object> ExternalInvoke(nint funcAddress, MethodInf
700700
{
701701
ManagedType returnType = new ManagedType(methodInfo.ReturnType, methodInfo.ReturnTypeCustomAttributes.GetCustomAttributes(typeof(MarshalAsAttribute), false));
702702
ManagedType[] parameterTypes = methodInfo.GetParameters().Select(p => new ManagedType(p.ParameterType, p.GetCustomAttributes(typeof(MarshalAsAttribute), false))).ToArray();
703+
704+
bool hasRet = returnType.ValueType is >= ValueType.String and <= ValueType.ArrayString;
705+
bool hasRefs = parameterTypes.Any(t => t.IsByRef);
703706

704707
return parameters =>
705708
{
706709
lock (vm)
707710
{
708711
vm.Reset();
709712

710-
bool hasRet = true;
711-
bool hasRefs = false;
712-
713713
// Store parameters
714714

715715
List<(nint, ValueType)> handlers = [];
716716

717-
ValueType type = returnType.ValueType;
718-
switch (type)
717+
ValueType retType = returnType.ValueType;
718+
switch (retType)
719719
{
720720
case ValueType.String:
721721
{
722722
nint ptr = NativeMethods.AllocateString();
723-
handlers.Add((ptr, type));
723+
handlers.Add((ptr, retType));
724724
vm.ArgPointer(ptr);
725725
break;
726726
}
727727
case ValueType.ArrayBool:
728728
{
729729
nint ptr = NativeMethods.AllocateVectorBool();
730-
handlers.Add((ptr, type));
730+
handlers.Add((ptr, retType));
731731
vm.ArgPointer(ptr);
732732
break;
733733
}
734734
case ValueType.ArrayChar8:
735735
{
736736
nint ptr = NativeMethods.AllocateVectorChar8();
737-
handlers.Add((ptr, type));
737+
handlers.Add((ptr, retType));
738738
vm.ArgPointer(ptr);
739739
break;
740740
}
741741
case ValueType.ArrayChar16:
742742
{
743743
nint ptr = NativeMethods.AllocateVectorChar16();
744-
handlers.Add((ptr, type));
744+
handlers.Add((ptr, retType));
745745
vm.ArgPointer(ptr);
746746
break;
747747
}
748748
case ValueType.ArrayInt8:
749749
{
750750
nint ptr = NativeMethods.AllocateVectorInt8();
751-
handlers.Add((ptr, type));
751+
handlers.Add((ptr, retType));
752752
vm.ArgPointer(ptr);
753753
break;
754754
}
755755
case ValueType.ArrayInt16:
756756
{
757757
nint ptr = NativeMethods.AllocateVectorInt16();
758-
handlers.Add((ptr, type));
758+
handlers.Add((ptr, retType));
759759
vm.ArgPointer(ptr);
760760
break;
761761
}
762762
case ValueType.ArrayInt32:
763763
{
764764
nint ptr = NativeMethods.AllocateVectorInt32();
765-
handlers.Add((ptr, type));
765+
handlers.Add((ptr, retType));
766766
vm.ArgPointer(ptr);
767767
break;
768768
}
769769
case ValueType.ArrayInt64:
770770
{
771771
nint ptr = NativeMethods.AllocateVectorInt64();
772-
handlers.Add((ptr, type));
772+
handlers.Add((ptr, retType));
773773
vm.ArgPointer(ptr);
774774
break;
775775
}
776776
case ValueType.ArrayUInt8:
777777
{
778778
nint ptr = NativeMethods.AllocateVectorUInt8();
779-
handlers.Add((ptr, type));
779+
handlers.Add((ptr, retType));
780780
vm.ArgPointer(ptr);
781781
break;
782782
}
783783
case ValueType.ArrayUInt16:
784784
{
785785
nint ptr = NativeMethods.AllocateVectorUInt16();
786-
handlers.Add((ptr, type));
786+
handlers.Add((ptr, retType));
787787
vm.ArgPointer(ptr);
788788
break;
789789
}
790790
case ValueType.ArrayUInt32:
791791
{
792792
nint ptr = NativeMethods.AllocateVectorUInt32();
793-
handlers.Add((ptr, type));
793+
handlers.Add((ptr, retType));
794794
vm.ArgPointer(ptr);
795795
break;
796796
}
797797
case ValueType.ArrayUInt64:
798798
{
799799
nint ptr = NativeMethods.AllocateVectorUInt64();
800-
handlers.Add((ptr, type));
800+
handlers.Add((ptr, retType));
801801
vm.ArgPointer(ptr);
802802
break;
803803
}
804804
case ValueType.ArrayPointer:
805805
{
806806
nint ptr = NativeMethods.AllocateVectorIntPtr();
807-
handlers.Add((ptr, type));
807+
handlers.Add((ptr, retType));
808808
vm.ArgPointer(ptr);
809809
break;
810810
}
811811
case ValueType.ArrayFloat:
812812
{
813813
nint ptr = NativeMethods.AllocateVectorFloat();
814-
handlers.Add((ptr, type));
814+
handlers.Add((ptr, retType));
815815
vm.ArgPointer(ptr);
816816
break;
817817
}
818818
case ValueType.ArrayDouble:
819819
{
820820
nint ptr = NativeMethods.AllocateVectorDouble();
821-
handlers.Add((ptr, type));
821+
handlers.Add((ptr, retType));
822822
vm.ArgPointer(ptr);
823823
break;
824824
}
825825
case ValueType.ArrayString:
826826
{
827827
nint ptr = NativeMethods.AllocateVectorString();
828-
handlers.Add((ptr, type));
828+
handlers.Add((ptr, retType));
829829
vm.ArgPointer(ptr);
830830
break;
831831
}
832-
default:
833-
// Should not require storage
834-
hasRet = false;
835-
break;
836832
}
837833

838834
List<GCHandle> pins = [];
@@ -847,7 +843,6 @@ private static Func<object[], object> ExternalInvoke(nint funcAddress, MethodInf
847843
{
848844
switch (valueType)
849845
{
850-
case ValueType.Invalid:
851846
case ValueType.Void:
852847
break;
853848
case ValueType.Bool:
@@ -1039,14 +1034,11 @@ private static Func<object[], object> ExternalInvoke(nint funcAddress, MethodInf
10391034
default:
10401035
throw new ArgumentOutOfRangeException();
10411036
}
1042-
1043-
hasRefs = true;
10441037
}
10451038
else
10461039
{
10471040
switch (valueType)
10481041
{
1049-
case ValueType.Invalid:
10501042
case ValueType.Void:
10511043
break;
10521044
case ValueType.Bool:
@@ -1243,10 +1235,8 @@ private static Func<object[], object> ExternalInvoke(nint funcAddress, MethodInf
12431235

12441236
object? ret = null;
12451237

1246-
switch (type)
1238+
switch (retType)
12471239
{
1248-
case ValueType.Invalid:
1249-
break;
12501240
case ValueType.Void:
12511241
vm.CallVoid(funcAddress);
12521242
break;

0 commit comments

Comments
 (0)