From 54baa25c8779d2184c8c169787067910878e9a55 Mon Sep 17 00:00:00 2001 From: narumi Date: Mon, 22 Feb 2021 00:36:08 +0800 Subject: [PATCH] support FFI 1.0.0 --- lib/src/engine.dart | 8 ++++---- lib/src/ffi.dart | 26 +++++++++++++------------- lib/src/isolate.dart | 10 +++++----- lib/src/wrapper.dart | 20 ++++++++++---------- pubspec.yaml | 2 +- 5 files changed, 33 insertions(+), 33 deletions(-) diff --git a/lib/src/engine.dart b/lib/src/engine.dart index 8aea757..538d3d7 100644 --- a/lib/src/engine.dart +++ b/lib/src/engine.dart @@ -62,11 +62,11 @@ class FlutterQjs { )); case JSChannelType.MODULE: if (moduleHandler == null) throw JSError('No ModuleHandler'); - final ret = Utf8.toUtf8(moduleHandler( - Utf8.fromUtf8(ptr.cast()), - )); + final ret = moduleHandler( + ptr.cast().toDartString(), + ).toNativeUtf8(); Future.microtask(() { - free(ret); + malloc.free(ret); }); return ret; case JSChannelType.PROMISE_TRACK: diff --git a/lib/src/ffi.dart b/lib/src/ffi.dart index dade9a9..fbdfff9 100644 --- a/lib/src/ffi.dart +++ b/lib/src/ffi.dart @@ -309,17 +309,17 @@ Pointer jsEval( String filename, int evalFlags, ) { - final utf8input = Utf8.toUtf8(input); - final utf8filename = Utf8.toUtf8(filename); + final utf8input = input.toNativeUtf8(); + final utf8filename = filename.toNativeUtf8(); final val = _jsEval( ctx, utf8input, - Utf8.strlen(utf8input), + utf8input.length, utf8filename, evalFlags, ); - free(utf8input); - free(utf8filename); + malloc.free(utf8input); + malloc.free(utf8filename); runtimeOpaques[jsGetRuntime(ctx)]._port.sendPort.send(#eval); return val; } @@ -413,9 +413,9 @@ Pointer jsNewString( Pointer ctx, String str, ) { - final utf8str = Utf8.toUtf8(str); + final utf8str = str.toNativeUtf8(); final jsStr = _jsNewString(ctx, utf8str); - free(utf8str); + malloc.free(utf8str); return jsStr; } @@ -599,7 +599,7 @@ String jsToCString( ) { final ptr = _jsToCString(ctx, val); if (ptr.address == 0) throw Exception('JSValue cannot convert to string'); - final str = Utf8.fromUtf8(ptr); + final str = ptr.toDartString(); jsFreeCString(ctx, ptr); return str; } @@ -621,12 +621,12 @@ int jsNewClass( Pointer ctx, String name, ) { - final utf8name = Utf8.toUtf8(name); + final utf8name = name.toNativeUtf8(); final val = _jsNewClass( ctx, utf8name, ); - free(utf8name); + malloc.free(utf8name); return val; } @@ -892,8 +892,8 @@ Pointer jsCall( Pointer thisObj, List argv, ) { - Pointer jsArgs = allocate( - count: argv.length > 0 ? sizeOfJSValue * argv.length : 1, + Pointer jsArgs = calloc( + argv.length > 0 ? sizeOfJSValue * argv.length : 1, ); for (int i = 0; i < argv.length; ++i) { Pointer jsArg = argv[i]; @@ -906,7 +906,7 @@ Pointer jsCall( jsFreeValue(ctx, _thisObj); } jsFreeValue(ctx, func1); - free(jsArgs); + malloc.free(jsArgs); runtimeOpaques[jsGetRuntime(ctx)]._port.sendPort.send(#call); return jsRet; } diff --git a/lib/src/isolate.dart b/lib/src/isolate.dart index 2fc4e1e..14dd23f 100644 --- a/lib/src/isolate.dart +++ b/lib/src/isolate.dart @@ -114,7 +114,7 @@ void _runJsIsolate(Map spawnMessage) async { }); }, moduleHandler: (name) { - final ptr = allocate>(); + final ptr = calloc>(); ptr.value = Pointer.fromAddress(0); sendPort.send({ #type: #module, @@ -123,12 +123,12 @@ void _runJsIsolate(Map spawnMessage) async { }); while (ptr.value.address == 0) sleep(Duration.zero); if (ptr.value.address == -1) throw JSError('Module Not found'); - final ret = Utf8.fromUtf8(ptr.value); + final ret = ptr.value.toDartString(); sendPort.send({ #type: #release, #ptr: ptr.value.address, }); - free(ptr); + malloc.free(ptr); return ret; }, ); @@ -220,13 +220,13 @@ class IsolateQjs { case #module: final ptr = Pointer.fromAddress(msg[#ptr]); try { - ptr.value = Utf8.toUtf8(await moduleHandler(msg[#name])); + ptr.value = (await moduleHandler(msg[#name])).toNativeUtf8(); } catch (e) { ptr.value = Pointer.fromAddress(-1); } break; case #release: - free(Pointer.fromAddress(msg[#ptr])); + malloc.free(Pointer.fromAddress(msg[#ptr])); break; } }, onDone: () { diff --git a/lib/src/wrapper.dart b/lib/src/wrapper.dart index 55e1e97..f7c34ca 100644 --- a/lib/src/wrapper.dart +++ b/lib/src/wrapper.dart @@ -66,7 +66,7 @@ Pointer _dartToJs(Pointer ctx, dynamic val, {Map cache}) { } if (val is _JSObject) return jsDupValue(ctx, val._val); if (val is Future) { - final resolvingFunc = allocate(count: sizeOfJSValue * 2); + final resolvingFunc = malloc(sizeOfJSValue * 2); final resolvingFunc2 = Pointer.fromAddress(resolvingFunc.address + sizeOfJSValue); final ret = jsNewPromiseCapability(ctx, resolvingFunc); @@ -74,7 +74,7 @@ Pointer _dartToJs(Pointer ctx, dynamic val, {Map cache}) { _JSFunction rej = _jsToDart(ctx, resolvingFunc2); jsFreeValue(ctx, resolvingFunc, free: false); jsFreeValue(ctx, resolvingFunc2, free: false); - free(resolvingFunc); + malloc.free(resolvingFunc); _DartObject refRes = _DartObject(ctx, res); _DartObject refRej = _DartObject(ctx, rej); res.free(); @@ -95,11 +95,11 @@ Pointer _dartToJs(Pointer ctx, dynamic val, {Map cache}) { if (val is double) return jsNewFloat64(ctx, val); if (val is String) return jsNewString(ctx, val); if (val is Uint8List) { - final ptr = allocate(count: val.length); + final ptr = malloc(val.length); final byteList = ptr.asTypedList(val.length); byteList.setAll(0, val); final ret = jsNewArrayBufferCopy(ctx, ptr, val.length); - free(ptr); + malloc.free(ptr); return ret; } if (cache.containsKey(val)) { @@ -160,10 +160,10 @@ dynamic _jsToDart(Pointer ctx, Pointer val, {Map cache}) { rt, jsGetObjectOpaque(val, dartObjectClassId)); if (dartObject != null) return dartObject._obj; } - Pointer psize = allocate(); + Pointer psize = malloc(); Pointer buf = jsGetArrayBuffer(ctx, psize, val); int size = psize.value; - free(psize); + malloc.free(psize); if (buf.address != 0) { return Uint8List.fromList(buf.asTypedList(size)); } @@ -215,11 +215,11 @@ dynamic _jsToDart(Pointer ctx, Pointer val, {Map cache}) { } return ret; } else { - Pointer ptab = allocate(); - Pointer plen = allocate(); + Pointer ptab = malloc(); + Pointer plen = malloc(); if (jsGetOwnPropertyNames(ctx, ptab, plen, val, -1) != 0) return null; int len = plen.value; - free(plen); + malloc.free(plen); Map ret = Map(); cache[valptr] = ret; for (int i = 0; i < len; ++i) { @@ -233,7 +233,7 @@ dynamic _jsToDart(Pointer ctx, Pointer val, {Map cache}) { jsFreeAtom(ctx, jsAtom); } jsFree(ctx, ptab.value); - free(ptab); + malloc.free(ptab); return ret; } break; diff --git a/pubspec.yaml b/pubspec.yaml index 461f92d..b1f3755 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,7 +10,7 @@ environment: dependencies: flutter: sdk: flutter - ffi: ^0.1.3 + ffi: ^1.0.0 dev_dependencies: flutter_test: