@@ -527,12 +527,11 @@ public class JSValue {
527527
528528 let pointerSize : Int32 = com. sun. jna. Native. POINTER_SIZE
529529 let size = Int64 ( arguments. count * pointerSize)
530- let argptr = arguments. count == 0 ? nil : com. sun. jna. Memory ( size)
531- // defer { argptr ?.clear(size) }
530+ let args = arguments. count == 0 ? nil : com. sun. jna. Memory ( size)
531+ defer { args ? . clear ( size) }
532532 for i in ( 0 ..< arguments. count) {
533- argptr ? . setPointer ( i. toLong ( ) * pointerSize, arguments [ i] . value)
533+ args! . setPointer ( i. toLong ( ) * pointerSize, arguments [ i] . value)
534534 }
535- let args = com. sun. jna. ptr. PointerByReference ( argptr)
536535 #endif
537536
538537 let ctx = self . context
@@ -706,6 +705,15 @@ extension JSValue {
706705// }
707706}
708707
708+ #if SKIP
709+ // workaround for inability to implement this as a convenience constructor due to needing local variables: In Kotlin, delegating calls to 'self' or 'super' constructors can not use local variables other than the parameters passed to this constructor
710+ public func JSValue( string value: String , in context: JSContext ) -> JSValue {
711+ let str = JavaScriptCore . JSStringCreateWithUTF8CString ( value)
712+ defer { JavaScriptCore . JSStringRelease ( str) }
713+ return JSValue ( jsValueRef: JavaScriptCore . JSValueMakeString ( context. context, str) , in: context)
714+ }
715+ #endif
716+
709717
710718public struct JSCError : Error {
711719 let errorDescription : String
@@ -876,7 +884,7 @@ private final class JSFunctionCallbackImpl : JSCallbackFunction {
876884 init ( ) {
877885 }
878886
879- public func JSFunctionCallback ( _ jsc: JSContextRef ? , _ object: JSObjectRef ? , _ this: JSObjectRef ? , _ argumentCount: Int , _ arguments: UnsafePointer < JSValueRef ? > ? , _ exception: UnsafeMutablePointer < JSValueRef ? > ? ) -> JSValueRef ? {
887+ public func callback ( _ jsc: JSContextRef ? , _ object: JSObjectRef ? , _ this: JSObjectRef ? , _ argumentCount: Int , _ arguments: UnsafePointer < JSValueRef ? > ? , _ exception: UnsafeMutablePointer < JSValueRef ? > ? ) -> JSValueRef ? {
880888 guard let object = object,
881889 let data = JavaScriptCore . JSObjectGetPrivate ( object) else {
882890 preconditionFailure ( " SkipScript: unable to find private object data for \( object) " )
@@ -890,9 +898,9 @@ private final class JSFunctionCallbackImpl : JSCallbackFunction {
890898 return nil
891899 }
892900
893- // let argptrs = argumentCount == 0 ? nil : arguments?.value. getPointerArray(0, argumentCount) // Crashes
894- let args = ( 0 ..< argumentCount) . map {
895- JSValue ( jsValueRef: arguments! . getPointer ( 0 ) . getPointer ( Int64 ( $0 * com . sun . jna . Native . POINTER_SIZE ) ) , in: context)
901+ let argptrs = argumentCount == 0 ? nil : arguments! . getPointerArray ( 0 , argumentCount)
902+ let args : [ JSValue ] = ( 0 ..< argumentCount) . map {
903+ JSValue ( jsValueRef: argptrs! [ $0 ] , in: context)
896904 }
897905 let this = this. map { JSValue ( jsValueRef: $0, in: context) }
898906 let value : JSValue = callback ( context, this, args)
@@ -919,7 +927,7 @@ private final class JSFunctionFinalizeImpl : JSCallbackFunction {
919927 init ( ) {
920928 }
921929
922- public func JSFunctionFinalize ( _ object: JSObjectRef ? ) -> Void {
930+ public func callback ( _ object: JSObjectRef ? ) -> Void {
923931 guard let object = object,
924932 let data = JavaScriptCore . JSObjectGetPrivate ( object) else {
925933 preconditionFailure ( " SkipScript: unable to find private object data for \( object) " )
@@ -957,7 +965,7 @@ private final class JSFunctionInstanceOfImpl : JSCallbackFunction {
957965 init ( ) {
958966 }
959967
960- public func JSFunctionInstanceOf ( _ jsc: JSContextRef ? , _ constructor: JSObjectRef ? , _ possibleInstance: JSValueRef ? , _ exception: UnsafeMutablePointer < JSValueRef ? > ? ) -> Bool {
968+ public func callback ( _ jsc: JSContextRef ? , _ constructor: JSObjectRef ? , _ possibleInstance: JSValueRef ? , _ exception: UnsafeMutablePointer < JSValueRef ? > ? ) -> Bool {
961969 fatalError ( " ### TODO: JSFunctionInstanceOf " )
962970 return false
963971 }
@@ -996,7 +1004,7 @@ private final class JSFunctionConstructorImpl : JSCallbackFunction {
9961004 init ( ) {
9971005 }
9981006
999- public func JSFunctionConstructor ( _ jsc: JSContextRef ? , _ object: JSObjectRef ? , _ argumentCount: Int , _ arguments: UnsafePointer < JSValueRef ? > ? , _ exception: UnsafeMutablePointer < JSValueRef ? > ? ) -> JSObjectRef ? {
1007+ public func callback ( _ jsc: JSContextRef ? , _ object: JSObjectRef ? , _ argumentCount: Int , _ arguments: UnsafePointer < JSValueRef ? > ? , _ exception: UnsafeMutablePointer < JSValueRef ? > ? ) -> JSObjectRef ? {
10001008 fatalError ( " ### TODO: JSFunctionConstructor " )
10011009 return nil
10021010 }
@@ -1150,7 +1158,7 @@ final class JavaScriptCoreLibrary : com.sun.jna.Library {
11501158 /* SKIP EXTERN */ public func JSObjectMakeFunctionWithCallback( _ ctx: JSContextRef , _ name: JSStringRef , _ callAsFunction: JSObjectCallAsFunctionCallback ) -> JSObjectRef
11511159 /* SKIP EXTERN */ public func JSObjectMake( _ ctx: JSContextRef , _ jsClass: JSClassRef ? , _ data: OpaqueJSValue ? ) -> JSObjectRef
11521160
1153- /* SKIP EXTERN */ public func JSObjectCallAsFunction( _ ctx: JSContextRef , _ object: OpaquePointer ? , _ thisObject: OpaquePointer ? , _ argumentCount: Int32 , _ arguments: com . sun . jna . ptr . PointerByReference ? , _ exception: ExceptionPtr ? ) -> JSValueRef
1161+ /* SKIP EXTERN */ public func JSObjectCallAsFunction( _ ctx: JSContextRef , _ object: OpaquePointer ? , _ thisObject: OpaquePointer ? , _ argumentCount: Int32 , _ arguments: OpaquePointer ? , _ exception: ExceptionPtr ? ) -> JSValueRef
11541162
11551163 /* SKIP EXTERN */ public func JSClassCreate( _ cls: JSClassDefinition ) -> JSClassRef
11561164 /* SKIP EXTERN */ public func JSClassRetain( _ cls: JSClassRef ) -> JSClassRef
@@ -1164,9 +1172,10 @@ final class JavaScriptCoreLibrary : com.sun.jna.Library {
11641172 let isAndroid = System . getProperty ( " java.vm.vendor " ) == " The Android Project "
11651173 // on Android we use the embedded libjsc.so; on macOS host, use the system JavaScriptCore
11661174 let jscName = isAndroid ? " jsc " : " JavaScriptCore "
1167- //return com.sun.jna.Native.load(jscName, javaClass(JavaScriptCoreLibrary.self))
1175+ if isAndroid {
1176+ System . loadLibrary ( " c++_shared " ) // io.github.react-native-community:jsc-android-intl requires this, provided in com.facebook.fbjni:fbjni
1177+ }
11681178 com. sun. jna. Native. register ( ( JavaScriptCoreLibrary . self as kotlin . reflect. KClass) . java, jscName)
1169-
11701179 #endif
11711180 }
11721181}
0 commit comments