// 可在 GC 线程直接调用此方法 public unsafe void FreeValues(int argc, JSValue *values) { if (argc == 0) { return; } if (_mainThreadId == Thread.CurrentThread.ManagedThreadId) { for (int i = 0; i < argc; i++) { JSApi.JS_FreeValueRT(_rt, values[i]); } } else { lock (_pendingActions) { for (int i = 0; i < argc; i++) { var act = new JSAction() { value = values[i], callback = _FreeValueAction, }; _pendingActions.Enqueue(act); } } } }
// unsafe primitive call, will not change ref count of jsvalue in argv public unsafe JSValue _Invoke(int argc, JSValue *argv) { if (_context == null) { return(JSApi.JS_UNDEFINED); } JSContext ctx = _context; var rVal = JSApi.JS_Call(ctx, _jsValue, _thisValue, argc, argv); return(rVal); }
public unsafe void FreeValues(int argc, JSValue *values) { _runtime.FreeValues(argc, values); }
public static extern unsafe JSValue JS_NewPromiseCapability(JSContext ctx, JSValue *resolving_funcs);
public unsafe JSValue Invoke(JSContext ctx, JSValue this_obj, int argc, JSValue *argv) { JSValue rval = JSApi.JS_Call(ctx, _jsValue, this_obj, argc, argv); return(rval); }
public unsafe JSValue Invoke(JSContext ctx, int argc, JSValue *argv) { JSValue rval = JSApi.JS_Call(ctx, _jsValue, JSApi.JS_UNDEFINED, argc, argv); return(rval); }
private unsafe static JSValue Hello(JSContext ctx, JSValue thisArg, int argc, JSValue[] argv, int magic, JSValue *data) { string name = argc > 0 ? argv[0].ToString(ctx) : "anonymous"; Console.WriteLine($"Hello, {name}!"); return(JSValue.Undefined); }
private unsafe ulong CFnData2Impl8(JSContext cx, JSValue thisArg, int argc, JSValue[] argv, int magic, JSValue *data) { try { var fnData = new JSValue[_data_len]; for (int i = 0; i < fnData.Length; i++) { fnData[i] = data[i]; } return(((JSCFunctionDataDelegate)_callback)(cx, thisArg, argv, magic, fnData).uint64); } catch (OutOfMemoryException) { return(JS_ThrowOutOfMemory(cx).uint64); } catch (Exception ex) { return(Utils.ReportException(cx, ex).uint64); } }
private unsafe JSValue CFnDataImpl16(JSContext cx, JSValue thisArg, int argc, JSValue[] argv, int magic, JSValue *data) { try { return(((JSCFunctionData)_callback)(cx, thisArg, argc, argv, magic, data)); } catch (OutOfMemoryException) { return(JS_ThrowOutOfMemory(cx)); } catch (Exception ex) { return(Utils.ReportException(cx, ex)); } }