call method Null safety

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');
  }
  for (var i = 0; i < args.length; i++) {
    Pointer<PyObject>? arg;
    try {
      arg = pyConvertDynamic(args[i]);
      dartpyc.PyTuple_SetItem(pArgs, i, arg);
    } on DartPyException catch (e) {
      if (arg != null) {
        dartpyc.Py_DecRef(arg);
      }
      dartpyc.Py_DecRef(pArgs);
      throw DartPyException(
          'Failed while converting argument ${args[i]} with error $e');
    }
  }
  final result = dartpyc.PyObject_CallObject(_function, pArgs);
  dartpyc.Py_DecRef(pArgs);
  return pyConvertBackDynamic(result)!;
}