private PyClass_New ( IntPtr bases, IntPtr dict, IntPtr name ) : IntPtr | ||
bases | IntPtr | |
dict | IntPtr | |
name | IntPtr | |
return | IntPtr |
internal static IntPtr GenerateExceptionClass(IntPtr real) { if (real == ns_exc) { return(os_exc); } IntPtr nbases = Runtime.PyObject_GetAttrString(real, "__bases__"); if (Runtime.PyTuple_Size(nbases) != 1) { throw new SystemException("Invalid __bases__"); } IntPtr nsbase = Runtime.PyTuple_GetItem(nbases, 0); Runtime.Decref(nbases); IntPtr osbase = GetExceptionClassWrapper(nsbase); IntPtr baselist = Runtime.PyTuple_New(1); Runtime.Incref(osbase); Runtime.PyTuple_SetItem(baselist, 0, osbase); IntPtr name = Runtime.PyObject_GetAttrString(real, "__name__"); IntPtr dict = Runtime.PyDict_New(); IntPtr mod = Runtime.PyObject_GetAttrString(real, "__module__"); Runtime.PyDict_SetItemString(dict, "__module__", mod); Runtime.Decref(mod); IntPtr subc = Runtime.PyClass_New(baselist, dict, name); Runtime.Decref(baselist); Runtime.Decref(dict); Runtime.Decref(name); Runtime.PyObject_SetAttrString(subc, "_class", real); return(subc); }