Python.Runtime.MetaType.tp_call C# (CSharp) Метод

tp_call() приватный Метод

private tp_call ( IntPtr tp, IntPtr args, IntPtr kw ) : IntPtr
tp System.IntPtr
args System.IntPtr
kw System.IntPtr
Результат System.IntPtr
	public static IntPtr tp_call(IntPtr tp, IntPtr args, IntPtr kw) {
	    IntPtr func = Marshal.ReadIntPtr(tp, TypeOffset.tp_new);
	    if (func == IntPtr.Zero) {
		return Exceptions.RaiseTypeError("invalid object");
	    }
	    
	    IntPtr obj = NativeCall.Call_3(func, tp, args, kw);
	    if (obj == IntPtr.Zero) {
		return IntPtr.Zero;
	    }

	    IntPtr py__init__ = Runtime.PyString_FromString("__init__");
	    IntPtr type = Runtime.PyObject_TYPE(obj);
	    IntPtr init = Runtime._PyType_Lookup(type, py__init__);
	    Runtime.Decref(py__init__);
	    Runtime.PyErr_Clear();

	    if (init != IntPtr.Zero) {
		IntPtr bound = Runtime.GetBoundArgTuple(obj, args);
		if (bound == IntPtr.Zero) {
		    Runtime.Decref(obj);
		    return IntPtr.Zero;
		}

		IntPtr result = Runtime.PyObject_Call(init, bound, kw);
		Runtime.Decref(bound);

		if (result == IntPtr.Zero) {
		    Runtime.Decref(obj);
		    return IntPtr.Zero;
		}

		Runtime.Decref(result);
	    }

	    return obj;
	}