mirror of
https://github.com/wgh136/flutter_qjs.git
synced 2025-09-27 05:27:23 +00:00
dart format
This commit is contained in:
@@ -18,8 +18,8 @@ void main() {
|
|||||||
// Verify that platform version is retrieved.
|
// Verify that platform version is retrieved.
|
||||||
expect(
|
expect(
|
||||||
find.byWidgetPredicate(
|
find.byWidgetPredicate(
|
||||||
(Widget widget) => widget is Text &&
|
(Widget widget) =>
|
||||||
widget.data.startsWith('Running on:'),
|
widget is Text && widget.data.startsWith('Running on:'),
|
||||||
),
|
),
|
||||||
findsOneWidget,
|
findsOneWidget,
|
||||||
);
|
);
|
||||||
|
62
lib/ffi.dart
62
lib/ffi.dart
@@ -3,7 +3,7 @@
|
|||||||
* @Author: ekibun
|
* @Author: ekibun
|
||||||
* @Date: 2020-09-19 10:29:04
|
* @Date: 2020-09-19 10:29:04
|
||||||
* @LastEditors: ekibun
|
* @LastEditors: ekibun
|
||||||
* @LastEditTime: 2020-09-24 23:25:32
|
* @LastEditTime: 2020-09-27 01:12:16
|
||||||
*/
|
*/
|
||||||
import 'dart:ffi';
|
import 'dart:ffi';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
@@ -84,16 +84,20 @@ Pointer jsThrowInternalError(Pointer ctx, String message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// JSValue *jsEXCEPTION()
|
/// JSValue *jsEXCEPTION()
|
||||||
final Pointer Function() jsEXCEPTION =
|
final Pointer Function() jsEXCEPTION = qjsLib
|
||||||
qjsLib.lookup<NativeFunction<Pointer Function()>>("jsEXCEPTION").asFunction();
|
.lookup<NativeFunction<Pointer Function()>>("jsEXCEPTION")
|
||||||
|
.asFunction();
|
||||||
|
|
||||||
/// JSValue *jsUNDEFINED()
|
/// JSValue *jsUNDEFINED()
|
||||||
final Pointer Function() jsUNDEFINED =
|
final Pointer Function() jsUNDEFINED = qjsLib
|
||||||
qjsLib.lookup<NativeFunction<Pointer Function()>>("jsUNDEFINED").asFunction();
|
.lookup<NativeFunction<Pointer Function()>>("jsUNDEFINED")
|
||||||
|
.asFunction();
|
||||||
|
|
||||||
/// JSRuntime *jsNewRuntime(JSChannel channel)
|
/// JSRuntime *jsNewRuntime(JSChannel channel)
|
||||||
final Pointer Function(
|
final Pointer Function(
|
||||||
Pointer<NativeFunction<Pointer Function(Pointer ctx, Pointer method, Pointer argv)>>,
|
Pointer<
|
||||||
|
NativeFunction<
|
||||||
|
Pointer Function(Pointer ctx, Pointer method, Pointer argv)>>,
|
||||||
) _jsNewRuntime = qjsLib
|
) _jsNewRuntime = qjsLib
|
||||||
.lookup<
|
.lookup<
|
||||||
NativeFunction<
|
NativeFunction<
|
||||||
@@ -209,7 +213,13 @@ Pointer jsEval(
|
|||||||
) {
|
) {
|
||||||
var utf8input = Utf8.toUtf8(input);
|
var utf8input = Utf8.toUtf8(input);
|
||||||
var utf8filename = Utf8.toUtf8(filename);
|
var utf8filename = Utf8.toUtf8(filename);
|
||||||
var val = _jsEval(ctx, utf8input, Utf8.strlen(utf8input), utf8filename, evalFlags);
|
var val = _jsEval(
|
||||||
|
ctx,
|
||||||
|
utf8input,
|
||||||
|
Utf8.strlen(utf8input),
|
||||||
|
utf8filename,
|
||||||
|
evalFlags,
|
||||||
|
);
|
||||||
free(utf8input);
|
free(utf8input);
|
||||||
free(utf8filename);
|
free(utf8filename);
|
||||||
runtimeOpaques[jsGetRuntime(ctx)].port.sendPort.send('eval');
|
runtimeOpaques[jsGetRuntime(ctx)].port.sendPort.send('eval');
|
||||||
@@ -532,18 +542,23 @@ final Pointer Function(
|
|||||||
|
|
||||||
/// int jsDefinePropertyValue(JSContext *ctx, JSValueConst *this_obj,
|
/// int jsDefinePropertyValue(JSContext *ctx, JSValueConst *this_obj,
|
||||||
/// JSAtom prop, JSValue *val, int flags)
|
/// JSAtom prop, JSValue *val, int flags)
|
||||||
final int Function(Pointer ctx, Pointer thisObj, int prop, Pointer val, int flag)
|
final int Function(
|
||||||
jsDefinePropertyValue = qjsLib
|
Pointer ctx,
|
||||||
.lookup<
|
Pointer thisObj,
|
||||||
NativeFunction<
|
int prop,
|
||||||
Int32 Function(
|
Pointer val,
|
||||||
Pointer,
|
int flag,
|
||||||
Pointer,
|
) jsDefinePropertyValue = qjsLib
|
||||||
Uint32,
|
.lookup<
|
||||||
Pointer,
|
NativeFunction<
|
||||||
Int32,
|
Int32 Function(
|
||||||
)>>("jsDefinePropertyValue")
|
Pointer,
|
||||||
.asFunction();
|
Pointer,
|
||||||
|
Uint32,
|
||||||
|
Pointer,
|
||||||
|
Int32,
|
||||||
|
)>>("jsDefinePropertyValue")
|
||||||
|
.asFunction();
|
||||||
|
|
||||||
/// void jsFreeAtom(JSContext *ctx, JSAtom v)
|
/// void jsFreeAtom(JSContext *ctx, JSAtom v)
|
||||||
final Pointer Function(
|
final Pointer Function(
|
||||||
@@ -618,8 +633,9 @@ final int Function(
|
|||||||
.asFunction();
|
.asFunction();
|
||||||
|
|
||||||
/// uint32_t sizeOfJSValue()
|
/// uint32_t sizeOfJSValue()
|
||||||
final int Function() _sizeOfJSValue =
|
final int Function() _sizeOfJSValue = qjsLib
|
||||||
qjsLib.lookup<NativeFunction<Uint32 Function()>>("sizeOfJSValue").asFunction();
|
.lookup<NativeFunction<Uint32 Function()>>("sizeOfJSValue")
|
||||||
|
.asFunction();
|
||||||
|
|
||||||
final sizeOfJSValue = _sizeOfJSValue();
|
final sizeOfJSValue = _sizeOfJSValue();
|
||||||
|
|
||||||
@@ -664,7 +680,9 @@ Pointer jsCall(
|
|||||||
Pointer thisObj,
|
Pointer thisObj,
|
||||||
List<Pointer> argv,
|
List<Pointer> argv,
|
||||||
) {
|
) {
|
||||||
Pointer jsArgs = allocate<Uint8>(count: argv.length > 0 ? sizeOfJSValue * argv.length : 1);
|
Pointer jsArgs = allocate<Uint8>(
|
||||||
|
count: argv.length > 0 ? sizeOfJSValue * argv.length : 1,
|
||||||
|
);
|
||||||
for (int i = 0; i < argv.length; ++i) {
|
for (int i = 0; i < argv.length; ++i) {
|
||||||
Pointer jsArg = argv[i];
|
Pointer jsArg = argv[i];
|
||||||
setJSValueList(jsArgs, i, jsArg);
|
setJSValueList(jsArgs, i, jsArg);
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
* @Author: ekibun
|
* @Author: ekibun
|
||||||
* @Date: 2020-08-08 08:29:09
|
* @Date: 2020-08-08 08:29:09
|
||||||
* @LastEditors: ekibun
|
* @LastEditors: ekibun
|
||||||
* @LastEditTime: 2020-09-21 23:59:40
|
* @LastEditTime: 2020-09-27 01:08:14
|
||||||
*/
|
*/
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:ffi';
|
import 'dart:ffi';
|
||||||
@@ -33,7 +33,12 @@ class FlutterQjs {
|
|||||||
if (method.address != 0) {
|
if (method.address != 0) {
|
||||||
if (methodHandler == null) throw Exception("No MethodHandler");
|
if (methodHandler == null) throw Exception("No MethodHandler");
|
||||||
var argvs = jsToDart(ctx, argv);
|
var argvs = jsToDart(ctx, argv);
|
||||||
return dartToJs(ctx, methodHandler(Utf8.fromUtf8(method.cast<Utf8>()), argvs));
|
return dartToJs(
|
||||||
|
ctx,
|
||||||
|
methodHandler(
|
||||||
|
Utf8.fromUtf8(method.cast<Utf8>()),
|
||||||
|
argvs,
|
||||||
|
));
|
||||||
}
|
}
|
||||||
if (moduleHandler == null) throw Exception("No ModuleHandler");
|
if (moduleHandler == null) throw Exception("No ModuleHandler");
|
||||||
var ret = Utf8.toUtf8(moduleHandler(Utf8.fromUtf8(argv.cast<Utf8>())));
|
var ret = Utf8.toUtf8(moduleHandler(Utf8.fromUtf8(argv.cast<Utf8>())));
|
||||||
@@ -42,7 +47,10 @@ class FlutterQjs {
|
|||||||
});
|
});
|
||||||
return ret;
|
return ret;
|
||||||
} catch (e, stack) {
|
} catch (e, stack) {
|
||||||
var err = jsThrowInternalError(ctx, e.toString() + "\n" + stack.toString());
|
var err = jsThrowInternalError(
|
||||||
|
ctx,
|
||||||
|
e.toString() + "\n" + stack.toString(),
|
||||||
|
);
|
||||||
if (method.address == 0) {
|
if (method.address == 0) {
|
||||||
jsFreeValue(ctx, err);
|
jsFreeValue(ctx, err);
|
||||||
return Pointer.fromAddress(0);
|
return Pointer.fromAddress(0);
|
||||||
@@ -92,7 +100,12 @@ class FlutterQjs {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
List jsPromises = runtimeOpaques[_rt].ref.where((v) => v is JSPromise).toList();
|
List jsPromises = runtimeOpaques[_rt]
|
||||||
|
.ref
|
||||||
|
.where(
|
||||||
|
(v) => v is JSPromise,
|
||||||
|
)
|
||||||
|
.toList();
|
||||||
for (JSPromise jsPromise in jsPromises) {
|
for (JSPromise jsPromise in jsPromises) {
|
||||||
if (jsPromise.checkResolveReject()) {
|
if (jsPromise.checkResolveReject()) {
|
||||||
jsPromise.release();
|
jsPromise.release();
|
||||||
|
@@ -68,7 +68,11 @@ class JSFunction extends JSRefValue {
|
|||||||
@override
|
@override
|
||||||
noSuchMethod(Invocation invocation) {
|
noSuchMethod(Invocation invocation) {
|
||||||
if (val == null) return;
|
if (val == null) return;
|
||||||
List<Pointer> args = invocation.positionalArguments.map((e) => dartToJs(ctx, e)).toList();
|
List<Pointer> args = invocation.positionalArguments
|
||||||
|
.map(
|
||||||
|
(e) => dartToJs(ctx, e),
|
||||||
|
)
|
||||||
|
.toList();
|
||||||
Pointer jsRet = jsCall(ctx, val, null, args);
|
Pointer jsRet = jsCall(ctx, val, null, args);
|
||||||
for (Pointer jsArg in args) {
|
for (Pointer jsArg in args) {
|
||||||
jsFreeValue(ctx, jsArg);
|
jsFreeValue(ctx, jsArg);
|
||||||
@@ -109,7 +113,8 @@ String parseJSException(Pointer ctx, {Pointer e}) {
|
|||||||
Pointer dartToJs(Pointer ctx, dynamic val, {Map<dynamic, dynamic> cache}) {
|
Pointer dartToJs(Pointer ctx, dynamic val, {Map<dynamic, dynamic> cache}) {
|
||||||
if (val is Future) {
|
if (val is Future) {
|
||||||
var resolvingFunc = allocate<Uint8>(count: sizeOfJSValue * 2);
|
var resolvingFunc = allocate<Uint8>(count: sizeOfJSValue * 2);
|
||||||
var resolvingFunc2 = Pointer.fromAddress(resolvingFunc.address + sizeOfJSValue);
|
var resolvingFunc2 =
|
||||||
|
Pointer.fromAddress(resolvingFunc.address + sizeOfJSValue);
|
||||||
var ret = jsNewPromiseCapability(ctx, resolvingFunc);
|
var ret = jsNewPromiseCapability(ctx, resolvingFunc);
|
||||||
var res = jsToDart(ctx, resolvingFunc);
|
var res = jsToDart(ctx, resolvingFunc);
|
||||||
var rej = jsToDart(ctx, resolvingFunc2);
|
var rej = jsToDart(ctx, resolvingFunc2);
|
||||||
@@ -235,7 +240,8 @@ dynamic jsToDart(Pointer ctx, Pointer val, {Map<int, dynamic> cache}) {
|
|||||||
var jsAtom = jsPropertyEnumGetAtom(ptab.value, i);
|
var jsAtom = jsPropertyEnumGetAtom(ptab.value, i);
|
||||||
var jsAtomValue = jsAtomToValue(ctx, jsAtom);
|
var jsAtomValue = jsAtomToValue(ctx, jsAtom);
|
||||||
var jsProp = jsGetProperty(ctx, val, jsAtom);
|
var jsProp = jsGetProperty(ctx, val, jsAtom);
|
||||||
ret[jsToDart(ctx, jsAtomValue, cache: cache)] = jsToDart(ctx, jsProp, cache: cache);
|
ret[jsToDart(ctx, jsAtomValue, cache: cache)] =
|
||||||
|
jsToDart(ctx, jsProp, cache: cache);
|
||||||
jsFreeValue(ctx, jsAtomValue);
|
jsFreeValue(ctx, jsAtomValue);
|
||||||
jsFreeValue(ctx, jsProp);
|
jsFreeValue(ctx, jsProp);
|
||||||
jsFreeAtom(ctx, jsAtom);
|
jsFreeAtom(ctx, jsAtom);
|
||||||
@@ -273,7 +279,8 @@ Pointer jsNewContextWithPromsieWrapper(Pointer rt) {
|
|||||||
runtimeOpaques[rt].promsieToFuture = (promise) {
|
runtimeOpaques[rt].promsieToFuture = (promise) {
|
||||||
var completer = Completer();
|
var completer = Completer();
|
||||||
var wrapper = promiseWrapper.val;
|
var wrapper = promiseWrapper.val;
|
||||||
if (wrapper == null) completer.completeError(Exception("Runtime has been released!"));
|
if (wrapper == null)
|
||||||
|
completer.completeError(Exception("Runtime has been released!"));
|
||||||
var jsPromise = jsCall(ctx, wrapper, null, [promise]);
|
var jsPromise = jsCall(ctx, wrapper, null, [promise]);
|
||||||
runtimeOpaques[rt].ref.add(JSPromise(ctx, jsPromise, completer));
|
runtimeOpaques[rt].ref.add(JSPromise(ctx, jsPromise, completer));
|
||||||
jsFreeValue(ctx, jsPromise);
|
jsFreeValue(ctx, jsPromise);
|
||||||
|
@@ -10,7 +10,7 @@ environment:
|
|||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
ffi: 0.1.3
|
ffi: ^0.1.3
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
Reference in New Issue
Block a user