eval method

dynamic eval(
  1. Pointer<Void> ctxHandle,
  2. String code
)

Implementation

dynamic eval(Pointer<Void> ctxHandle, String code) {
  final cstr = code.toNativeUtf8();
  final out = ffi.calloc<QjsResult>();
  _evaluateValueOut(ctxHandle, cstr.cast(), cstr.length, 0, out);
  ffi.malloc.free(cstr);

  if (out.ref.error != 0) {
    final msg = out.ref.s.address == 0
        ? 'Unknown error'
        : out.ref.s.toDartString();
    _freeResult(out);
    ffi.calloc.free(out);
    throw Exception(msg);
  }

  final res = convertQjsResultToDart(out.ref);
  if (out.ref.type == qjsTypeObject || out.ref.type == qjsTypeFunction) {
    _freeValue(ctxHandle, out);
  }
  _freeResult(out);
  ffi.calloc.free(out);
  return res;
}