evaluateModule function
Implementation
Future<bool> evaluateModule(double contextId, Uint8List codeBytes,
{String? url, String? cacheKey, bool loadedFromCache = false, int line = 0, ScriptElement? scriptElement}) async {
if (WebFController.getControllerOfJSContextId(contextId) == null) {
return false;
}
// Assign `vm://$id` for no url (anonymous scripts).
if (url == null) {
url = 'vm://module/$_anonymousScriptEvaluationId';
_anonymousScriptEvaluationId++;
}
{
Pointer<Utf8> urlPtr = url.toNativeUtf8();
Pointer<Uint8> codePtr = uint8ListToPointer(codeBytes);
Completer<bool> completer = Completer();
_EvaluateScriptsContext context = _EvaluateScriptsContext(completer, codeBytes, codePtr, urlPtr, cacheKey);
Pointer<NativeFunction<NativeEvaluateJavaScriptCallback>> resultCallback =
Pointer.fromFunction(handleEvaluateScriptsResult);
Pointer<NativeBindingObject> scriptElementPtr = scriptElement?.pointer! ?? nullptr;
try {
assert(_allocatedPages.containsKey(contextId));
if (QuickJSByteCodeCache.isCodeNeedCache(codeBytes)) {
// Export the bytecode from scripts
Pointer<Pointer<Uint8>> bytecodes = malloc.allocate(sizeOf<Pointer<Uint8>>());
Pointer<Uint64> bytecodeLen = malloc.allocate(sizeOf<Uint64>());
context.bytecodes = bytecodes;
context.bytecodeLen = bytecodeLen;
_evaluateModule(_allocatedPages[contextId]!, codePtr, codeBytes.length, bytecodes, bytecodeLen, urlPtr, line,
scriptElementPtr, context, resultCallback);
} else {
_evaluateModule(_allocatedPages[contextId]!, codePtr, codeBytes.length, nullptr, nullptr, urlPtr, line,
scriptElementPtr, context, resultCallback);
}
return completer.future;
} catch (e, stack) {
bridgeLogger.severe('Error in event listener', e, stack);
}
return completer.future;
}
}