call method

Object call(
  1. List<Object?> args
)

Calls the python function with dart args marshalled back and forth

Implementation

Object call(List<Object?> args) {
  final pArgs = dartpyc.PyTuple_New(args.length);
  if (pArgs == nullptr) {
    throw DartPyException('Creating argument tuple failed');
  }
  final pyObjs = <PyObjAllocated>[];
  for (var i = 0; i < args.length; i++) {
    PyObjAllocated? arg;
    try {
      arg = pyConvertDynamic(args[i]);
      dartpyc.PyTuple_SetItem(pArgs, i, arg.pyObj);
    } on DartPyException catch (e) {
      if (arg != null) {
        dartpyc.Py_DecRef(arg.pyObj);
      }
      dartpyc.Py_DecRef(pArgs);
      throw DartPyException(
          'Failed while converting argument ${args[i]} with error $e');
    }
  }
  final result = dartpyc.PyObject_CallObject(_function, pArgs);
  pyObjs.forEach((p) => p.dealloc());
  dartpyc.Py_DecRef(pArgs);
  return pyConvertBackDynamic(result)!;
}