Преглед изворни кода

Improve Half interop handling (#2121)

Marko Lahma пре 1 месец
родитељ
комит
981dfbe62b

+ 6 - 1
Jint.Tests/Runtime/TypedArrayInteropTests.cs

@@ -1,3 +1,5 @@
+using Jint.Native;
+
 namespace Jint.Tests.Runtime;
 
 public class TypedArrayInteropTests
@@ -133,6 +135,9 @@ public class TypedArrayInteropTests
             var fromEngine = engine.GetValue("testSubject");
             Assert.True(fromEngine.IsFloat16Array());
             Assert.Equal(source, fromEngine.AsFloat16Array());
+
+            engine.SetValue("testFunc", new Func<JsTypedArray, JsTypedArray>(v => v));
+            Assert.Equal(source, engine.Evaluate("testFunc(testSubject)").AsFloat16Array());
         }
 #endif
 
@@ -179,4 +184,4 @@ public class TypedArrayInteropTests
         Assert.Equal(42, engine.Evaluate("testSubject[0]").AsBigInt());
         Assert.Equal(12, engine.Evaluate("testSubject[1]").AsBigInt());
     }
-}
+}

+ 3 - 0
Jint/Native/Object/ObjectInstance.cs

@@ -1048,6 +1048,9 @@ public partial class ObjectInstance : JsValue, IEquatable<ObjectInstance>
                         TypedArrayElementType.Int16 => typedArrayInstance.ToNativeArray<short>(),
                         TypedArrayElementType.Int32 => typedArrayInstance.ToNativeArray<int>(),
                         TypedArrayElementType.BigInt64 => typedArrayInstance.ToNativeArray<long>(),
+#if SUPPORTS_HALF
+                        TypedArrayElementType.Float16 => typedArrayInstance.ToNativeArray<Half>(),
+#endif
                         TypedArrayElementType.Float32 => typedArrayInstance.ToNativeArray<float>(),
                         TypedArrayElementType.Float64 => typedArrayInstance.ToNativeArray<double>(),
                         TypedArrayElementType.Uint8 => typedArrayInstance.ToNativeArray<byte>(),

+ 1 - 1
Jint/Runtime/Interop/DelegateWrapper.cs

@@ -70,7 +70,7 @@ internal sealed class DelegateWrapper : Function
             var value = arguments[i];
             object? converted;
 
-            if (parameterType == typeof(JsValue))
+            if (typeof(JsValue).IsAssignableFrom(parameterType))
             {
                 converted = value;
             }